完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
我用JY901的上位机接收数据,显示的数据比较平滑。但是自己写的程序用IAR监控的话数据跳变比较大,请问各位大手子是怎么解决的。是完全按照手册来写的程序吗,有写过的的大手子给个例程或者帮忙看下我的例程指教下哪里有错误:
/************************************************* 数据接收区域,数据类型:1、加速度,2、角速度,3、角度,其余以后另外加 字头0x55,加速度0x51,角速度0x52,角度0x53 *************************************************/ if(USART_GetiTStatus(USART2, USART_IT_RXNE) != RESET) { temp = USART_ReceiveData(USART2); /************************************** 判断是不是数组的起始位置 ****************************************/ if(temp_data.lock == 0 && temp == 0x55) { temp_data.lock = 1; temp_data.start_byte = 0x55; //USART_SendData(USART1,temp_data.start_byte); } /************************************* 开始接受数据 **************************************/ else if(temp_data.lock == 1 && i<10) { /******************************** 加速度数据接收 *******************************/ temp_data.rev_data = temp; if(temp_data.rev_data[0] == 0x51) { acc = temp_data.rev_data; //USART_SendData(USART1,acc); i++; if(i == 10) { temp_data.lock = 0; i = 0; } } /********************************* 角速度数据接收 **********************************/ else if(temp_data.rev_data[0] == 0x52) { angv = temp_data.rev_data; //USART_SendData(USART1,angv); i++; if(i == 10) { temp_data.lock = 0; i = 0; } } /************************************ 角度数据接收 ************************************/ else if(temp_data.rev_data[0] == 0x53) { ang = temp_data.rev_data; //USART_SendData(USART1,ang); i++; if(i == 10) { temp_data.lock = 0; i = 0; temp_data.status_byte = 1; //最后一个数据接收完毕,标志位置1 } } } } /**************************************************** 数据接收完成,对数据进行处理,数据类型 1、acc,加速度计算 2、angv,角速度计算 3、ang,角度计算 *****************************************************/ if(temp_data.status_byte ==1) { /**************************** 加速度计算区域 ax = (float)(((acc[2]*256)+acc[1]))/32768*16*9.8; ay = (float)(((acc[4]*256)+acc[3]))/32768*16*9.8; az = (float)(((acc[6]*256)+acc[5]))/32768*16*9.8; ****************************/ /****************************** 角速度计算区域 ******************************/ wx = (float)((angv[2]*256)+angv[1])/32768*2000; wy = (float)((angv[4]*256)+angv[3])/32768*2000; wz = (float)((angv[6]*256)+angv[5])/32768*2000; /******************************* 角度计算区域 ********************************/ rx = (float)((ang[2]*256)+ang[1])/32768*180; //X向角度计算 if(rx>180) { rx = rx-360; } ry = (float)((ang[4]*256)+ang[3])/32768*180; //Y向角度计算 if(ry>180) { ry = ry-360; } rz = (float)((ang[6]*256)+ang[5])/32768*180; //Z向角度计算 temp_data.status_byte = 0; //最后一个数据接收完成标志位复位 if(ctr_fly ==1) { PID_Control(rx,ry); } } |
|
相关推荐
3个回答
|
|
|
我用STM32的USART2采集数据,速率可以匹配的把?
|
|
|
|
|
|
20HZ,每次3*11个字节
|
|
|
|
|
|
我也这么觉得,问模块的供应商么不给源码。。这就很麻烦了
|
|
|
|
|
只有小组成员才能发言,加入小组>>
请问下图大疆lightbridge2遥控器主板电源芯片型号是什么?
4892 浏览 1 评论
使用常见的二极管、三极管和mos做MCU和模组的电平转换电路,但是模组和MCU无法正常通信,为什么?
835浏览 2评论
为了提高USIM卡电路的可靠性和稳定性,在电路设计中须注意的点有哪些?
906浏览 2评论
996浏览 2评论
861浏览 2评论
2216浏览 2评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-18 06:55 , Processed in 0.665562 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
7386