ArduPilot HEEWING F405 硬件定义详解:UART 映射、DShot 分组、电池监控与 DFU 烧录实战
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
本文以 ArduPilot 仓库中 HEEWING-F405 板级硬件定义目录 中的 README 为主体,结合 hwdef.dat 硬件描述文件与 defaults.parm 默认参数,系统讲解 HEEWING F405 飞行控制器的 UART 映射、RC 输入双向切换、DShot PWM 分组规则、电池监控参数与固件烧录流程。读完本文,你可以在 ArduPilot 下正确配置该板的串口、飞控遥控链路、OSD 与电池参数,并顺利完成从 DFU 首次烧录到空中升级的整个流程。
1. 硬件构成与板级基本信息
HEEWING F405 是 HEEWING 生产的一款飞行控制器,随其 Ranger-T1 VTOL RTF 整机出货。其硬件特征在 README 中完整列出:
- STM32F405 微控制器
- ICM42688 惯性测量单元(IMU)
- SLP06 气压计
- 无板载数据记录(dataflash)存储
- MAX7456 OSD 芯片
- 4 路 UART
- 9 路 PWM 输出
hwdef.dat 补充了几个 README 未展开的关键信息,它们决定了编译产物与烧录行为:
MCU STM32F4xx STM32F405xx:芯片型号声明;FLASH_SIZE_KB 1024与FLASH_RESERVE_START_KB 64:整片 1MB Flash,前 64KB 预留给 bootloader,固件从 64KB 处启动——这正是"必须烧录 with_bl.hex"的原因,见第 8 节;STORAGE_FLASH_PAGE 1/define HAL_STORAGE_SIZE 15360:参数存储位于 Flash 第 1 页,容量 15360 字节;APJ_BOARD_ID AP_HW_HEEWING_F405:APJ 固件包中的板型标识。在 board_types.txt 中,AP_HW_HEEWING_F405对应的数值板型 ID 为 1119;SPIDEV icm42688 SPI1 DEVID1 IMU_CS MODE3 1MHZ 8MHZ:IMU 挂在 SPI1 上,最高 8MHz 时钟,并使用ROTATION_ROLL_180_YAW_90安装旋转;define HAL_DEFAULT_INS_FAST_SAMPLE 1表示默认开启快速 IMU 采样;BARO SPL06 I2C:0:0x77:SLP06 气压计位于 I2C1 总线,地址 0x77;AUTOBUILD_TARGETS Plane:构建系统会自动为这块板子编译 ArduPlane 目标。
值得注意的是,该板通过 minimize_fpv_osd.inc 做了低 Flash 优化:注释说明这是为 1MB Flash 的 FPV/OSD 板裁剪驱动的典型做法——保留 NMEA GPS、四旋翼/六旋翼/八旋翼电机帧、Benewake TF 系列测距驱动与 Tramp 视频链路支持,同时关闭光流、SBUS 输出、风冷发动机、高级失败保护(Advanced Failsafe)、精确降落、SMBUS 电池等较少用驱动以腾出 Flash 空间。
HEEWING-F405v2 变体
仓库中还存在 HEEWING-F405v2 目录,其 hwdef 直接include基础版,仅追加了三行:将 PC14 声明为FLASH_CS、新增一个 32MHz 的 SPI2 数据闪存 SPIDEV,并define HAL_LOGGING_DATAFLASH_ENABLED 1。也就是说v2 版本补上了基础版缺失的板载 dataflash 记录能力,其余硬件定义与基础版完全一致。
2. UART 映射:SERIAL 端口与物理 UART 的对应关系
这是配置该板时最容易出错的部分,因为 ArduPilot 的 SERIALn 逻辑编号与板壳丝印的 UARTn 编号并不相同。README 给出的映射表如下(Rn/Tn 引脚见上方引脚图):
| ArduPilot 串口 | 物理 UART | 板壳丝印 | DMA | 典型用途 |
|---|---|---|---|---|
| SERIAL0 | USB (OTG1) | — | — | GCS / 调试 |
| SERIAL1 | UART3 | UART1 | 支持 | 外设 |
| SERIAL2 | UART1 | UART2 | 支持 | 外设 / FrSky 遥测 |
| SERIAL3 | UART5 | GPS | RX 无 DMA | GPS |
| SERIAL5 | UART6 | VTX | 无 | 视频发射机(仅 TX) |
| SERIAL6 | UART2 | RCIN | 支持 | RC 输入(默认仅 RX) |
这一映射在 hwdef.dat 中有逐脚对应声明:SERIAL_ORDER OTG1 USART3 USART1 UART5 UART4 USART6 USART2一行定义了 0~6 号逻辑串口的排列顺序。逐条核对:
- USART3(PC10/PC11,丝印 UART1)→ SERIAL1,支持 DMA;
- USART1(PA9/PA10,丝印 UART2)→ SERIAL2,支持 DMA;
- UART5(PC12/PD2,GPS 座)→ SERIAL3。注意 RX 引脚 PD2 被声明为
NODMA,TX/RX 均可用于 GPS 数据; - UART4(PA0/PA1)→ SERIAL4,声明为
NODMA且注释为 NC(未引出),实际不可用; - USART6(PC6/PC7)→ SERIAL5,TX/RX 均为
NODMA。README 说明其定位为 VTX 口且"TX-only",即典型用法只用作发送; - USART2(PA2/PA3)→ SERIAL6,即 RCIN,详见下一节。
3. RC 输入与 BRD_ALT_CONFIG 双向切换
RC 输入配置在 4 针 RCIN 连接器的 UART2_RX 引脚上,支持全部串口 RC 协议(CRSF、ELRS、SBUS 等)。默认配置下它只有接收能力:hwdef 中 PA3 被声明为
PA3 TIM9_CH2 TIM9 RCININT PULLDOWN即用作 RCIN 中断输入,PA2(USART2_TX)虽然物理存在但默认不参与 RC 通道。若需要双向协议(例如 CRSF 回传遥测到遥控器),设置参数BRD_ALT_CONFIG=1即可。其原理是 hwdef.dat 中为 PA3 提供了替代配置:
# alternative with PA3 as USART2_RX PA3 USART2_RX USART2 ALT(1) define DEFAULT_SERIAL6_PROTOCOL SerialProtocol_RCINALT(1)表示该引脚定义在BRD_ALT_CONFIG=1时生效,此时 PA3 从 RCININT 切换为 USART2_RX,SERIAL6 成为完整的 RX/TX 串口。这个机制由 ChibiOS HAL 通用实现:GPIO.cpp 维护"由 BRD_ALT_CONFIG 选择的替代配置表"并在启动时按当前参数值重新选择引脚功能,UARTDriver.cpp 则允许 RX/TX/RTS/CTS 引脚经 BRD_ALT_CONFIG 重映射。DEFAULT_SERIAL6_PROTOCOL SerialProtocol_RCIN保证 SERIAL6 默认按 RC 输入协议初始化。
FrSky 遥测
README 说明 FrSky 遥测可使用空闲串口 SERIAL1 或 SERIAL2 的发送引脚实现,即把 D 端口设备(如 D16 接收机)接到这两个端口之一,利用其 TX 引脚回传传感器数据。
4. OSD 支持
HEEWING F405 通过 OSD_TYPE 参数取值 1(MAX7456 驱动)启用 OSD,对应 hwdef 中的:
SPIDEV osd SPI2 DEVID2 OSD_CS MODE0 10*MHZ 10*MHZ define OSD_ENABLED 1 define HAL_OSD_TYPE_DEFAULT 1 ROMFS_WILDCARD libraries/AP_OSD/fonts/font0.bin即 MAX7456 挂在 SPI2 上(片选 PC4),默认 OSD 类型被直接写死为 1,且板级定义强制把 font0 字体打进 ROMFS。结合 minimize_fpv_osd.inc 中"在 1MB Flash 限制下强制启用 Tramp 支持与 CRSF 遥测文本支持"的定义,可以看出这块板子被明确定位为 FPV 用途:OSD、视频链路(Tramp)与双向 RC 遥测都被优先保证。
5. PWM 输出与 DShot 分组规则
该板支持最多 9 路 PWM 输出,输出能力在 hwdef.dat 中逐脚声明:
| 通道 | 引脚 | 定时器 | DShot 双向 | 备注 |
|---|---|---|---|---|
| M1 | PB7 | TIM4_CH2 | BIDIR | 支持 DShot 双向遥测 |
| M2 | PB6 | TIM4_CH1 | — | README 称支持,dat 中未标 BIDIR |
| M3 | PB1 | TIM3_CH4 | — | 与 I2C2_RX 共享,不建议用 DShot |
| M4 | PB0 | TIM3_CH3 | — | 与 I2C2_RX 共享,不建议用 DShot |
| M5 | PC9 | TIM8_CH4 | BIDIR | 支持 DShot 双向遥测 |
| M6 | PC8 | TIM8_CH3 | — | |
| M7 | PB15 | TIM1_CH3N | — | |
| M8 | PB14 | TIM1_CH2N | — | |
| M9 | PA8 | TIM1_CH1 | BIDIR | 支持 DShot 双向遥测 |
| M10 | PA15 | TIM2_CH1 | NODMA | 注释 no output,无实际输出 |
README 的核心规则有三条,均可与 hwdef 交叉印证:
- PWM 分为 4 组:M1/M2 在第 1 组、M3/M4 在第 2 组、M5/M6 在第 3 组、M7-M9 在第 4 组。从定时器声明可以推断出分组的硬件根源:同组通道共用同一个定时器(TIM4、TIM3、TIM8、TIM1 各带一路或两路输出),因此同一组必须共用同一个输出时钟/速率;
- 同组速率一致,DShot 会传染整组:如果组内任一通道使用 DShot,则整组都必须使用 DShot——这正是"同组同定时器"这一硬件约束的直接推论;
- M3/M4 不推荐 DShot:hwdef 注释明确写出 "shared with I2C2_RX, dshot not advised",因为 PB0/PB1 与 I2C2 总线(连接外部罗盘/传感器的总线)复用引脚,DShot 的高速边沿切换会与 I2C 通信互相干扰。
另外,README 称 M1-M2、M5-M6、M9 支持双向 DShot(bidirectional DShot,即 DShot 遥测回传);从 hwdef 源码看,BIDIR标记实际出现在 M1、M5、M9 三个引脚上,配置双向遥测时以 dat 文件的BIDIR声明为准。
6. 电池监控
板上内置电压与电流传感器:电流传感器量程最大 130A,电压传感器可支持最高 6S 锂聚合物电池。正确的电池参数组合(README 原文给出)为:
BATT_MONITOR 4(ANALOG 类型)BATT_VOLT_PIN 10BATT_CURR_PIN 11BATT_VOLT_MULT 7.71BATT_AMP_PERVLT 26.67
这些值在 hwdef.dat 中都有板级默认值的呼应:
PC0 BATT_VOLTAGE_SENS ADC1 SCALE(1) PC1 BATT_CURRENT_SENS ADC1 SCALE(1) define HAL_BATT_MONITOR_DEFAULT 4 define HAL_BATT_VOLT_PIN 10 define HAL_BATT_VOLT_SCALE 7.71 define HAL_BATT_CURR_PIN 11 define HAL_BATT_CURR_SCALE 26.7即电压接 ADC1 的 PC0、电流接 ADC1 的 PC1,监控类型、引脚号、电压倍数(7.71,分压比决定)与安培/伏特系数(README 记 26.67,dat 取 26.7)在出厂定义中已预设,升级参数后无需再手动修改。
7. 罗盘、气压计与 GPS 端口
HEEWING F405没有内置罗盘,但可以经 GPS 端口外接罗盘——RTF 套件随附的 GPS 模块已集成罗盘。hwdef 对此做了配套声明:define AP_COMPASS_PROBING_ENABLED 1表示启动时扫描 I2C 总线探测所有支持的外部罗盘型号;HAL_COMPASS_AUTO_ROT_DEFAULT 2给出默认安装旋转。
GPS 端口(SERIAL3 / UART5)使用注意事项:RX 引脚 PD2 被声明为NODMA。配套的 defaults.parm 中有这样一组默认参数:
RTL_ALTITUDE,50.00 ARMING_RUDDER,2 # GPS RX DMA conflicts with CRSF and I2C1 GPS_DRV_OPTIONS,4其中注释直接说明了原因:GPS RX 若启用 DMA 会与 CRSF 协议和 I2C1 总线产生资源冲突,因此通过GPS_DRV_OPTIONS,4关闭 GPS 端口的 DMA 使用。RTL_ALTITUDE 50与ARMING_RUDDER 2则是针对 VTOL 构型预设的返航高度与解锁舵面检查模式。
气压计为板上 SLP06,位于 I2C1 总线地址 0x77,无需额外配置。
8. 固件烧录
README 给出完整的烧录流程,结合 hwdef 可以看得更清楚:
- 首次烧录用 DFU:按住 bootloader 按键并插入 USB,使板子进入 DFU 模式,然后用任意 DFU 工具烧录
with_bl.hex固件。之所以必须是 with_bl 版本,是因为 hwdef.dat 声明FLASH_RESERVE_START_KB 64——前 64KB 固定预留给 bootloader,普通 hex 不含 bootloader,烧入后无法再走后续升级流程。 - 首次烧录前务必断开 GPS:README 特别警告,该硬件在 GPS 连接且上电时无法正常进入 DFU 模式。
- 之后通过地面站升级:初始固件就绪后,使用任意支持 ArduPilot 的地面站软件(如 Mission Planner)下载
*.apj固件包即可。APJ 文件内部携带板型标识AP_HW_HEEWING_F405(数值 ID 1119,见 board_types.txt),可确保烧录正确的目标文件。
9. 关键文件索引
| 文件 | 作用 |
|---|---|
| README.md | 板级使用说明:特征、UART 映射、RC、OSD、PWM、电池、烧录 |
| hwdef.dat | 硬件定义:引脚、定时器、SPI/I2C/UART、传感器与默认值 |
| defaults.parm | 出厂默认参数(GPS DMA 冲突规避等) |
| hwdef-bl.dat | bootloader 目标使用的简化硬件定义 |
| HEEWING-F405v2/hwdef.dat | v2 变体:在基础版上启用板载 dataflash |
| heewingf405.jpg | 板卡引脚图(Rn/Tn、M1-M9 标识依据) |
| board_types.txt | APJ 板型 ID 表(AP_HW_HEEWING_F405 = 1119) |
掌握以上内容后,你可以依据引脚图核对接线、按第 2 节映射表分配串口、按第 5 节分组规则配置 DShot、按第 6 节参数组配置电池,并沿第 8 节流程完成从 DFU 首烧到空中升级的完整部署。
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考