[Programmation] UART sur STM32F446RE
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

UART sur STM32F446RE



  1. #1
    jcchud

    UART sur STM32F446RE


    ------

    Bonjour,


    J'aurais besoin d'un coup de pouce pour utiliser l'UART sur un STM32F446RE (board nucléo). J'ai du oublier quelque chose mais je tourne en rond et je ne vois pas...
    Tout d'abord, pour vous faciliter la tâche je vous réunis ci-dessous les liens vers le Reference Manual, et la datasheet du µC :

    - Datasheet : http://www.st.com/resource/en/datasheet/stm32f446re.pdf

    - Reference manual : http://www.st.com/content/ccc/resour...DM00135183.pdf

    Ma procédure est la suivante :

    • Activer la clock sur le GPIO sur lequel il y a l’UART qu’on va utiliser
    (USART2 : D1 et D0)
    TX = D1 = PA2
    RX = D0 = PA3
    RCC->AHB1ENR = BIT0 à 1
    • Activer la clock de l’UART qu’on va utiliser
    RCC->APB1ENR = BIT17 à 1
    • Configurer les pins concernés au niveau GPIO
    La pin TX (transmission) doit être en low speed alternate function (AF7) output push-pull
    GPIOA->MODER = BIT4 à 0 + BIT5 à 1 pour alternate function mode
    GPIOA->OTYPER = BIT2 à 0 pour output push-pull
    GPIOA->OSPEEDR = BIT4 à 0 + BIT5 à 0 pour low speed
    GPIOA-> AFRL = BIT11 à 0
    BIT10 à 1
    BIT9 à 1
    BIT8 à 1
    La pin RX (réception) doit être en floating input avec pull up ou down si necessaire
    GPIOA->MODER = BIT 7 à 0 + BIT6 à 0
    GPIOA->AFRL = BIT15 à 0 //Voir si utile de la mettre en alternate function également ?
    BIT14 à 1
    BIT13 à 1
    BIT12 à 1
    • Configurer la valeur du baudrate (voir les tableaux en oversampling par 16 je pense avec clock 16mhz mais pas sûr) = 104.1875
    USART2->BRR |= 104 << 4 ;
    USART2->BRR |= 1875
    • Choisir une taille de 8 bits de données
    Rien à toucher car c’est de la mise à 0
    • Choisir un seul bit de stop
    USART2->CR2 = BIT13 0 à et BIT12 à 0
    • Mettre en fonction l’USART
    USART2->CR1 = BIT13 à 1
    • Mettre en fonction le RX pour recevoir les data
    USART2->CR1 = BIT2 à 1
    • Mettre en fonction le TX pour envoyer des data
    USART2->CR1 = BIT3 à 1

    Est-ce que vous validez cette procédure ?

    Voici le code associé :

    Code:
    	//Activation des horloges
    	RCC->AHB1ENR = (RCC->AHB1ENR) | (BIT0); //Activation de la clock du GPIO concerné par l'UART
    	RCC->APB1ENR = (RCC->APB1ENR) | (BIT17); //Activation de l'UART voulu
    	/*VOIR SI Y A PAS UNE HORLOGE A ACTIVER SUR LES ALTERNATE FUNCTIONS*/
    
    	//Configuration des GPIO
    	//Config de TX
    	GPIOA->MODER = (GPIOA->MODER) &~ (BIT4); //Configuration PA2 pour pin TX en alternate function
    	GPIOA->MODER = (GPIOA->MODER) | (BIT5);
    	GPIOA->OTYPER = (GPIOA->OTYPER) &~ (BIT2); //Output push-pull
    	GPIOA->OSPEEDR = (GPIOA->OSPEEDR) &~ (BIT4); //Configuration en low-speed
    	GPIOA->OSPEEDR = (GPIOA->OSPEEDR) &~ (BIT5);
    	GPIOA->AFR[0] = (GPIOA->AFR[0]) &~ (BIT11); //Configuration de l'alternate function
    	GPIOA->AFR[0] = (GPIOA->AFR[0]) | (BIT10);
    	GPIOA->AFR[0] = (GPIOA->AFR[0]) | (BIT9);
    	GPIOA->AFR[0] = (GPIOA->AFR[0]) | (BIT8);
    
    	//Config de RX
    	GPIOA->MODER = (GPIOA->MODER) &~ (BIT7); //Mise en floating input
    	GPIOA->MODER = (GPIOA->MODER) &~ (BIT6);
    	GPIOA->AFR[0] = (GPIOA->AFR[0]) &~ (BIT15); //Configuration de l'alternate function pas sur que ce soit utile
    	GPIOA->AFR[0] = (GPIOA->AFR[0]) | (BIT14);
    	GPIOA->AFR[0] = (GPIOA->AFR[0]) | (BIT13);
    	GPIOA->AFR[0] = (GPIOA->AFR[0]) | (BIT12);
    
    	//Configuration de l'USART
    	USART2->BRR |= 104<<4; //Baudrate
    	USART2->BRR |= 1875;
    	//Mise en fonction de l'USART
    	USART2->CR1 = (USART2->CR1) | (BIT13);
    	USART2->CR1 = (USART2->CR1) | (BIT2);
    	USART2->CR1 = (USART2->CR1) | (BIT3);
    
    	//Transmission d'un octet par l'USART
    	USART2->DR = 0b11111111 ; 	//Octet en binaire en faisant un ou bit à bit
    	do{
    
    	}while(((USART2->SR)&BIT7) !=1) ;  //On attends la fin de transmission via le bit TXE
    Si les pros du STM32 pouvaient me donner le petit truc qu'il me manque, ce serait au top

    Je vois vraiment pas ce que j'ai oublié de faire...

    Merci d'avance à ceux qui se pencheront sur mon soucis.

    -----

  2. #2
    jcchud

    Re : UART sur STM32F446RE

    C'est bon j'ai trouvé merci.

  3. #3
    DAUDET78

    Re : UART sur STM32F446RE

    Citation Envoyé par jcchud Voir le message
    C'est bon j'ai trouvé merci.
    réponse sympa pour le prochain lecteur qui aura le même problème .
    J'aime pas le Grec

  4. #4
    jcchud

    Re : UART sur STM32F446RE

    Je l'ai fait exprès en attente de réactions

    En réalité, sur les cartes d'évaluation Nucleo, l'USART2 est connecté en interne à la sonde ST-Link ce qui permet d'utiliser un terminal pour dialoguer avec la carte mais via la sonde de prog...
    Donc pas connecté aux broches disponibles sur lesquelles j'avais placé mon espion RS232, c'est pourquoi je voyais rien mdr! Je dialoguais très bien en interne par contre.
    Tout ceci est visible sur les schémas de la Nucléo, voilà ce qui arrive quand on ne pars de la.

    J'ai donc paramétré mon UART3 qui lui est accessible via les connecteurs Morpho et là je sors enfin quelque chose.

    Je sais pas si je suis assez clair ?

  5. A voir en vidéo sur Futura

Discussions similaires

  1. [Programmation] UART et UART FIFO
    Par mril232 dans le forum Électronique
    Réponses: 1
    Dernier message: 10/05/2016, 14h58
  2. uart
    Par lm321 dans le forum Électronique
    Réponses: 2
    Dernier message: 19/03/2015, 22h05
  3. PIC et I2C vs UART
    Par invite220a379c dans le forum Électronique
    Réponses: 3
    Dernier message: 15/07/2009, 11h36
  4. bus i2c ou UART et RTC
    Par Voltron dans le forum Électronique
    Réponses: 7
    Dernier message: 16/11/2008, 13h31
  5. Usb < -- > Uart
    Par invitee5173b0d dans le forum Électronique
    Réponses: 0
    Dernier message: 22/04/2008, 13h29
Découvrez nos comparatifs produits sur l'informatique et les technologies.