BetaFlight代码解析(16)—串口管理

BetaFlight开源飞控源码分析 BetaFlight是穿越机领域比较成熟的开源飞控,本篇文章主要分析一下源代码以及如何使用这个开源代码 阅读详情

Betaflight 的串口管理系统为管理多个串口通信接口提供了一个统一的抽象层。该系统负责端口分配、配置和共享机制,并为包括 MSP、遥测、GPS 和其他基于串口的功能在内的各种通信协议提供一致的 API。

系统架构

串行端口管理系统采用分层架构,将硬件特定细节与更高级别的协议实现隔离开来。

串口类型

Betaflight 支持多种类型的串行接口,每种接口都有其特定的特性和使用场景。

端口类型标识符范围描述最大波特率局限性
USB VCPSERIAL_PORT_USB_VCP通过 USB 的虚拟 COM 端口高的单端口
UARTSERIAL_PORT_UART0-10硬件 UART 外设247万硬件相关
SoftSerialSERIAL_PORT_SOFTSERIAL1-2软件实现的串行19.2KCPU密集型,波特率有限
LPUARTSERIAL_PORT_LPUART1低功耗 UART多变的低功耗优化
PIOUARTSERIAL_PORT_PIOUART0-9基于 PIO 的 UART多变的平台特定

端口功能和共享

该系统为串行端口分配特定功能,并支持兼容功能之间的受控共享。

函数类型

端口共享规则

该系统强制执行特定的共享规则以防止冲突:

  1. MSP共享:MSP可以共享遥测或黑盒功能
  2. 遥测数据共享:兼容的遥测协议可以与串行接收器共享遥测数据。
  3. VTX MSP:必须与 RX 或 MSP 串口共享
  4. 专属功能:其他大多数组合均被禁止。

配置管理

串口配置使用参数组系统来存储和验证设置。

配置结构

默认配置

系统在初始化期间建立默认端口分配:

  • 端口 0:始终已分配FUNCTION_MSP
  • USB VCP:必须启用 MSP 才能生效
  • 目标特定:根据目标定义分配 GPS、串行接收和视频发送端口

端口分配和运行时管理

端口使用情况跟踪

系统通过serialPortUsageList数组维护运行时状态:

港口开放流程

驱动层实现

UART驱动程序

UART驱动程序提供硬件串口访问和DMA支持:

SoftSerial 驱动程序

SoftSerial驱动程序使用定时器和GPIO实现UART功能:

API 参考

核心功能

功能目的返回类型
serialInit()初始化串行系统void
openSerialPort()打开并配置端口serialPort_t*
closeSerialPort()关闭活动端口void
findSerialPortConfig()通过函数查找端口配置const serialPortConfig_t*
serialIsPortAvailable()检查端口可用性bool
isSerialConfigValid()验证配置bool

端口发现功能

功能目的返回类型
findSerialPortByName()通过字符串名称查找端口serialPortIdentifier_e
serialName()获取端口名称字符串const char*
findSerialPortIndexByIdentifier()获取端口索引int
lookupBaudRateIndex()将波特率转换为索引baudRate_e

配置 CLI 命令

该串行系统与命令行界面 (CLI) 集成,用于运行时配置管理。用户可以通过修改底层结构的命令来配置端口功能和波特率serialConfig_t。

betaflight 代码结构 这次针对BF 的移植,主要对于target、Driver、link、make 等进行修改,重点在于driver文件夹, 由于原始BF主要使用STM32 系列,从F1 到H7 都有移植,所以原始的代码已经十分复杂,AT32 的外设结构与STM32G4 比较类似,所以主要以G4 相关HAL库为蓝本进行修改移植。对飞控的“输入输出”,如视频、crsf、bb响、flash、gps、舵机、图传等的输入输出抽象。加速计、adc、电池、气压、compass等传感器抽象。GPS、RX、VTX等。硬件配置、接口抽象化。... 阅读详情

相关推荐

BetaFlight飞控引脚分配保姆级教程:从resource命令到实战配置AOCODARC H7DUAL

本文详细解析了BetaFlight飞控引脚分配的实战教程,重点介绍了`resource`命令的使用方法及其在AOCODARC H7DUAL飞控板上的配置技巧。从基础命令到高级调试,帮助航模爱好者快速掌握硬件资源配置,提升飞行控制系统的灵活性和精确性。

weixin_30698297的博客 431

BetaFlight开源代码框架简介

