12回答

0收藏

删除

回答|共 12 个

倒序浏览

11#

我是小白ljj

发表于 2016-5-12 19:47:37 | 只看该作者

分享到:
hgqlyl 发表于 2016-5-12 18:11
1、USART_ReceiveData(USART2); 返回的是一个字节数据,也就是你说的0xAA,你的判断接收策略有点问题,我觉 ...

谢谢,谢谢,我这就修改
12#

我是小白ljj

发表于 2016-5-12 20:25:58 | 只看该作者

hgqlyl 发表于 2016-5-12 18:11
1、USART_ReceiveData(USART2); 返回的是一个字节数据,也就是你说的0xAA,你的判断接收策略有点问题,我觉 ...

谢谢您,您看这样修改行吗?其中a,b,c,rx_size的初始值均为0.调试的时候还是收不到数据,Angle全是0.
void USART2_IRQHandler(void)     //串口2中断服务程序
{
   while (USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET)   //接收中断
    {
                a=USART_ReceiveData(USART2);       
                if((c==1)&&(rx_size!=0))
                        {
                                sbus_rx_buffer[rx_size]=USART_ReceiveData(USART2);   //读取接收到的数据
                                rx_size++;
                                if(rx_size==13)
                                {
                                        rx_size=0;
                                        c=0;
                                }
                                return;
                        }
                        if((b==0)&&(a==0xAA))
                        {
                                b=1;
                        }
                        d=USART_ReceiveData(USART2);
                        if((b==1)&&(d==0xAA))
                        {
                                rx_size=1;
                                b=0;
                                c=1;
                               
                        }
    }
}

主程序里面
while(1)
        {       
                for(i=0;i<6;i++)
                {
                        Angle=(float)((sbus_rx_buffer[2*i+2]|sbus_rx_buffer[2*i+3]<<8)/100.0);
                }
                Go(0,0,0,0,Angle[4]);
                delay_ms(3000);               
        i=0;               
        }

13#

我是小白ljj

发表于 2016-5-12 20:28:05 | 只看该作者

荣丰宇 发表于 2016-5-12 13:24
以下只是我的观点
出现‘00’是很有问题的吧。他可能会造成字符串接收的误会吧
...

由于我的数据有超过255的,所以“00”还是要有的
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条