我正在接收/读取通过USART3发送到STM32F091的GPS模块的数据。 数据很好,我通过发送到我的PC COM3端口并将其送到'u-center'(GPS评估软件)来确认。
我的问题是我想在我的C程序中自己评估数据,为此我将它输入环形缓冲区,但是,GPS信号的每个字符都被多次写入缓冲区,而不是一个一个人。
例如
GGGGGGGPPPPPPPPSSSSSSSS 而不是 GPS
我不确定我做错了什么,也许在我盯着这段代码这么长时间之后我会忽略这一点。
以下是相关代码。
stm32f0xx_it.c
#include <main.h>
void USART3_8_IRQHandler(void)
{
if (USART_FLAG_RXNE != RESET)
{
uint16_t byte = 0;
/* Data reception */
/* Clear Overrun Error Flag, necessary when RXNE is used */
USART_GetITStatus(USART3, USART_IT_ORE);
/* Read from Receive Data Register and put into byte */
byte = USART_ReceiveData(USART3);
(*pRXD3).wr = ((*pRXD3).wr + 1) % (*pRXD3).max;
(*pRXD3).Buffer[(*pRXD3).wr] = byte;
/* Send Data to PC, and reset Transmission Complete Flag */
USART_GetITStatus(USART1, USART_IT_TC);
USART_SendData(USART1, byte);
return;
}
return;
}
uartGPS.h
....
struct GPSuart
{
BYTE Buffer[255];
WORD max;
WORD re;
WORD wr;
};
....
main.h
....
extern volatile BYTE B_ser_txd_3[255];
extern volatile BYTE B_ser_rxd_3[255];
extern volatile struct GPSuart TXD_uart_3;
extern volatile struct GPSuart RXD_uart_3;
extern volatile struct GPSuart *pRXD3;
extern volatile struct GPSuart *pTXD3;
....
如果我应该提供更多信息,请告诉我。
答案 0 :(得分:1)
此:
COMPLETED
不测试一个标志,该代码正在检查标志常量本身,这不是你的意思。
您需要更多代码才能访问UART的状态寄存器并检查标志:
if (USART_FLAG_RXNE != RESET)