Question
UART receive data problem
Hi,
I am using stm32f103 mcu for UART data transmit and receive. I am using UART interrupt for both receiving and transmitting. Sometimes received data takes a different value than it should be. This occurs when i send some data from stm32 to serial port at the same time. All data can be received normally but sometimes some of 10-byte data is changed to a different value. Any advise ?
Thanks...
void USART1_IRQHandler(void)
{
if((USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) && (USART_GetITStatus(USART1, USART_IT_TXE) == RESET))
{
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
unsigned char data;
data = USART_ReceiveData(USART1);
uart_buffer[uart_buffer_index] = data;
uart_buffer_index++;
//do some stuff with uart_buffer[]
}
if( (USART_GetITStatus(USART1, USART_IT_TXE) != RESET ) && (USART_GetITStatus(USART1, USART_IT_RXNE) == RESET)) // TX buffer not empty
{
if(byte_counter != 0)//if there is any data in data_buff array
{
USART_SendData(USART1, (uint16_t)*out_pointer);//send buffer data
out_pointer++; //inc pointer for next data in data_buff array
byte_counter--;
if(out_pointer >= &data_buff[0] + TX_BUFFER_SIZE)
{
out_pointer = &data_buff[0];
}
}
else
{
USART_ClearITPendingBit(USART1, USART_IT_TC);
USART_ClearITPendingBit(USART1, USART_IT_TXE);
USART_ITConfig(USART1, USART_IT_TXE, DISABLE);//UC1IE &= ~ UCA1TXIE; // Disable USCI_A1 TX interrupt
}
}
if(USART_GetFlagStatus(USART1,USART_FLAG_ORE) != RESET)
{
(void)USART_ReceiveData(USART1);
}
}