BetaFlight统一硬件配置文件研读之serial命令

BetaFlight统一硬件配置文件研读之serial命令

  • 1. 源由
  • 2. 代码分析
  • 3. 实例分析
  • 4. 配置情况
  • 5. 参考资料

统一硬件配置文件的设计是一种非常好的设计模式,可以将硬件和软件的工作进行解耦。

1. 源由

cli命令中serial是对UART串口的配置,通常情况下BetaFlight飞控会有一个USB VCP端口用来处理MSP消息配置飞控,其他端口更具应用来进行配置,所以厂家默认出厂可以不配,由用户根据需要调整。

2. 代码分析

cliSerial
 ├──>  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
 ├──>  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配置工具呈现的情况:
BetaFlight统一硬件配置文件研读之serial命令_第1张图片

5. 参考资料

【1】BetaFlight开源代码框架简介
【2】BetaFlight统一硬件资源简单配置修改
【3】BetaFlight统一硬件配置文件研读

你可能感兴趣的:(xFlight,BetaFlight,STM32)