关于SBUS信号在单片机中的一些个人理解

单片机实现SBUS编码解码详解
本文详细介绍了SBUS信号在单片机中的应用,包括九位数据位、偶校验的设置,负逻辑的处理,两种工作模式的解析,以及SBUS编码和解码的实现过程。通过51芯片遥控器与STM32F030接收机的实例,解释了如何从PWM转换为SBUS信号,并通过F4飞控和Betaflight Configurator进行验证。

最近一直在弄关于SBUS的编码与解码这方面的内容,虽然网上资料很多,但是网上资料太杂,我找的一些资料可能是我理解的问题,所以我摒弃了一些骚操作,对于一些单片机学得不精的人来说,有些地方是值得注意的。

对于SBUS的探索,首先我个人是使用51芯片的遥控器通过NRF24L01发送遥控器PWM模拟量到一块STM32F030的接收机,在接收机内进行PWM转SBUS的操作,之后通过串口发送出SBUS信号,用F4飞控来连接串口发送出来的SBUS信号,并检验信号是否正确。(虽然这样挺麻烦的,但是检验起来很方便)

1.九位数据位、偶校验

SBUS本质是一种串口通信协议,采用100K的波特率,8位数据位,两位停止位,偶效验,即8E2的串口通信。

这里对于单片机学得不精的人来说特别容易搞混,波特率100000,两位停止位没什么问题。问题在于8位数据位,偶校验,这段话在单片机中却需要这样子表达9位数据位、偶校验对没有错是9位数据位、偶校验。刚开始编码的时候我就一直卡在了这里,F4的飞控一直识别不了我编码的SBUS信号。原因如下:

/*  如果需要8位数据,无奇偶校验,则数据长度=8

        如果需要8位数据,有奇偶校验,则数据长度=9*/

所以,关于串口端的设置,代码如下: 

  USART_InitTypeDef USART_InitStructure;
  USART_InitStructure.USART_BaudRate = 100000;                       //设定传输速率
  USART_InitStructure.USART_WordLength = USART_WordLength_9b;        //设定传输数据位数
  USART_InitStructure.USART_StopBits = USART_StopBits_2;             //设定停止位个数——2位
  USART_InitStructure.USART_Parity = USART_Parity_Even ;               //偶校验
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//不用流量控制
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;    //使用接收和发送功能
  USART_Init(USART1, &USART_InitStructure);                    &n
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值