匿名IMU版本4.34的下位机协议实现


人到了某个阶段,总会有懈怠和厌学情绪,好多程序员挂在嘴边的一句话:有看它那糟心代码功夫,我自己都写好了。话是这么说,但是读懂别人的代码,或者协议是第一步。所以要站在巨人的肩膀上,还得硬着头皮先读懂巨人。下面看一下网上流行的四轴飞控匿名IMU上位机软件的协议,匿名的版本更新很快,也很多,这里鉴于V4.34版本网上没有多少流行的协议解释及实现,本文来一段代码以饷诸位。下面这张图是协议的一小段,可以实现飞机的姿态展示,方便网友快速论证自己的程序运行结果。

对应这个协议,我在这里贴一下实现出来的代码,以STM32为例,其他类似:

void usart1_send_char(u8 c)
{
	while((USART1->SR&0X40)==0);//等待上一次发送完毕   
	USART1->DR=c;   	
} 
////传送数据给匿名四轴上位机软件(V4.34版本)
////fun:功能字. 0XA0~0XAF
////data:数据缓存区,最多28字节!!
////len:data区有效数据个数

void usart1_niming_report(u8 fun,u8*data,u8 len)
{
	u8 send_buf[32];
	u8 i;
	if(len>28)return;	//最多28字节数据 
	send_buf[len+4]=0;	//校验数置零
	send_buf[0]=0XAA;	//帧头
	send_buf[1]=0XAA;	//帧头
	send_buf[2]=fun;	//功能字
	send_buf[3]=len;	//数据长度
	for(i=0;i 18000 对应 -180.00  ->  180.00度
////pitch:俯仰角.单位 0.01度。-9000 - 9000 对应 -90.00 -> 90.00 度
////yaw:航向角.单位为0.1度 0 -> 3600  对应 0 -> 360.0度

//  在主函数中调用方法: usart1_report_imu(Roll*100,Pitch*100,Yaw*100);	
void usart1_report_imu(short roll,short pitch,short yaw)
{
	u8 tbuf[12]; 
	tbuf[0]=(roll>>8)&0XFF;
	tbuf[1]=roll&0XFF;
	tbuf[2]=(pitch>>8)&0XFF;
	tbuf[3]=pitch&0XFF;
	tbuf[4]=(yaw>>8)&0XFF;
	tbuf[5]=yaw&0XFF; 
	
	/////////////////////
	
	tbuf[6] = 0; tbuf[7] = 0; tbuf[8] = 0; tbuf[9] = 0;
	tbuf[10] = 0; tbuf[11] = 1; 
	
	usart1_niming_report(0x01,tbuf,12);   // roll, pitch,yaw 信息显示
}   

实现后,通过串口和匿名的上位机通讯,实际效果如下:

fy: 想要鄙视,请先超越,内心的不满足和外在的谦虚终能成就一个个向上的人。

点击数: 90   打印  添加到收藏   发布时间: 2020-08-13




上一篇:轻量级数据库SQLite大小的说明
下一篇:数字下变频的理解





» 相关内容
  PID程序中DAC输出范围的限定区..
  MCU中断编写注意事项
  数据校验原理及简化实现
  一片顶两片的LDO
  三步实现ModelSim仿真Quartus..
  数字下变频的理解
  匿名IMU版本4.34的下位机协议..
  轻量级数据库SQLite大小的说明
  BUFF的有效性理解
  PHP页面顶端出现空白问题
  高速数据采集的一些关键点
  软硬件通用加密思路-针对PC端..
  隔离变压器的作用
  GSM下Unicode和中文字符转码
  Teamview远程ID和PWD自动回传..