查看: 483|回复: 12

[开发板硬件] 删除

[复制链接]

1

主题

0

好友

37

积分

白丁

Rank: 1

该用户从未签到

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

已删
回复

使用道具 举报

1

主题

0

好友

37

积分

白丁

Rank: 1

该用户从未签到

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

使用道具 举报

37

主题

4

好友

3198

积分

状元

Rank: 6Rank: 6

  • TA的每日心情
    奋斗
    2016-11-21 21:31
  • 签到天数: 341 天

    [LV.8]以坛为家I

    爱板会员勋章 活跃会员勋章 发帖机器勋章

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

    使用道具 举报

    1

    主题

    0

    好友

    37

    积分

    白丁

    Rank: 1

    该用户从未签到

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

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

    使用道具 举报

    1

    主题

    0

    好友

    37

    积分

    白丁

    Rank: 1

    该用户从未签到

    发表于 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的中断服务程序出了问题,但是我找不出来,您能看下嘛
    回复

    使用道具 举报

    1

    主题

    0

    好友

    37

    积分

    白丁

    Rank: 1

    该用户从未签到

    发表于 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的中断服务程序出了问题,但是我找不出来,您能看下吗?

    回复

    使用道具 举报

    37

    主题

    4

    好友

    3198

    积分

    状元

    Rank: 6Rank: 6

  • TA的每日心情
    奋斗
    2016-11-21 21:31
  • 签到天数: 341 天

    [LV.8]以坛为家I

    爱板会员勋章 活跃会员勋章 发帖机器勋章

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

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

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

    使用道具 举报

    1

    主题

    0

    好友

    37

    积分

    白丁

    Rank: 1

    该用户从未签到

    发表于 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,
    是不是串口配置哪里出错了啊?
    我对这段程序都快绝望了。。。。。
    大神,拜托了
    回复

    使用道具 举报

    138

    主题

    7

    好友

    1888

    积分

    超级版主

    Rank: 8Rank: 8

  • TA的每日心情
    奋斗
    2016-7-28 15:40
  • 签到天数: 27 天

    [LV.4]偶尔看看III

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

    使用道具 举报

    0

    主题

    0

    好友

    31

    积分

    白丁

    Rank: 1

  • TA的每日心情
    奋斗
    2016-6-22 13:55
  • 签到天数: 7 天

    [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呢?这样的话你下面的接收数据程序不会执行,因为不可能为真。还有就是你在里面进行了多次自加,这个就有问题,进入一次中断只接收一个字节数据,你多次自加有什么意义呢?

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

    使用道具 举报

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

    关闭

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


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-10 09:03 , Processed in 0.130196 second(s), 19 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部