用的是原子的官方例程,找了好久没找到问题,求指点啊,就加了一个判断接收到的数据是不是以ff开头,ee结尾的。USART_RX_STA是u16变量,最高位用来判断是否接收完成,次高位是用来判断是不是接收到了ff头。找了一天多了还是没找出问题。
USART1_IRQHandler(void) //串口1中断服务程序
{
u8 Res;
u16 temp;
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
Res =USART_ReceiveData(USART1); //读取接收到的数据
if(Res==0xff)//接收中断(接收到的数据必须是0xff头)
{
USART_RX_STA|=0x4000;//接收0xff标志位
}
if(((USART_RX_STA&0x8000)==0)&&((USART_RX_STA&=0x4000)!=0))//接收未完成且数据是以0xff开头
{
if(Res==0xee)
{
USART_RX_STA|=0x8000; //接收完成了
Communication_Decode();
}
else //还没收到0Xee
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
temp=USART_RX_STA&0x3FFF;
USART_RX_STA++;
if(temp>(USART_REC_LEN-1))
{
USART_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
OSIntExit();
#endif
}
#endif
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
先确保能正确收到数据,
然后仿真器设断点,很容易查。
一周热门 更多>