*1.
*飞控stm32串口5连接imu,串口五发送的指令会发送到imu中,如果是自定义的用户格式帧(比如:AA FF F1 03 01 01 01 A0 67)会先到imu,imu的串口1接stm飞控。串口2接数传,从串口1接收到的数据会通过串口二发送给数传,数传传给另一个数传,在通过USB线传输给上位机。
但是如果不是属于用户自定义的格式帧,imu会进行处理,比如飞控串口5一上电就会输出电池信息(如:AA FF 0D 04 0100 0000 6B 7F)imu会接收并处理,最后上位机得到的数据是(AA AF 0D 04 0100 0000 6B 7F)。
*
2.
.数传的一个串口一直有数据时,闪烁绿灯,当另一个口也有数据进来时,会闪烁白灯,并且两个串口收到的数据都会在上位机显示 。
3.imu会把无人机的各种信息计算出来并且发送出来,两种HID连接方式上位机 都会接收到数据,飞控的UART5发给IMU数据,IMU并不会直接通过HID转发出来,它还是按自己计算出来的数据发出来(当然这只是基本数据,不包括用户自定义数据),用户自定义数据IMU不会自己发送,只会接收到UART5传来的用户自定义数据再通过HID转发。
3.关于GPS数据的获取以及源码关于GPS的原理
case 0x30: //GPS数据
{
for (u8 i = 0; i < 23; i++)
{
send_buffer[(*_cnt)++] = ext_sens.fc_gps.byte[i];
}
}
break;
case30 里面是获取GPS数据,GPS的23个字节的数据都存储在 ext_sens.fc_gps.byte[i]函数里,这个数组里的数据是是GPS的23个字节的数据。具体每个字节数据的含义要看匿名协议手册。获取到send_buffer里面在后面的程序会通过串口5发送给凌霄imu,这时候灯光会依据凌霄imu的0x30的数据来变化,如果数据一直是空的,那么灯光闪红色,如果数据是有的,那么指示灯亮绿色说明GPS工作正常。如果没有0x30类的数据帧发送给凌霄imu,那么说明GPS无效,指示灯亮白色,说明没有接入GPS。
用自己的方法直接在0X30处发送数据,如下:
case 0x30: //GPS数据
{
u8 cnt=0;
u8 datasend[100];
datasend[cnt++]=0xAA;
datasend[cnt++]=0xFF;
datasend[cnt++]=0x30;
datasend[cnt++]=0;
for (u8 i = 0; i < 23; i++)
{
datasend[cnt++]=ext_sens.fc_gps.byte[i];
//send_buffer[(*_cnt)++] = ext_sens.fc_gps.byte[i];
}
datasend[3]=cnt-4;
u8 ac=0;
u8 sc=0;
for(u8 i=0;i<cnt;i++)
{
sc+=datasend[i];
ac+=sc;
}
datasend[cnt++]=sc;
datasend[cnt++]=ac;
DrvUart5SendBuf(datasend, cnt);
}
与上面是一样的效果,只是串口五提前发送给了凌霄imu.