STM32
直播中

陈晶尚

7年用户 181经验值
私信 关注
[问答]

为什么我的串口少接收了1个数据?

  正点大哥  想请教一下 我在进行串口调试时 从上位机向STM32发送字符 AA  78  00  02  CC  33  C3  3C,接收正常!然后再发送 AA  78  00  02  CC  33  C3  3C,竟然发现没有接收到AA,后面的几个字符均正常接收,求教,串口程序如下:
void USART1_IRQHandler()
{
u8 res;
if(USART1->SR&(1<<5))
{   
  res=USART1->DR;   
  USART_RX_BUF[USART_RX_STA&0X3F]=res;
     USART_RX_STA++;
     if((USART_RX_BUF[0]==0xAA)&&(USART_RX_BUF[1]==0x78)&&(USART_RX_BUF[4]==0xCC)&&(USART_RX_BUF[5]==0x33)&&(USART_RX_BUF[6]==0xC3)&&(USART_RX_BUF[7]==0x3C))
     { kkk3=USART_RX_BUF[3];
               USART_RX_STA=0;}      
  }            
}
请问错在哪里,搞了几天了,就是搞不明白,先谢谢了。

回帖(3)

bozai602

2019-7-3 09:11:04
你这种机制,问题很大.
比如,你这个如果每次都发送正确,每次都接收正确,那是没问题的.
问题是,如果你发送过程中,某个数据错了,那么按照你的这个规律,恐怕永远也回不到正确的轨道了.也就是数据只要一次有误,后面永远都是错的了.
你必须有其他机制,来保证发生错误的时候,可以设置USART_RX_STA为0,而且后续等下一次数据开始才接收.
所以要我说,你这个应该是在接收过程中受到错误的东西了,导致后续全部都无法接收正确了.
举报

朱翼

2019-7-3 09:29:40
我明白你的意思,你是要我建立1个错误接收后的处理机制,这个我会加进去的。主要是是我监控了数据,发现上位机发送的数据准确,但是接收第二个数据就是少了前面1个AA,不是偶然发生的,而是每次都这样,所以上面的程序肯定有问题,但是我不知道问题在哪?求教
举报

唐晓莉

2019-7-3 09:40:06
上面的程序,我看也没有问题.可以正确接受.只要你的数据无错误.
举报

更多回帖

发帖
×
20
完善资料,
赚取积分