OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2291|回复: 0

串口通信问题!!串口接收的两个函数采用的是原子哥的历程,在主函数中处理方式不同,会出现bug,但是理论上应该不会出现问题...

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-9-12
在线时间
3 小时
发表于 2020-7-22 15:49:30 | 显示全部楼层 |阅读模式
写一个串口通信接收发送的程序,用的是原子哥的例程,发现调试时候遇到了一个问题,怎么也想不到 求大神指导;
串口接收库函数:

void USART3_IRQHandler(void)
{
   u8 res;
        if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//½óêÕμ½êy¾Y
        {                
          res =USART_ReceiveData(USART3);//;¶á衽óêÕμ½μÄêy¾YUSART2->DR
   // USART_SendData(USART3,res);
                if(Bluetooth_RX_CNT<64)
                {
                        Bluetooth_RX_BUF[Bluetooth_RX_CNT]=res;                //&#188;&#199;&#194;&#188;&#189;óê&#213;μ&#189;μ&#196;&#214;μ
                        Bluetooth_RX_CNT++;                                                //&#189;óê&#213;êy&#190;Y&#212;&#246;&#188;ó1
                }
        }                                                                                           
}


原子哥写的的一个接收函数:
void Bluetooth_Receive_Data(u8 *buf,u8 *len)
{
       
        u8 rxlen=Bluetooth_RX_CNT;
        u8 i=0;
        *len=0;                                //&#196;&#172;è&#207;&#206;a0
        delay_ms(1);                //
        if(rxlen==Bluetooth_RX_CNT&&rxlen)//
        {
                for(i=0;i<rxlen;i++)
                {
                        buf[i]=Bluetooth_RX_BUF[i];       
                }               
                *len=Bluetooth_RX_CNT;        //&#188;&#199;&#194;&#188;±&#190;′&#206;êy&#190;Y3¤&#182;è
   Bluetooth_RX_CNT=0;                //&#199;&#229;á&#227;
        }
}


这两个函数都没问题,但是在主函数中处理方式不同会出现bug,程序目标是接收到0x01 0x02 LED0亮,,接收到0x02,0x03 LED1亮
假如在主函数中:
while(1)
{
        Bluetooth_Receive_Data(databuf,&number)
       if(number!=0)
                {
           if(databuf[0]==0x01&&databuf[1]==0x02)
                    {    LED0=1;    }
         if(databuf[0]==0x02&&databuf[1]==0x03)
                    {    LED1=1;    }

                 }
            }
其中number是接收到数据,也就是接收不为0,假如我不做判断:输入0x01,0x02 LED0亮,再输入0x02,0x03  LED1不亮,这是为什么呢,理论上再次发送0x02,0x03时,接收缓冲区的数据会变啊,,怎么一直没有变呢。
while(1)
{
        Bluetooth_Receive_Data(databuf,&number)

           if(databuf[0]==0x01&&databuf[1]==0x02)
                    {    LED0=1;    }
          if(databuf[0]==0x02&&databuf[1]==0x03)
                    {    LED1=1;    }



}

求大神指教!!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 05:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表