ArduPilot 固件适配指南:Matek H7A3-SLIM 飞控硬件详解与 hwdef 配置剖析
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
本文以 ArduPilot 仓库中 MatekH7A3 硬件定义目录 为核心,系统梳理 Matek H7A3-SLIM 飞控的硬件资源、UART/RC/OSD/PWM/电源监控等关键配置,并结合hwdef.dat、hwdef.inc、defaults.parm等源码级文件,解释 ArduPilot 如何通过 ChibiOS hwdef 机制为这块 STM32H7A3 主控的飞控板生成固件。读完本文,你将掌握该飞控的端口规划、参数默认值、DShot/OSD/外接罗盘/VTX 供电控制的配置方法,并能读懂 ArduPilot 中任何一块飞控板的硬件定义文件。
板卡概览:一颗 280MHz H7A3 的 "slim" 全能飞控
Matek H7A3-SLIM 是 Matek Systems 推出的一款 36×36mm 标准尺寸飞控(30.5mm M3 孔位),其核心硬件配置如下:
| 类别 | 规格 |
|---|---|
| 处理器 | STM32H7A3RIT6 Cortex-M7,280 MHz,2MB Flash |
| IMU | ICM-42688p(加速度计 + 陀螺仪,SPI 接口) |
| 气压计 | SPL06-001 |
| OSD | AT7456E(内置 MAX7456 驱动) |
| 数据记录 | W25N01GV dataflash(128MB NAND,用于日志) |
| 供电 | 2S–6S Lipo 输入(带电压监测);9V/2A BEC(图传/相机,GPIO 控制);5V/2A BEC |
| 接口 | 11 路 PWM 输出(全部支持 DShot)、6 路 UART、1 路 CAN、1 路 I2C、4 路 ADC、USB-C |
| LED | 红色 3.3V 电源指示;蓝/绿双色 FC 状态灯 |
Matek H7A3-SLIM 飞控板外观:正面丝印标注了电源、SWD、UART、I2C、VBat 等焊盘,背面为主控芯片、电源管理与 USB-C 接口。
值得说明的是,板卡手册中所谓 "2MB flash",在 ArduPilot 的硬件定义文件中同样被明确为FLASH_SIZE_KB 2048;而日志存储则由 W25N01GV(128MB NAND)承担,通过 SPI2 挂载(见下文 hwdef 分析)。
从 Readme 到 hwdef:ArduPilot 如何描述这块板
ArduPilot 的 ChibiOS 移植采用hwdef(hardware definition)文件描述每块飞控板的全部硬件资源。MatekH7A3目录下共有 6 个文件:
Readme.md:面向用户的板卡使用说明(本文主体);hwdef.dat:板卡级硬件定义入口(引用hwdef.inc);hwdef.inc:被hwdef.dat引入的核心引脚/外设定义;hwdef-bl.dat/hwdef-bl.inc:Bootloader 专用的硬件定义;defaults.parm:该板卡的出厂默认参数;H7A3-SLIM.jpg:板卡实物图。
启动引导配置中,hwdef-bl.dat设置了板卡 IDAPJ_BOARD_ID AP_HW_MatekH7A3,对应 Tools/AP_Bootloader/board_types.txt 中的 ID1149(同系列的 MatekH7A3-Wing 为 1228)。这意味着固件与 Bootloader 通过统一的板卡 ID 进行识别,刷写时必须配套使用。
UART 映射:6 路串口的默认分工
Readme 明确给出了 6 路 UART 与 ArduPilot 串口逻辑编号的对应关系,Rx/Tx 以板载丝印为准(Rx 为接收、Tx 为发送):
| 逻辑串口 | 物理外设 | 默认用途 | DMA |
|---|---|---|---|
| SERIAL0 | USB(OTG1) | USB 连接(MAVLink 控制台/刷机) | – |
| SERIAL1 | USART1 | MAVLink2 数传 | 支持 |
| SERIAL2 | USART2 | 串口 RC 输入 | 支持 |
| SERIAL3 | USART3 | GPS | 支持 |
| SERIAL4 | UART4 | 用户自定义 | 不支持 |
| SERIAL5 | UART5 | 用户自定义 | 不支持 |
| SERIAL6 | USART6 | 用户自定义 | 不支持 |
从源码看,这一映射与 hwdef.inc 中的SERIAL_ORDER OTG1 USART1 USART2 USART3 UART4 UART5 USART6严格一致,且 UART4/UART5/USART6 在引脚定义中均标注了NODMA——这与 Readme 中 "NO DMA" 的说明吻合。defaults.parm给出了对应的默认协议与波特率:
SERIAL1_PROTOCOL 2 # mavlink2 w/DMA SERIAL2_PROTOCOL 23 # RC INPUT w/DMA SERIAL3_PROTOCOL 5 # GPS w/DMA SERIAL4_PROTOCOL -1 SERIAL5_PROTOCOL -1 SERIAL6_PROTOCOL -1 SERIAL1_BAUD 57 SERIAL2_BAUD 115 SERIAL3_BAUD 57即:SERIAL1(数传)与 SERIAL3(GPS)默认 57600 波特率,SERIAL2(RC 输入)默认 115200。若需将 SERIAL4/5/6 用作 GPS 或外置数传,需手动修改协议与波特率。
RC 输入:SERIAL2 上的多协议支持与接线要点
RC 输入固定配置在 USART2(SERIAL2),SERIAL2_PROTOCOL=23为默认值,支持全部串行 RC 协议。Readme 特别给出了各协议的接线与SERIAL2_OPTIONS设置:
| 协议 | 接线 | SERIAL2_OPTIONS |
|---|---|---|
| CRSF | Tx2 与 Rx2 均需连接 | "0"(默认) |
| SBUS / DSM / SRXL | 仅连接 Rx2 引脚 | SBUS 需设为 "3" |
| FPort | 连接 Tx2 | "7" |
| SRXL2 | 连接 Tx2 | "4"(自动提供遥测) |
注意:PPM 在该板上不受支持。SBUS 属于单向接收,只需 Rx2;而 CRSF/FPort/SRXL2 属于双向协议,必须连接对应的 Tx2 引脚才能实现控制与遥测回传。
OSD 与显示支持
H7A3-SLIM 内置 AT7456E OSD 芯片,ArduPilot 侧通过OSD_TYPE 1(MAX7456 驱动)启用。硬件定义中对应:
define OSD_ENABLED 1 define HAL_OSD_TYPE_DEFAULT 1 SPIDEV osd SPI1 DEVID4 MAX7456_CS MODE0 10*MHZ 10*MHZ ROMFS_WILDCARD libraries/AP_OSD/fonts/font*.bin即 OSD 芯片挂在 SPI1 总线(片选 PB2),并且会随固件打包加载 AP_OSD 字体文件。此外,也可用任意空闲 UART 连接 DJI 或 DisplayPort 等外置 MSP OSD(参见仓库内 AP_MSP 库)。
PWM 输出:11 路全 DShot,5 组定时器
全部 11 路 PWM 输出均支持 DShot,分为 5 组,每组由独立的定时器驱动,这一点与 hwdef.inc 的引脚定义一一对应:
| 通道 | 定时器 | hwdef 引脚定义(节选) |
|---|---|---|
| PWM 1, 2 | TIM1 | PA9 TIM1_CH2、PA10 TIM1_CH3(BIDIR) |
| PWM 3, 4 | TIM2 | PA15 TIM2_CH1(BIDIR)、PB3 TIM2_CH2 |
| PWM 5–8 | TIM3 | PB0、PB1、PB4、PB5(部分 BIDIR) |
| PWM 9, 10 | TIM4 | PB6 TIM4_CH1、PB7 TIM4_CH2 |
| PWM 11 | TIM16 | PB8 TIM16_CH1 |
其中标注BIDIR的通道支持BiDirectional DShot(双向 DShot),可用于遥测电机转速(如配合 BLHeli_32 电调)。有源蜂鸣器则占用 TIM17(PB9,GPIO(32) ALARM)。
电池监控:双路电压/电流 ADC 与出厂默认值
板载 2 组分压电阻和 2 路电流 ADC,支持外接 3.3V 基准的电流传感器。Readme 给出的默认参数如下:
| 参数 | 值 | 说明 | | ---- | -- | ---- | | BATT_MONITOR | 4 | 使能模拟电压+电流监控 | | BATT_VOLT_PIN | 10 | 主电池电压 ADC 引脚 | | BATT_CURR_PIN | 11 | 主电池电流 ADC 引脚 | | BATT_VOLT_MULT | 21.0 | "Vbat" 焊盘,支持 5.5~30V 输入 | | BATT_AMP_PERVLT | X | "Curr" 焊盘,按外接电流传感器规格设置 | | BATT2_VOLT_PIN | 18 | 第二电池电压 ADC 引脚 | | BATT2_CURR_PIN | 8 | 第二电池电流 ADC 引脚 | | BATT2_VOLT_MULT | 21.0 | "VB2" 焊盘,最高支持 69V 电压检测 | | BATT_AMP_PERVLT | X | "CU2" 焊盘,按外接电流传感器规格设置 |
这些默认值在 hwdef.inc 中以编译期宏的形式固化:
PC0 BATT_VOLTAGE_SENS ADC1 SCALE(1) PC1 BATT_CURRENT_SENS ADC1 SCALE(1) PA4 BATT2_VOLTAGE_SENS ADC1 SCALE(1) PC5 BATT2_CURRENT_SENS ADC1 SCALE(1) define HAL_BATT_MONITOR_DEFAULT 4 define HAL_BATT_VOLT_PIN 10 define HAL_BATT_CURR_PIN 11 define HAL_BATT2_VOLT_PIN 18 define HAL_BATT2_CURR_PIN 8 define HAL_BATT_VOLT_SCALE 21.0 define HAL_BATT_CURR_SCALE 40.0 define HAL_BATT2_VOLT_SCALE 21.0可见电压分压比例统一为 21.0(与 Readme 的BATT_VOLT_MULT 21.0一致),而HAL_BATT_CURR_SCALE 40.0是出厂编译默认的电流比例系数,实际使用外接电流传感器时仍需按传感器规格调整BATT_AMP_PERVLT(即BATT_CURR_SCALE参数)。
罗盘与气压计:无内置罗盘,I2C 总线自动探测
该板没有内置罗盘,需要外接罗盘接到 I2C 的 SDA/SCL 焊盘。硬件定义中AP_COMPASS_PROBING_ENABLED 1表示 ArduPilot 会主动探测 I2C 总线上所有常见外置罗盘型号,HAL_COMPASS_AUTO_ROT_DEFAULT 2则将默认安装方向设置为 ROTATION_YAW_270(常见的罗盘安装朝向)。HAL_I2C_INTERNAL_MASK 0表明该 I2C 总线完全用于外接设备。
板载 SPL06-001 气压计同样挂在 I2C 总线上(地址 0x76):
BARO SPL06 I2C:0:0x76 define AP_BARO_SPL06_ENABLED 1IMU ICM-42688p 则通过 SPI1(片选 PC4,ROTATION_NONE)接入,并启用了HAL_DEFAULT_INS_FAST_SAMPLE 1(快速采样)。
VTX 供电控制:GPIO 81 与 9V BEC
9V BEC 输出至 "9V" 焊盘,由GPIO 81控制,默认低电平(9V 输出使能)。将其置高即可切断该引脚的供电。硬件定义中的对应关系为:
PC13 PINIO1 OUTPUT GPIO(81) LOW define RELAY1_PIN_DEFAULT 81即 PC13 被定义为 PINIO1(GPIO 81),同时被设置为默认继电器 1 引脚。实际使用中可通过 Mission Planner 的 Relay 功能或脚本(Lua)控制该 GPIO,实现图传/相机的上电与断电。
刷写固件:DFU 首刷与 Mission Planner 增量更新
该板对应的 ArduPilot 固件存放于 ArduPilot 官方固件服务器的MatekH7A3子目录(ArduPlane、ArduCopter、ArduRover、ArduSub 等各有对应版本):
- 首次刷写(DFU):按住板上的Boot 按钮插入 USB 进入 DFU 模式,使用 STM32CubeProgrammer 等 DFU 工具加载
ardu*_with_bl.hex(带 Bootloader 的完整固件镜像)。 - 后续更新:可直接用 Mission Planner 通过 USB 或数传进行固件升级。
如需自行编译,可在 ArduPilot 源码根目录使用 waf 构建系统,以板卡名MatekH7A3为目标(如./waf configure --board MatekH7A3后./waf copter),硬件定义即来自本文剖析的 MatekH7A3 目录。
总结
Matek H7A3-SLIM 是一块资源均衡、面向航拍/穿越机的全能型飞控:280MHz H7A3 主控、SPI 高速 IMU、128MB NAND 日志、11 路 DShot PWM、6 路串口、CAN 总线与外置罗盘支持。ArduPilot 通过hwdef.dat/hwdef.inc/defaults.parm三份文件精确刻画了这块板卡的每一个引脚与外设默认行为——理解这套文件结构,不仅能完整驾驭 H7A3-SLIM,也能举一反三地读懂 ArduPilot 支持的数百种飞控板硬件定义。
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考