框架设计重点要做到各切分模块的业务融合,分析的主要考量点:C语言工程代码函数入口为main,之前启动及C环境初始化代码不做介绍,启动文件代码文件(lib\main\STM32H7\Drivers\CMSIS\Device\ST\STM32H7xx\Source\Templates\arm\startup_stm32h745xx.s)。业务逻辑方面主要是从main来分析框架代码,这里也不会对HAL(Hardware Adapter Layer)做分析,对底层感兴趣的朋友可以从STM官网或者其他网站得到更多的S

lida2003的专栏 1万+

BetaFlight模块解析之三十二:MSP协议V2核心机制与实战调优

本文深入解析BetaFlight中MSP协议V2的核心机制与实战调优技巧。详细介绍了16位ID扩展、CRC8-DVB-S2校验算法和巨帧支持等关键改进,以及报文格式解析、状态机异常处理和性能优化方案。通过实际案例分享,帮助开发者高效部署和优化MSP V2协议,提升无人机通信效率和稳定性。

weixin_30945039的博客 215

BetaFlight模块设计之二十九:滤波模块分析

基于BetaFlight开源代码框架简介的框架设计,逐步分析内部模块功能设计。前面分析BetaFlight模块设计主要基于其任务代码框架来展开,因为这样从理解以及代码上来说更容易切入。随着总体任务的熟悉,其实每个任务细节部分都是需要软件模块来逐一完成的。这里我们主要针对BetaFlight的滤波函数进行整理归纳,期望得到一个相对完成的模块分析,同时也对这里的历史问题展开一定的讨论。有兴趣的朋友可以留言或者联系我,可以深入探讨!GYRO_FILTER_FUNCTION_NAME是一个整体的数据滤波实现,实际在

lida2003的专栏 3817

【Betaflight源码解析】调度器核心机制剖析:从任务队列到实时触发的设计哲学

本文深入剖析了Betaflight飞控固件中调度器的核心机制。作为飞控的“心脏”,这套自研的非抢占式调度系统通过任务队列管理、动态优先级算法以及与硬件时钟的精准同步,确保了姿态控制等关键任务的周期确定性。文章对比了其与FreeRTOS等通用RTOS的设计哲学差异,并解释了其如何通过时间片保护与任务加速机制,在资源受限的嵌入式系统中实现极致的低延迟与稳定性。

weixin_29216957的博客 608

BetaFlight MSP协议模块分析[可运行源码]

本文详细分析了BetaFlight中的MSP(Multiwii Serial Protocol)协议模块,包括MSP协议的描述、版本优缺点、代码资源、报文解析及处理。MSP协议是一个远程消息协议,主要用于飞控系统,定义了request-response通信机制。文章对比了V1和V2版本的优缺点,V2版本在ID支持、Payload大小和checksum算法上进行了改进。此外,还介绍了MSP报文的格式和状态机,以及请求报文和反馈报文的处理流程。最后,提供了相关的参考资料,帮助读者更深入地理解MSP协议的应用和实现。

BetaFlight模块设计之三十二:MSP协议模块分析

基于BetaFlight开源代码框架简介的框架设计,逐步分析内部模块功能设计。MSP是Multiwii Serial Protocol的缩写,截止目前为止有两个版本V1和V2。它是一个远程消息协议,主要用在iNav、MultiWii、 CleanFlight、BetaFlight的飞控上。MSP协议定义了request-response protocol通信机制。发起request一方被认为是"MSP Master",反馈response的一方被认为是"MSP Slave"。鉴于V1版本在使用过程发现如下问

lida2003的专栏 7137

关于动态存储器dram中rank,bank,device之间的关系

