乐迪R9DS双频接收机+AT9S Pro遥控器S.BUS协议解析(CubeMX搭建STM32 HAL工程) 您所在的位置:网站首页 航模遥控器是什么信号 乐迪R9DS双频接收机+AT9S Pro遥控器S.BUS协议解析(CubeMX搭建STM32 HAL工程)

乐迪R9DS双频接收机+AT9S Pro遥控器S.BUS协议解析(CubeMX搭建STM32 HAL工程)

2024-01-11 02:28| 来源: 网络整理| 查看: 265

一、无线遥控种类

较为常见的几种无线传输类型有:蓝牙、基于802.11的WiFi,2.4G通信

2.4G也由于其特殊性被应用于穿越机与无人机航模遥控器中。

其中本文中的乐迪AT9S Pro遥控器就为众多的航模遥控中的一种,其采用CC2530无线传输模块作为遥控发射端芯片。

二、遥控器使用

1、R9DS支持PWM与S.BUS双控制模式,当红灯亮起时接收机按照第一排白色字输出相应通道PWM值,9通道也为PWM值,在此时双击侧边孔中的按钮,灯变为蓝色,此时在9通道输出S.BUS信号,同时蓝色字迹对应的端口为相应通道的PWM信号。 在这里插入图片描述 2、当采用STM32上位机进行通道解析时应注意要在遥控器功能设置中将通道选择设置为10CH,否则会出现通道不对应相应的问题。 在这里插入图片描述

三、乐迪接收机的S.BUS信号解析

与市面中其他接收机一样S.BUS信号是不能够直接使用的必须要用硬件反向器,这种反向器仅可用硬件来实现,当然如果金多用FPGA实现就当我没说😆。 注意:此处反向器尽量用高速器件来搭建实测采用817C光耦电路搭建的反向器,用逻辑分析仪分析数据会产生数据后两位丢包无法采集到正确值,如正常采集反向后的数据帧头为0xF0,但采用817C光耦反向会将帧头变为0xF8,从而导致后面解析数据错误。 反向器焊接电路如下:(图中为9018三极管搭建的电路) 在这里插入图片描述 在这里插入图片描述 B集输入串联4.7K电阻连接到电源正极,C集串联4.7K电阻接R9DS接收机S.BUS 信号输出端口,E集接地。此时完成了电路部分。

四、CubeMX配置串口及调试信息

调试采用的硬件环境采用雲景科创的STM32F407IGT6最小系统+R9DS接收机

1、管脚功能分配

(1)**USART1:**用于接收接收机反向后的电路    配置: 波特率:100K(100000),数据位:9bit,奇偶校验位:偶校验(even),停止位:2位 (2)**USART2:**用于将接收到的数据通过串口输出到串口助手显示    配置: 波特率:115200,数据位:8bit,奇偶校验:无,停止位:1位 (3)I2C1: 用于显示处理后的数据,将数据显示在128*64的OLED屏幕中    配置: 默认配置

2、CubeMX配置 (1)USART1配置

1.配置USART1的端口数据模式 注:在此处最初想法快速采集不定长字符且有一定的速度要求故文中采用DMA方式接受相关遥控器的数据 串口配置 2.打开串口接收中断并配置中断组及优先级

注:优先级文中默认为抢占优先级为2子优先级为3 串口1全局接收中断配置

3.打开串口DMA接收 USART1接收端口的DMA配置

(2)USART2配置

由于串口2仅进行数据发送故不配置接收中断 USART2端口配置

(3)I2C1配置

I2C配置

3、实际解析代码 /*main.c重定向一下printf便于后面使用串口2调试数据, 在使用时采用%x的格式化方法就无需调整PC的串口调试助手里面以16进制接收了*/ int fputc(int ch, FILE *f) { USART2->DR=(uint8_t)ch; while((USART2->SR&0X40)==0); return ch; } int GetKey(void) { while (!(USART2->SR & 0x20)); return ((int)(USART2->DR & 0x1FF)); } /*main.c在主函数上方自行编写*/ /*通道数据解析处理*/ int ld_16s_chval[16]; int UART1_IDLE_Count = 0; int usartdma_idle_callback_flag = 0; void FSASS_PREPROCE_DATA() { if(usartdma_idle_callback_flag>=2) { usartdma_idle_callback_flag = 0; if(dma_uart1_buffer[0]==0x0F) { ld_16s_chval[0] = ((((uint16_t)dma_uart1_buffer[2] 5) | (uint16_t)dma_uart1_buffer[3] if(RESET != __HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE))//接收到串口空闲中断 { __HAL_UART_CLEAR_IDLEFLAG(&huart1);//清中断 HAL_UART_DMAStop(&huart1);//停止DMA传输 data_len = DMA_UART1_BUF_SIZE - __HAL_DMA_GET_COUNTER(&hdma_usart1_rx);//获取数据长度 for(int i = 0;i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有