气压计配置
自 Betaflight 3.2 起,气压计驱动改为可在运行时完整配置和重新配置。
作为这一改动的影响,target.h 中相关定义的解释方式发生了较大变化。虽然已采取兼容措施,但原本可用的气压计配置仍可能无法在 3.2 中正常工作。
本文说明如何通过 CLI 变量和命令在运行时配置气压计,使其恢复工作;同时介绍 target 维护者应了解的默认配置规则变更。
使用 CLI 配置气压计
- 气压计相关 CLI 变量:
| 变量 | 取值范围 | 说明 |
|---|---|---|
baro_bustype | NONE、I2C、SPI | 指定所选气压计连接的总线类型。 |
baro_i2c_device | 0 至该 MCU 支持的最大 I2C 总线序号(从 1 开始;等同于 target.h 中 I2Cx 的 x) | 当 baro_bustype 为 I2C 时,指定设备所在的 I2C 总线序号。0 表示未指定。 |
baro_i2c_address | 0 至 119(0x77) | 以 7 位地址形式指定 I2C 地址。0 是使用驱动默认地址的特殊值;1 至 7 无效,行为不可预期。 |
baro_spi_device | 0 至该 MCU 支持的最大 SPI 总线序号(从 1 开始;等同于 target.h 中 SPIx 的 x) | 当 baro_bustype 为 SPI 时,指定设备所在的 SPI 总线序号。0 表示未指定。 |
baro_hardware | NONE、AUTO、BMP280、MS5611、BMP085 | NONE:禁用气压计支持;AUTO:固件按预定义规则选择设备;其余值:明确选择对应设备。 |
- SPI 气压计的 CS(片选)引脚可通过
resourceCLI 命令指定:
| 资源名 | 说明 |
|---|---|
BARO_CS | 指定用于启用 SPI 气压计的 CS(片选)引脚。 |
-
并非每个 target 都内置所有总线类型与设备型号的组合。
-
当
baro_hardware = AUTO、baro_bustype = I2C且baro_i2c_address = 0时,固件会在指定的baro_i2c_device上扫描已内置的 I2C 设备,扫描顺序为BMP280、MS5611、BMP085。
Target 定义变更
本节面向 target 维护者和开发者。
USE_BARO_xxx 与 USE_BARO_SPI_xxx 已彼此独立
在 3.2 之前,要在 SPI 上配置设备 xxx,必须同时定义 USE_BARO_xxx 和 USE_BARO_SPI_xxx;该组合还会禁用设备 xxx 的 I2C 支持。
从 3.2 起,这一依赖关系已移除:USE_BARO_xxx 配置 xxx 的 I2C 变体,USE_BARO_SPI_xxx 配置其 SPI 变体。若两者同时指定,则 I2C 和 SPI 变体都会被配置。
目前,继承自 3.1.7 的 SPI 气压计 target 通常同时定义这两个宏,因此会同时配置 I2C 和 SPI 变体;运行时将按下文规则选择 SPI 变体。
默认设备判定(编译期)
若 target 定义中只配置一个气压计设备,该设备即为默认设备。
若配置了多个设备,则按以下规则依次判定默认设备:
- 按预定义优先级选择:
BMP280、MS5611、BMP085。该顺序基于设备的普及程度确定。 - 若同时配置 I2C 和 SPI 变体,则选择 SPI,因其更可能为板载设备。
- 当
baro_bustype = I2C、baro_i2c_address = 0、baro_hardware = AUTO时,运行时会按第 1 条的优先级扫描指定 I2C 总线上的设备。
覆盖默认配置
若以上规则无法得到预期的默认配置,可使用 DEFAULT_BARO_bbb_xxx 宏覆盖。具体宏名请参见 sensors/barometer.c 文件开头。