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

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值