BetaFlight统一硬件配置文件研读之serial命令
- 1. 源由
- 2. 代码分析
- 3. 实例分析
- 4. 配置情况
- 5. 参考资料
统一硬件配置文件的设计是一种非常好的设计模式,可以将硬件和软件的工作进行解耦。
1. 源由
cli命令中serial是对UART串口的配置,通常情况下BetaFlight飞控会有一个USB VCP端口用来处理MSP消息配置飞控,其他端口更具应用来进行配置,所以厂家默认出厂可以不配,由用户根据需要调整。
2. 代码分析
cliSerial
├──> <isEmpty(cmdline)> printSerial(DUMP_MASTER, serialConfig(), NULL, NULL); return
├──> [Get 1 param: identifier]
│ ├──> serialPortConfig_t *currentConfig = serialFindPortConfigurationMutable(val)
│ └──> portConfig.identifier = val
├──> [Get 2 param: functionMask]
│ └──> portConfig.functionMask = val
├──> [Get 3 param: msp_baudrateIndex]
│ └──> portConfig.msp_baudrateIndex = baudRateIndex
├──> [Get 4 param: gps_baudrateIndex]
│ └──> portConfig.gps_baudrateIndex = baudRateIndex
├──> [Get 5 param: telemetry_baudrateIndex]
│ └──> portConfig.telemetry_baudrateIndex = baudRateIndex
├──> [Get 6 param: blackbox_baudrateIndex]
│ └──> portConfig.blackbox_baudrateIndex = baudRateIndex
├──> <validArgumentCount < 6> error return
├──> memcpy(currentConfig, &portConfig, sizeof(portConfig))
└──> cliDumpPrintLinef(0, false, format,
portConfig.identifier,
portConfig.functionMask,
baudRates[portConfig.msp_baudrateIndex],
baudRates[portConfig.gps_baudrateIndex],
baudRates[portConfig.telemetry_baudrateIndex],
baudRates[portConfig.blackbox_baudrateIndex]
);
程序中实际使用的波特率采用index来记录,节省空间。
const uint32_t baudRates[] = {0, 9600, 19200, 38400, 57600, 115200, 230400, 250000,
400000, 460800, 500000, 921600, 1000000, 1500000, 2000000, 2470000}; // see baudRate_e
functionMask定义如下,如果需要自定义特殊的端口,可以根据表格选择。
typedef enum {
FUNCTION_NONE = 0,
FUNCTION_MSP = (1 << 0), // 1
FUNCTION_GPS = (1 << 1), // 2
FUNCTION_TELEMETRY_FRSKY_HUB = (1 << 2), // 4
FUNCTION_TELEMETRY_HOTT = (1 << 3), // 8
FUNCTION_TELEMETRY_LTM = (1 << 4), // 16
FUNCTION_TELEMETRY_SMARTPORT = (1 << 5), // 32
FUNCTION_RX_SERIAL = (1 << 6), // 64
FUNCTION_BLACKBOX = (1 << 7), // 128
FUNCTION_TELEMETRY_MAVLINK = (1 << 9), // 512
FUNCTION_ESC_SENSOR = (1 << 10), // 1024
FUNCTION_VTX_SMARTAUDIO = (1 << 11), // 2048
FUNCTION_TELEMETRY_IBUS = (1 << 12), // 4096
FUNCTION_VTX_TRAMP = (1 << 13), // 8192
FUNCTION_RCDEVICE = (1 << 14), // 16384
FUNCTION_LIDAR_TF = (1 << 15), // 32768
FUNCTION_FRSKY_OSD = (1 << 16), // 65536
FUNCTION_VTX_MSP = (1 << 17), // 131072
} serialPortFunction_e;
3. 实例分析
# serial
serial 0 64 115200 57600 0 115200
注:这里其实不配也没有关系,不知道为什么厂家考虑使用了一个串口配置。
4. 配置情况
# help serial
escprog - passthrough esc to serial
<mode [sk/bl/ki/cc]> <index>
gpspassthrough - passthrough gps to serial
serial - configure serial ports
serialpassthrough - passthrough serial data data from port 1 to VCP / port 2
<id1> [<baud1>] [<mode1>] [none|<dtr pinio>|reset] [<id2>] [<baud2>] [<mode2>]
- serial 20:USB VCP用于MSP通信(FUNCTION_MSP),系统默认配置
- serial 0:厂家配置文件提供
# serial
serial 20 1 115200 57600 0 115200
serial 0 64 115200 57600 0 115200
serial 1 0 115200 57600 0 115200
serial 2 0 115200 57600 0 115200
serial 3 0 115200 57600 0 115200
serial 5 0 115200 57600 0 115200
serial 6 0 115200 57600 0 115200
serial 7 0 115200 57600 0 115200
以下是BetaFlight配置工具呈现的情况:
5. 参考资料
【1】BetaFlight开源代码框架简介
【2】BetaFlight统一硬件资源简单配置修改
【3】BetaFlight统一硬件配置文件研读