GPS UART数据多次写入Buffer

时间:2018-03-16 09:27:40

标签: c gps interrupt circular-buffer usart

我正在接收/读取通过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;
....

如果我应该提供更多信息,请告诉我。

1 个答案:

答案 0 :(得分:1)

此:

COMPLETED

不测试一个标志,该代码正在检查标志常量本身,这不是你的意思。

您需要更多代码才能访问UART的状态寄存器并检查标志:

if (USART_FLAG_RXNE != RESET)