Salut à tous
je veux faire un test de l'UART en mode loopback. "Un test loopback veut dire qu'on court-circuite les deux broches afin que l'on transmet avec TX on le reçoit avec RX."
Je travaille avec la carte STM32F4 Discovery. Je choisis USART3 (USART3_TX (PD8) et USART_RX (PD9)).
Je prépare donc mon programme et je fais le test mais sans résultat,voila mon programme main :
#include "stm32f4xx.h"
/* Private typedef -----------------------------------------------------------*/
GPIO_InitTypeDef GPIO_InitStructure;
/* Private define ------------------------------------------------------------*/
#define USART USART3
#define USART_GPIO GPIOD
#define USART_CLK RCC_APB1Periph_USART3
#define USART_GPIO_CLK RCC_APB1Periph_GPIOD
#define USART_RxPin GPIO_Pin_9
#define USART_TxPin GPIO_Pin_8
/* Private variables ---------------------------------------------------------*/
USART_InitTypeDef USART_InitStructure;
uint8_t RxBuffer_UART;
uint8_t envoi_USART3;
/* Private function prototypes -----------------------------------------------*/
void LEDInit();
void LEDOff(Led_TypeDef Led);
void LEDOn(Led_TypeDef Led);
void delay(void);
void RCC_Configuration(void);
void GPIO_Configuration(void);
int main(void)
{
/* System Clocks Configuration */
RCC_Configuration();
/* Configure the GPIO ports */
GPIO_Configuration();
/* USART configured as follow:
- BaudRate = 9600 baud
- Word Length = 8 Bits
- One Stop Bit
- No parity
- Hardware flow control disabled (RTS and CTS signals)
- Receive and transmit enabled
*/
USART_InitStructure.USART_Baud Rate = 9600;
USART_InitStructure.USART_Word Length = USART_WordLength_8b;
USART_InitStructure.USART_Stop Bits = USART_StopBits_1;
USART_InitStructure.USART_Pari ty = USART_Parity_No;
USART_InitStructure.USART_Hard wareFlowControl = USART_HardwareFlowControl_None ;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
/* Configure USART */
USART_Init(USART, &USART_InitStructure);
/* Enable the USART */
USART_Cmd(USART, ENABLE);
/* Infinite loop */
while(1)
{ envoi_USART3=0x66; // je change cette valeur pendant chaque test pour la visualiser
USART_SendData(USART3,envoi_US ART3);
while (USART_GetFlagStatus(USART, USART_FLAG_RXNE) ==RESET) //indicateur de message en attente dans le buffer de USART3
{}
RxBuffer_UART = USART_ReceiveData(USART); //pendant le test le contenu de RxBuffer_UART est toujours vide !!???
} // fin de while
} // fin de main
/*activation de l'horloge*/
void RCC_Configuration(void)
{
/* Enable GPIO clock */
RCC_AHB1PeriphClockCmd(RCC_AHB 1Periph_GPIOD, ENABLE);
/* Enable USART Clock */
RCC_APB1PeriphClockCmd(RCC_APB 1Periph_USART3, ENABLE);
}
/* configuration GPIO*/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Configure USART Tx as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = USART_TxPin;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_Init(USART_GPIO, &GPIO_InitStructure);
/* Configure USART Rx as input floating */
GPIO_InitStructure.GPIO_Pin = USART_RxPin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_Init(USART_GPIO, &GPIO_InitStructure);
/* Connect PXx to USARTx_Tx*/
GPIO_PinAFConfig(GPIOD,GPIO_Pi n_8,GPIO_AF_USART3);
/* Connect PXx to USARTx_Rx*/
GPIO_PinAFConfig(GPIOD, GPIO_Pin_9, GPIO_AF_USART3);
}
SVP ya t'il quelqu'un qui peut m'aider !!!
merci d'avance
cordialement Etudiant_GEII
-----