使用了STM32F1和F4的串口中断,遇到一个问题,请大家帮忙找一下原因。
我的外设给我STM32发一组数据,例如是0xAA,0x01,0x02,0x03,0x04,0x05,0xFF,0xFC,0xFF,0xFF;其中0xAA是帧头,0xFF,0xFC,0xFF,0xFF是帧尾。单片机串口中断读到了0xAA时会开始存放后面的数据。但是一组数据发送完成后,STM32还会进入一次串口中断,并且收到的数据是0xAA。
void USART3_IRQHandler(void)
{
uint8_t c;
if(USART_GetFlagStatus(USART3,USART_FLAG_RXNE)==SET)
{
c = USART_ReceiveData(USART3);
if((GPS_cmd_st == 0) && (GPS_bufIdx == 0) && (c == 0xAA))//判断帧头
{
GPS_cmd_st = 1;
}
if(GPS_cmd_st)
{
GPS_buf[GPS_bufIdx++] = c;
}
if( (GPS_buf[GPS_bufIdx-1] == 0xFF) && (GPS_buf[GPS_bufIdx-2] == 0xFF) && (GPS_buf[GPS_bufIdx-3] == 0xFC) )//判断帧尾
{
GPS_cmd_st = 0;
GPS_REV_FLAG = 1;//本组数据接收完成
GPS_bufIdx = 0;
}
}
}
上面中断函数接收数据的处理。
外设发来的数据是:0xAA,0x01,0x02,0x03,0x04,0x05,0xFF,0xFC,0xFF,0xFF
USB转串口模块读到的数据是:0xAA,0x01,0x02,0x03,0x04,0x05,0xFF,0xFC,0xFF,0xFF
单片机接收到的数据是:0xAA,0x01,0x02,0x03,0x04,0x05,0xFF,0xFC,0xFF,0xFF,0xAA
单片机调试模式下在读到0xFF,0xFC,0xFF,0xFF后在中断加入断点,能够发现单片机会进入中断函数,并且读到的数据是0xAA。
请问有没有高手遇到这个问题的,有没有解决方法(除了软件屏蔽最后的0xAA)?
|