6、SBUS航模遥控

6.1、实验目的

使用STM32的串口通讯,解析航模遥控发射器传输的SBUS协议数据,打印各通道数值。

6.2、配置引脚信息

1.从Serial的项目里导入ioc文件,并命名为SBUS。

根据原理图可知,SBUS连接的是串口2的RX引脚,只有接收没有发送。

image-20220310095525343

image-20220310095551482

2.将串口2的mode修改为Asynchronous同步通讯,波特率为100000,数据宽度:9位,检验:Even,停止位:2位。串口2只用到接收功能,所以Data Direction可以选择Receive and Transmit 或者Receive Only。

image-20220310101043637

3.打开串口2中断设置。

image-20220310101435783

6.3、实验流程图解析

image-20220310103631311

6.4、核心代码解释

1.在bsp_uart.c中添加以下内容:

USART1_Init():初始化串口相关内容,开启串口1和串口2接收1个数据。

image-20220310104552288

2.在串口中断回调中判断是否接收到串口2数据,同时区分串口1或者串口2哪个接收到数据。

image-20220310104804430

3.新建bsp_sbus.h和bsp_sbus.c文件管理sbus数据解析内容。在bsp_sbus.h新建以下内容:

image-20220310105646989

其中SBUS_ALL_CHANNELS控制解析的通道数,默认只显示八个通道,需要全通道显示则修改为1。

4.SBUS_Reveive(data)接收串口的数据作为缓存,如果符合SBUS的通讯协议,则将一帧数据更新到sbus_data数组。

image-20220310105941366

5.根据SBUS通讯协议解析sbus_data里的数据。

image-20220310111108240

6.Bsp_Loop()中循环调用SBUS_Handle()函数,将解析后的各通道数据通过串口1打印出来。

image-20220310111200456

image-20220310111729911

6.5、硬件连接

由于SBUS通讯需要连接SBUS接收器到扩展板上的SBUS接口上,S接信号,V接电源正极,G接地。所以需要自备航模遥控器和SBUS接收器,提前配对好并打开电源开关。

image-20220325154212344

6.6、实验效果

烧录程序后,LED灯每隔200毫秒闪一次,将扩展板通过micro-USB数据线与电脑连接后并打开串口助手(具体参数如下图所示),可以看到串口助手上一直打印航模遥控器各个通道的数据,当我们手动拨动航模遥控器的摇杆或者按钮,数据会跟着变化。

image-20220310112207176