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), // 1FUNCTION_GPS = (1 << 1), // 2FUNCTION_TELEMETRY_FRSKY_HUB = (1 << 2), // 4FUNCTION_TELEMETRY_HOTT = (1 << 3), // 8FUNCTION_TELEMETRY_LTM = (1 << 4), // 16FUNCTION_TELEMETRY_SMARTPORT = (1 << 5), // 32FUNCTION_RX_SERIAL = (1 << 6), // 64FUNCTION_BLACKBOX = (1 << 7), // 128FUNCTION_TELEMETRY_MAVLINK = (1 << 9), // 512FUNCTION_ESC_SENSOR = (1 << 10), // 1024FUNCTION_VTX_SMARTAUDIO = (1 << 11), // 2048FUNCTION_TELEMETRY_IBUS = (1 << 12), // 4096FUNCTION_VTX_TRAMP = (1 << 13), // 8192FUNCTION_RCDEVICE = (1 << 14), // 16384FUNCTION_LIDAR_TF = (1 << 15), // 32768FUNCTION_FRSKY_OSD = (1 << 16), // 65536FUNCTION_VTX_MSP = (1 << 17), // 131072
} serialPortFunction_e;
3. 实例分析
# serial
serial 0 64 115200 57600 0 115200
注:这里其实不配也没有关系,不知道为什么厂家考虑使用了一个串口配置。
4. 配置情况
- 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统一硬件配置文件研读