查看: 3229|回复: 12

删除

[复制链接]

该用户从未签到

发表于 2016-5-12 12:57:37 | 显示全部楼层 |阅读模式
分享到:
本帖最后由 我是小白ljj 于 2016-5-16 12:58 编辑

已删
回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2016-5-12 13:02:32 | 显示全部楼层
串口接收的图片在这
串口调试截图.png
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2017-7-17 13:49
  • 签到天数: 367 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2016-5-12 13:24:50 | 显示全部楼层
    以下只是我的观点
    出现‘00’是很有问题的吧。他可能会造成字符串接收的误会吧
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    大神,您在帮着看下,还有没有别的问题,我先修改下您说的问题,看下效果
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2016-5-12 14:08:19 | 显示全部楼层
    大神,你好,我按照您说的作了修改,并将主程序中的 Angle[i-1]=(float)((sbus_rx_buffer[2*i]|sbus_rx_buffer[2*i+1]<<8)/100.0);
    修改为Angle[i-1]=(float)(sbus_rx_buffer[i+1]/100.0);
    修改后调试助手显示接收到的数据已经没有“00”了,
    但实际接收到的数据全是1.28.
    我觉得是串口2的中断服务程序出了问题,但是我找不出来,您能看下嘛
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

    大神,你好,我按照您说的作了修改,并将主程序中的 Angle[i-1]=(float)((sbus_rx_buffer[2*i]|sbus_rx_buffer[2*i+1]<<8)/100.0);
    修改为Angle[i-1]=(float)(sbus_rx_buffer[i+1]/100.0);
    修改后调试助手显示接收到的数据已经没有“00”了,
    但实际接收到的数据全是1.28.
    我觉得是串口2的中断服务程序出了问题,但是我找不出来,您能看下吗?

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-7-17 13:49
  • 签到天数: 367 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2016-5-12 14:56:58 | 显示全部楼层
    我是小白ljj 发表于 2016-5-12 14:29

    你程序的意思是:上位机将float转换为short,再打包发送AA等一串数据字节到板子上,板子接收取出来,重新换成float进行GO()函数做处理
    下方的图片应该是pc上位机发出的数据吧,看上去没有错误
    如果单片机的配置部分程序没有问题的话,问题就出在void USART2_IRQHandler(void)  里面了

    因为数据长度也不大,我建议先把一帧的数据接收完毕后再取数出来处理,我感觉判断帧头的语句有点难懂呢
    回复 支持 反对

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2016-5-12 17:01:47 | 显示全部楼层
    荣丰宇 发表于 2016-5-12 14:56
    你程序的意思是:上位机将float转换为short,再打包发送AA等一串数据字节到板子上,板子接收取出来,重新 ...

    程序的作用您理解的非常正确,不愧是大神。程序问题应该就处在中断函数上。这只是一个测试程序,实际上有很多数据。
    判断帧头的语句可能自己水平有限写的不太好,大概意思就是只有检测到两个AA时才接收数据。我感觉我对  sbus_rx_buffer[rx_size]=USART_ReceiveData(USART2);   的理解有问题,USART_ReceiveData返回的值是AA还是AAA09170FA0E96,这一串数据呢?
    另外调试时监测发现下列参数一直没变,USART2=0x40004400,USART_ReceiveData=0x0800188C, sbus_rx_buffer[rx_size]=0x0096,
    是不是串口配置哪里出错了啊?
    我对这段程序都快绝望了。。。。。
    大神,拜托了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-5-11 10:52
  • 签到天数: 30 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2016-5-12 17:42:30 | 显示全部楼层
    大神让你看波特率,循环测试,示波器量之类的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-12-20 10:14
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2016-5-12 18:11:57 | 显示全部楼层
    1、USART_ReceiveData(USART2); 返回的是一个字节数据,也就是你说的0xAA,你的判断接收策略有点问题,我觉得逻辑有错。
    2、另外调试时监测发现下列参数一直没变,USART2=0x40004400,USART_ReceiveData=0x0800188C,
    这个数字只是该变量或者函数的地址信息,并不是该变量或者函数的返回值。
    3、if(sbus_rx_buffer[rx_size]==0xAA)
       {
            b=1;
       }
       if((b==1)&&(sbus_rx_buffer[rx_size+1]==0xAA))
       {
            b=0;
            c=1;
       }
    你这里当接收到0xAA后将b=1,接下来就判断sbus_rx_buffer[rx_size+1]==0xAA,你下一个数据都还没有接收,你怎么判断它等不等于1呢?这样的话你下面的接收数据程序不会执行,因为不可能为真。还有就是你在里面进行了多次自加,这个就有问题,进入一次中断只接收一个字节数据,你多次自加有什么意义呢?

    请好好查查,程序逻辑都有问题,也许我理解得不对,不过请你他问的时候尽量描述仔细一点,内容归纳整齐一点,这样才有大神回答的。
       
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-25 08:37 , Processed in 0.202116 second(s), 34 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.