Question
STM32F103T8 usart2 corrupted data
Posted on September 28, 2011 at 08:12
Hi,
Im trying to get the usart2 working but for some reason I get random corrupted data when I send message to the STM32F103T8. I can send messages from the STM32 to the computer without any corrupted bytes but not the other way around.The usart2 is piping the received messages to a DMA. I've activated the usart2 in the following way: DMA_DeInit(DMA1_Channel6); DMA_StructInit(&DMA_InitStructure); DMA_InitStructure.DMA_PeripheralBaseAddr = USART2_DR_Base; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)gRXBuf2; //Define in usart2.h DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_BufferSize = RX_BUF_SIZE2; //Define in usart2.h DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; DMA_Init( DMA1_Channel6, &DMA_InitStructure );USART_InitStructure2.USART_BaudRate = 4800;
USART_InitStructure2.USART_WordLength = USART_WordLength_8b;
USART_InitStructure2.USART_StopBits = USART_StopBits_1;
USART_InitStructure2.USART_Parity = USART_Parity_No;
USART_InitStructure2.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure2.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
/* Configure USART2 */
USART_Init(USART2, &USART_InitStructure2);
/* Enable USART2 Receive and Transmit interrupts */ USART_ITConfig(USART2, USART_IT_TC, ENABLE); // Enable USART2 Receive DMA requests USART_DMACmd(USART2, USART_DMAReq_Rx, ENABLE); // Enable DMA1 USART RX channel DMA_Cmd(DMA1_Channel6, ENABLE); // Enable USART2 USART_Cmd(USART2, ENABLE);I have also enabled the usart2 clock as following: RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);And finally enabled the usart2 interrupt: NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);I've done a simple program which checks when new data have been added to the DMA memory where the received data is and send the exact same data back to the computer.Then i connect to the STM32 with the windows xp hyperterminal and sends some chars.For example if i send GPGGA, I might get back something like GP=GA or even worse like G?G, where some chars is ''.Does anyone have any idea what might be wrong? I would really appriciate the help.CheersMike #stm32-stm32f103-usart-corrupted