Betaflight 的串口管理系统为管理多个串口通信接口提供了一个统一的抽象层。该系统负责端口分配、配置和共享机制,并为包括 MSP、遥测、GPS 和其他基于串口的功能在内的各种通信协议提供一致的 API。
系统架构
串行端口管理系统采用分层架构,将硬件特定细节与更高级别的协议实现隔离开来。

串口类型
Betaflight 支持多种类型的串行接口,每种接口都有其特定的特性和使用场景。
| 端口类型 | 标识符范围 | 描述 | 最大波特率 | 局限性 |
|---|---|---|---|---|
| USB VCP | SERIAL_PORT_USB_VCP | 通过 USB 的虚拟 COM 端口 | 高的 | 单端口 |
| UART | SERIAL_PORT_UART0-10 | 硬件 UART 外设 | 247万 | 硬件相关 |
| SoftSerial | SERIAL_PORT_SOFTSERIAL1-2 | 软件实现的串行 | 19.2K | CPU密集型,波特率有限 |
| LPUART | SERIAL_PORT_LPUART1 | 低功耗 UART | 多变的 | 低功耗优化 |
| PIOUART | SERIAL_PORT_PIOUART0-9 | 基于 PIO 的 UART | 多变的 | 平台特定 |
端口功能和共享
该系统为串行端口分配特定功能,并支持兼容功能之间的受控共享。
函数类型

端口共享规则
该系统强制执行特定的共享规则以防止冲突:
- MSP共享:MSP可以共享遥测或黑盒功能
- 遥测数据共享:兼容的遥测协议可以与串行接收器共享遥测数据。
- VTX MSP:必须与 RX 或 MSP 串口共享
- 专属功能:其他大多数组合均被禁止。

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

默认配置
系统在初始化期间建立默认端口分配:
- 端口 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。
1085

被折叠的 条评论
为什么被折叠?



