一、SBUS信号概述
SBUS信号以串口传输,波特率为100000bps。每2ms一帧,一帧25个字节。其中第0字节为起始帧,固定为0x0F。第24字节为帧尾。第1~22字节为1-16比例通道数据字节。第23字节为状态字,具体位含义如下:
第3位:是否丢帧标识,1为丢帧,0为正常。
第4位:是否失控保护是否激活,1为激活。
二、APM中SBUS数据流
老规矩,先上类图。
(1)
如图(1)所示,硬件抽象层AP_HAL::RCInput是具体应用平台的父类,根据具体的芯片选择对应的子类与子类的方法。由于雷迅的x7-pro用的stm32H7的芯片,故实例化ChibiOS::RCInput子类。
(2)
APM中sbus数据在AP_RCProtocol_SBUS::sbus_decode()函数中解析,该函数的调用关系见图(2)。在ChibiOS命名空间下的RCInput类中的_timer_tick()函数中获取了AP_RCProtocol_SBUS类的实例化对象rcprot。rcprot调用read函数,获取_rc_values值,该值通过hal.rcin接口传输到上层应用中。
(3)
如图(3)所示,Copter::rc_loop()以100Hz的频率调用read_radio();遥控器的数据以100Hz的频率更新。
三、SBUS协议解析
APM具体SBUS解析见下图。
(4)
如图(4)所示,sbus_decode首先判断帧头,若帧头非0x0F,直接退出解析,返回false。帧尾未作处理。