DEVICE_WIDTH表示设备的带宽(单位bit),每个列(column)包含DEVICE_WIDTH 位(bit),每一行(row)包含NUM_COLS个column。   而每一个bank包含NUM_ROWS个行(row)。所以一个设备(device)的存储容量为PER_DEVICE_STORAGE =NUM_ROWS*NUM_COLS*DEVICE_WIDTH*NUM_BANKS (i

wyj7260的专栏 4729

Open FPV VTX与Betaflight的MSP协议深度协同原理

MSP(MultiWii Serial Protocol)并非普通串口通信协议,而是飞控固件与外设间轻量级、低延迟的固件级API接口。其精简帧结构与确定性时序设计,专为穿越机实时控制场景优化,支撑VTX频道切换、功率调节与OSD状态同步等关键功能。技术价值在于以极低CPU开销实现毫秒级双向反馈,避免传统I2C/SPI在电噪环境下的可靠性缺陷。典型应用场景包括FPV图传配置、OSD动态刷新及硬件级故障定位。本文聚焦Open FPV VTX与Betaflight在MSP命令码映射、负载校验、UART时序匹配等底

weixin_34014555的博客 545

双向可控硅控制后续篇:过零检测电路、丢波、斩波、定时

双向可控硅功率控制技巧,掌握AC负载的控温控速等。

qq_42289734的博客 3万+

几何非线性-屈曲分析

结构系统的破坏分为两种,一类是因材料软化而引起的强度破坏,另一类是几何软化使得结构的几何形状发生极大变化,从而使结构丧失承载能力。在材料力学中是这样定义压杆失稳的:中心受压直杆(理想模型)在直线状态下平衡,由稳定平衡转化为不稳定平衡时所受的轴向压力的界限值,称为临界压力。中心受压直杆在临界压力的作用下,其直线形态的平衡开始丧失稳定性,简称为失稳。显然,这个定义只使用于理想的压杆模型,那么关于失稳和屈曲是否存在一般性定义呢?

YORU_NO_KUNI的博客 1万+

[无人机飞控] Betaflight 2025.12性能跃迁的技术解析与实践指南

### 1.1 开源飞控固件的演进历程 无人机飞控系统经历了从单一任务处理到多传感器融合的技术发展。Betaflight作为开源飞控领域的代表项目,其核心架构在过去五年间保持着每18个月一次的重大升级频率。随着穿越机飞行速度提升至120km/h,传统基于轮询机制的任务调度已无法满足微秒级控制需求,系统响应延迟成为制约性能的关键因素。 ### 1.2 三大核心技术挑战 现代飞控系统面临着实时性、可

gitblog_01187的博客 443

POWER(十一)charge pump原理

电荷泵是一种基于电容充放电原理的DC-DC转换电路,通过开关控制实现电压转换,包括升压、降压和负压输出。其核心是利用电荷守恒原理,通过电容存储和转移电荷来改变输出电压。典型拓扑结构包括倍压电路和多阶升压电路,具有结构简单、体积小等优势。关键参数包括转换效率、输出电流能力和开关频率,适用于芯片供电、显示屏驱动等低功耗场景。LVDS部分补充说明了自举电路在驱动电路中的应用及其自同步特性。

zhlwsh的博客 2795

stm32烧录软件_[FPV攒机] Betaflight源码编译和固件烧录指南

Betaflight是穿越机里非常重要的开源飞控软件,市面上大多穿越机飞控都是基于Betaflight的软件开发。前段时间开始接触穿越机,朋友送了一台装了T-MOTOR的 F4-HD飞控的涵道无人机给博主(感谢土豪朋友) Betaflight会定期以官方的形式输出不同类型的固件,网络上使用使用Betaflight Configurator下载官方的固件比较多,编译源码下载的教...

weixin_39698007的博客 4880

避坑指南:QCustomPlot鼠标事件冲突解决方案(左键拖动vs右键框选)

本文深入解析QCustomPlot在QT框架下的高级交互实现,重点解决左键拖动与右键框选的冲突问题。通过自定义事件处理和QRubberBand技术,提供了一套完整的无冲突交互方案,帮助开发者优化数据可视化应用的用户体验。

moss5的博客 660

【IIC通信】Chap.1(I2C)IIC通信原理、IIC读写时序详解

IIC通信以两根连线SDA、SCL实现了完善的全双工同步数据传送, 可以方便地构成多机系统和外围器件扩展系统。

Jie_MSD的博客 2万+

Betaflight OSD配置全攻略:从原理到实战布局优化

OSD(On-Screen Display)作为FPV飞行中实时显示飞行数据的关键技术,通过在视频信号上叠加字符信息,让飞手无需依赖额外传输链路即可掌握飞行状态。其工作原理基于专用芯片如MAX7456,通过SPI总线与飞控通信,实时处理传感器数据并转换为屏幕字符。在穿越机应用中,合理的OSD布局直接影响飞行安全与效率,特别是电池电压监控、飞行姿态显示等核心数据。针对Betaflight地面站,本文聚焦OSD元素选择、位置拖放、电压告警设置等实操技巧,并解决常见的显示问题,为Freestyle和竞速等不同场景

weixin_34343308的博客 436

TI单芯片毫米波雷达1642demo代码走读(一)

今天我们来实际看下代码。 首先使用CCS软件导入demo工程,工程有两个,一个是ARM的工程,工程名是mmw_mss_16xx;另一个是DSP的工程,工程名为mmw_dss_16xx。我们将这两个工程的主函数打开,分别位于mss_main.c和dss_main.c文件中。 先看mss的主函数,代码如下。我为每行代码都加了中文注释和自己的理解。 int main (void) { Task_Params taskPara...

1万+

BetaFlight调度器深度解析:如何优化飞控任务优先级与实时性

本文深度解析了BetaFlight飞控固件中自研任务调度器的核心机制。通过剖析其混合优先级体系(结合静态配置与动态计算)和实时性保障策略,揭示了如何优化任务调度,确保陀螺仪数据读取、PID控制等关键实时任务稳定执行,同时高效管理串口、OSD等非实时任务,从而在资源受限的微控制器上实现高性能、低延迟的飞行控制。

p5l2m9n4o6q的博客 220

Android Keymaster- 设备集成笔记 嵌入式

本文介绍了 Android Keymaster 的原理、使用方法和示例源代码。Android Keymaster 是一个重要的安全组件,为开发者提供了加密和解密功能,用于保护设备上存储的敏感数据。Android Keymaster 是 Android 系统的一个安全组件,用于保护设备上存储的敏感数据。Keymaster 使用基于硬件的密钥存储,同时提供了一组 API,让开发者可以在应用程序中使用这些加密功能。在嵌入式设备中,Android Keymaster 是一个重要的组件,用于提供加密和解密功能。

LrFortran的博客 671

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Open FPV VTX与Betaflight的MSP通信原理与实战调试

MSP协议(MultiWii Serial Protocol)是一种轻量级串口通信标准,广泛应用于飞控与外设间的低延迟指令交互。其核心原理是基于预定义二进制帧结构的主从式轮询机制,通过UART物理层实现状态读取与参数下发。该协议的技术价值在于打破图传模块的‘黑盒’限制,赋予飞行中动态调频、功率调节与实时状态反馈能力,显著提升竞速与穿越场景下的链路鲁棒性。典型应用场景包括OSD图传信息叠加、隧道低功率切换、抗干扰跳频及多设备协同控制。本文聚焦Open FPV VTX与Betaflight固件间MSP通信的端到

weixin_34159110的博客 416

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Betaflight飞控系统架构解析与技术实现方案

Betaflight作为开源无人机飞控系统的领军者,为FPV竞速、航拍应用和专业级无人机开发提供了完整的飞行控制解决方案。本文将深入解析其软件架构设计、核心功能模块实现方案,并提供从配置调优到性能测试的完整技术指南。 ## 🛠️ 系统架构设计与模块化实现 Betaflight采用高度模块化的架构设计,将复杂的飞控功能分解为多个独立且协同工作的子系统。这种设计不仅提高了代码的可维护性,也为开发

gitblog_00266的博客 117

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

从零开始:BetaFlight硬件资源分配与定时器配置的底层逻辑

本文深入解析BetaFlight飞控固件在STM32芯片上的硬件资源分配与定时器配置逻辑,涵盖定时器架构、DMA通道分配策略及优化技巧。通过实际案例展示如何避免资源冲突并提升外设驱动效率,为开发者提供参数配置与性能优化的实用指南。

opencv7vision的博客 428

5大核心技术:Betaflight开源飞控系统架构深度解析

Betaflight作为开源无人机飞控领域的标杆项目,通过其模块化架构和实时控制系统为多旋翼飞行器提供了专业级飞行性能。本文深入剖析Betaflight 2025.12版本的核心技术架构,为开发者提供从理论到实践的完整指南。 ## 技术架构设计原理 ### 分层模块化架构 Betaflight采用经典的分层架构设计,将飞行控制逻辑与硬件抽象层分离。核心架构分为五个关键层次: 1. **硬件

gitblog_01172的博客 292

深入ArduPilot的MSP协议:从BetaFlight移植到多传感器支持,它比MAVLink强在哪?

本文深入解析了ArduPilot的MSP协议,探讨其轻量级通信设计、多传感器支持及与MAVLink的差异化优势。MSP协议以其低开销、高实时性和简化解析逻辑,特别适合资源受限的嵌入式环境,广泛应用于无人机和自动驾驶系统。文章还提供了MSP与MAVLink的详细对比及实际应用场景分析。

weixin_30667649的博客 280

Betaflight与F4/F7飞控硬件兼容性:核心要点

深入探讨Betaflight固件在F4与F7飞控硬件上的兼容特性,帮助用户优化配置选择。重点分析处理器架构差异对Betaflight性能的影响,提升飞行体验。

weixin_35879493的博客 1177
上一篇: BetaFlight代码解析(15)—通信系统
下一篇: BetaFlight代码解析(17)—遥测系统
timmy-uav
博客等级 码龄26年 526粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

timmy-uav

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值