ArduPilot ChibiOS 硬件定义详解:iFlight BLITZ F745 飞控板的引脚、串口映射与参数配置
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
本文以 ArduPilot 仓库中 iFlight BLITZ F745 飞控板的硬件定义文档 README 为主体,结合该板卡的硬件描述文件 hwdef.dat、引导加载配置 hwdef-bl.dat 和默认参数 defaults.parm,完整梳理这块 STM32F745 板卡的硬件特性、UART 映射、RC/OSD/PWM 配置、电池监控参数以及固件烧录方法。读完后你能够清楚知道如何将 BLITZ F745 接入 ArduPilot:哪一路串口接 GPS、哪一路接接收机、9 路 PWM 如何分组使用、电池监控参数为何这样设置,以及首次烧录与后续升级的正确流程。
硬件特性概览
BLITZ F745 是 iFlight 生产的飞行控制器。按照 README 的说明,其核心硬件规格为:
- MCU:BGA 封装 STM32F745,主频 216MHz
- 陀螺仪:ICM42688(板上 IMU)
- 板载 32MB Flash(用于日志存储)
- BEC 输出:5V 2.5A
- 气压计:DPS310
- OSD:AT7456E
- 6 路 UART:UART1~UART6
- I2C 总线,用于外接罗盘
- 9 路 PWM 输出(8 路电机输出 + 1 路 LED 输出)
从 hwdef.dat 的定义可以进一步印证这些规格,并获得一些 README 未直接展开的细节:
MCU STM32F7xx STM32F745xx声明了 MCU 型号,OSCILLATOR_HZ 8000000使用外部 8MHz 晶振;APJ_BOARD_ID AP_HW_BlitzF7是该板在 ArduPilot 固件体系中的板型 ID(该文件注释指出对应关系见 board_types.txt);FLASH_SIZE_KB 1024表示 STM32F745 内部 Flash 为 1MB,FLASH_RESERVE_START_KB 96将前 96KB 保留给 bootloader,因此应用固件从 96KB 偏移处开始存放;- README 中提到的 32MB "Onboard Flash" 是外挂的 NOR Flash,即
SPIDEV dataflash SPI3 ... DATAFLASH littlefs:jedec_nor这条定义对应的日志/参数存储介质,通过 SPI3 连接; - 气压计定义为
BARO DPS310 I2C:1:0x76(同时保留了SPL06的探测定义),与 README 中"DPS310 气压计"一致。
板上原理图/引脚分布如下图所示(引自 README 的 Pinout 章节):
UART 映射与默认协议
README 中给出了完整的串口映射表。板卡丝印上以Rn/Tn标注串口:Rn是 UARTn 的接收脚,Tn是发送脚:
| 名称 | 引脚 | 功能 | |:-|:-|:-| | SERIAL0 | COMPUTER | USB | | SERIAL1 | RX1/TX1 | UART1(DJI 接口) | | SERIAL2 | TX2/RX2 | UART2(RC 接收,支持 DMA) | | SERIAL3 | TX3/RX3 | UART3(GPS,支持 DMA) | | SERIAL4 | TX4/RX4 | UART4 | | SERIAL5 | TX5/RX5 | UART5 | | SERIAL6 | RX6 | UART6(ESC 遥测) |
README 特别强调了一条与实际接线图不符的要点:GPS 应接 UART3,而不是常见接线图(typical wiring diagram)中示意的 UART4。
从 hwdef.dat 的串口定义看,固件层面的默认配置与上表一一对应:
SERIAL_ORDER OTG1 USART1 USART2 USART3 UART4 UART5 USART6 # USART1 - VTX PA10 USART1_RX USART1 NODMA PA9 USART1_TX USART1 NODMA define DEFAULT_SERIAL1_PROTOCOL SerialProtocol_MSP_DisplayPort # USART2 - RX PA2 USART2_TX USART2 PA3 USART2_RX USART2 define DEFAULT_SERIAL2_PROTOCOL SerialProtocol_RCIN # USART3 - GPS PB10 USART3_TX USART3 PB11 USART3_RX USART3 define DEFAULT_SERIAL3_PROTOCOL SerialProtocol_GPS # USART6 - ESC Telem PC6 USART6_TX USART6 NODMA PC7 USART6_RX USART6 NODMA define DEFAULT_SERIAL6_PROTOCOL SerialProtocol_ESCTelemetry可以印证几个关键事实:
- SERIAL0 是 USB(OTG1),即
OTG1 USART1 ...顺序中的第一项,用于 GCS 通信; - SERIAL1 默认协议是 MSP/DisplayPort,即接 VTX/OSD 屏的串口(注释
USART1 - VTX),注意它与板上的 AT7456E OSD 芯片不同:AT7456E 走 SPI4(见下文 OSD 一节),而 SERIAL1 用于外接的 DisplayPort 视频链路; - SERIAL2 默认是 RCIN,与 README "RC Input" 章节一致;
- SERIAL3 默认是 GPS,这是 README 那条提醒的固件级依据;
- SERIAL6 默认是 ESC 遥测(
SerialProtocol_ESCTelemetry),README 中 SERIAL6 只标注 RX6 引脚,即该串口在此板型上只用作 ESC 电流/温度遥测的接收; - SERIAL4、SERIAL5 默认协议为
None,属于通用备用串口,README 中也未为其指定默认用途。
RC 输入
按照 README 的 RC Input 章节,RC 输入配置在UART2_RX/UART2_TX上,支持所有串行 RC 协议(CRSF、SBUS、ELRS、IBUS 等)。hwdef.dat 中DEFAULT_SERIAL2_PROTOCOL SerialProtocol_RCIN的默认值也保证了开箱即插即用:把接收机接到 UART2,固件即把 SERIAL2 当作 RC 输入,无需手动改SERIALn_PROTOCOL。
OSD 支持
README 明确说明:BLITZ F745 支持使用OSD_TYPE 1(MAX7456 驱动)的 OSD。这一点在 hwdef.dat 中得到双重印证:
# OSD setup SPIDEV osd SPI4 DEVID1 OSD1_CS MODE0 10*MHZ 10*MHZ define OSD_ENABLED 1 define HAL_OSD_TYPE_DEFAULT 1 ROMFS_WILDCARD libraries/AP_OSD/fonts/font*.bin也就是说,板上 AT7456E OSD 芯片是通过SPI4(片选脚PE4 OSD1_CS)连接的,固件默认 OSD 类型即 1(MAX7456 兼容驱动),并且 OSD 字体文件(libraries/AP_OSD/fonts/font*.bin)会被打包进 ROMFS。因此用户只需要保证OSD_TYPE为 1 即可使用 OSD 显示,无需额外配置。
PWM 输出:9 路、3 个分组与 DShot 约束
这是该板卡配置中约束最多、最容易出错的部分。
README 给出的规格是:
- 板上 M1~M8 焊盘为电机输出,且 M1~M4 同时引出到 ESC 插座(4 in 1 ESC 排线座);
- 全部 9 路输出支持 DShot;前 4 路(M1~M4)额外支持双向 DShot(BIDIR,即 DShot 双向遥测)以及所有 PWM 协议类型;
- 第 9 路是板上的 "LED" 引脚,默认配置为串行 LED 输出;
- 9 路 PWM 分属三个硬件组:
- PWM 1~4 在 group1
- PWM 5~8 在 group2
- PWM 9 在 group3
- 同一组内的通道必须使用相同的输出速率;如果组内任何一路使用 DShot,则该组所有通道都必须使用 DShot。
这一分组约束的根源可以在 hwdef.dat 的定时器分配中找到:M1~M4 挂在 TIM3 的四个通道(CH1~CH4)上,M5~M8 挂在 TIM1 的四个通道上,M9(LED)单独使用 TIM8:
PB4 TIM3_CH1 TIM3 PWM(1) GPIO(50) BIDIR # M1 PB0 TIM3_CH3 TIM3 PWM(2) GPIO(51) # M2 PB5 TIM3_CH2 TIM3 PWM(3) GPIO(52) # M3 PB1 TIM3_CH4 TIM3 PWM(4) GPIO(53) BIDIR # M4 PE9 TIM1_CH1 TIM1 PWM(5) GPIO(54) # M5 PE11 TIM1_CH2 TIM1 PWM(6) GPIO(55) # M6 PE13 TIM1_CH3 TIM1 PWM(7) GPIO(56) # M7 PE14 TIM1_CH4 TIM1 PWM(8) GPIO(57) # M8 # LEDs PC9 TIM8_CH4 TIM8 PWM(9) GPIO(58) # M9TIM3、TIM1、TIM8 三个定时器正好对应 README 所说的三个组——同一硬件定时器上的通道天然共享同一时钟/输出速率,这就是"组内必须统一速率、组内 DShot 全组 DShot"的底层原因。BIDIR标记也解释了为什么只有 M1 和 M4 标注为双向 DShot 引脚(README 表述为"前四路支持双向 DShot",hwdef 中在 CH1/CH4 两个通道上显式标记了 BIDIR)。
另外,hwdef.dat 还定义了 DMA 的无共享与优先级策略(DMA_NOSHARE TIM3_UP TIM1_UP SPI1*与DMA_PRIORITY ...),保证电机 PWM 定时器更新与 SPI1(IMU 读取)的 DMA 流不互相干扰;define HAL_FRAME_TYPE_DEFAULT 12则把默认电机布局设为 Betaflight/X 风格的 Quad X,与 4 合 1 ESC 的常见接线方式匹配。
电池监控:内置电压传感器 + 4 合 1 ESC 电流传感器
README 的 Battery Monitoring 章节说明:该板有内置电压传感器和一个连接到 4 in 1 ESC 电流传感器的电流输入,电压传感器最高可支持 6S 锂电池。正确的电池参数为:
| 参数 | 值 | 说明 | |:-|:-|:-| |BATT_MONITOR| 4 | 电压+电流(ADC)监控模式 | |BATT_VOLT_PIN| 12 | 电压 ADC 引脚号 | |BATT_VOLT_MULT| 11 | 电压分压比 | |BATT_CURR_PIN| 13 | 电流 ADC 引脚号 | |BATT_CURR_MULT| 50 | 电流传感器换算系数(0.1A/ADC 单位对应 0.01A 分辨率的换算) |
README 强调这些值已在固件中设为默认,通常无需手动调整。hwdef.dat 给出了对应的硬件层定义,数值完全吻合:
# ADC1 PC2 BATT_CURRENT_SENS ADC1 SCALE(1) define HAL_BATT_CURR_PIN 12 define HAL_BATT_CURR_SCALE 50.0 PC3 BATT_VOLTAGE_SENS ADC1 SCALE(1) define HAL_BATT_VOLT_PIN 13 define HAL_BATT_VOLT_SCALE 11.0 PC5 RSSI_ADC ADC1 define BOARD_RSSI_ANA_PIN 15 define HAL_BATT_MONITOR_DEFAULT 4也就是说BATT_MONITOR/BATT_CURR_MULT/BATT_VOLT_MULT的默认值是由HAL_*宏在编译期注入的,这与 README "set by default in the firmware" 的说法一致。值得注意的细节是:README 只列了 5 个参数,而 hwdef 中 ADC1 上还定义了一个 RSSI 模拟输入(PC5,引脚 15),如果接收机带模拟 RSSI,可以接到该脚作为 RSSI 来源。
罗盘:无内置,使用外接 I2C 罗盘
BLITZ F745没有内置罗盘。README 说明可以把外接罗盘接到板上的 I2C 引脚。hwdef.dat 定义了 I2C 总线:
I2C_ORDER I2C1 I2C4 # I2C1 PB8 I2C1_SCL I2C1 PB9 I2C1_SDA I2C1 # I2C4 PD12 I2C4_SCL I2C4 PD13 I2C4_SDA I2C4并开启了外部罗盘探测:
# no built-in compass, but probe the i2c bus for all possible # external compass types define AP_COMPASS_PROBING_ENABLED 1 define HAL_I2C_INTERNAL_MASK 0 define HAL_COMPASS_AUTO_ROT_DEFAULT 2从这些定义看:固件启动时会主动扫描 I2C 总线上的常见罗盘芯片(AP_COMPASS_PROBING_ENABLED 1),HAL_I2C_INTERNAL_MASK 0表示板上没有占用 I2C 地址的内置磁力计,HAL_COMPASS_AUTO_ROT_DEFAULT 2为外接罗盘设置了默认朝向。因此外接罗盘只要接好 I2C 并上电,通常能被自动识别,但可能需要根据罗盘实际安装朝向修正COMPASS_OFS/朝向参数。
NeoPixel LED:第 9 路 PWM 与出厂预置参数
README 说明:板卡底部有一个 NeoPixel LED,已预配置为输出 ArduPilot 序列,它对应第 5 个 PWM 输出(按 README 的编号体系,即 LED 那一路)。
这个"预配置"的具体内容记录在 defaults.parm 中——该文件是随板型打包、烧录时自动应用的默认参数:
# setup for LEDs on chan9 SERVO9_FUNCTION 120 NTF_LED_TYPES 257 OSD_TYPE2 5SERVO9_FUNCTION 120:把第 9 路伺服功能设为串行 LED 输出,使第 9 路 PWM(TIM8,PC9)驱动 NeoPixel 灯带;NTF_LED_TYPES 257:启用 ArduPilot 的 LED 通知序列(如解锁/锁定、错误、飞行阶段等状态灯效),与 README "pre-configured to output ArduPilot sequences" 的描述对应;OSD_TYPE2 5:为第二路 OSD 设备指定驱动类型,与该板"SPI 上 MAX7456(OSD_TYPE=1)+ 串口 DisplayPort"的双 OSD 链路配置相配套。
因此对于 LED 部分,用户不需要做任何配置;若希望改用它做其他用途,则需要同时调整SERVO9_FUNCTION与相关 LED 参数。
固件加载:DFU 首烧与 .apj 后续升级
README 的 Loading Firmware 章节给出了完整流程:
- 首次烧录(DFU):按住板上的bootloader 按键,同时插入 USB 线,使板卡进入 DFU 模式;然后用你习惯的 DFU 工具加载
with_bl.hex固件("with_bl" 即 with bootloader,包含 ArduPilot bootloader)。 - 后续升级:一旦 bootloader 就位,之后即可用任何 ArduPilot 地面站软件(Mission Planner、QGC 等)通过 USB 升级,使用
.apj固件文件。
从 hwdef.dat 与 hwdef-bl.dat 可以看清该流程背后的 Flash 布局:
- hwdef.dat:
FLASH_RESERVE_START_KB 96——应用固件把前 96KB 让给 bootloader(注释原文 "bootloader takes first sector"); - hwdef-bl.dat:bootloader 自身从 0 偏移开始(
FLASH_RESERVE_START_KB 0),并通过FLASH_BOOTLOADER_LOAD_KB 96声明"bootloader 会把固件写到 96KB 处"; - 两者的
APJ_BOARD_ID都是AP_HW_BlitzF7,这决定了地面站下载固件时选择的具体板型文件名。
所以整个升级机制是:USB DFU 首烧一个"bootloader+固件"的合体镜像(with_bl.hex);之后 bootloader 常驻 0~96KB,地面站通过.apj文件把新固件刷到 96KB 之后,实现免硬件工具的常规升级。
小结
BLITZ F745 在 ArduPilot 中的整套硬件定义由四个文件构成,彼此严格对应:
| 文件 | 作用 | |:-|:-| | README.md | 面向用户的板卡说明(特性、引脚、串口表、参数) | | hwdef.dat | 主固件的硬件描述:引脚、串口默认协议、ADC、PWM、IMU、OSD、Dataflash | | hwdef-bl.dat | bootloader 的硬件描述与 Flash 布局 | | defaults.parm | 烧录时自动应用的板级默认参数(LED、OSD_TYPE2) |
接线与配置上的要点可归纳为:GPS 接UART3(不是 UART4)、接收机接UART2、OSD 屏走 SPI4 的 MAX7456 驱动(OSD_TYPE 1)、ESC 遥测用UART6、9 路 PWM 按 TIM3/TIM1/TIM8 三组统一速率且组内 DShot 全组一致、电池参数用固件默认值(BATT_MONITOR 4、引脚 12/13、倍率 11/50)、外接罗盘走 I2C 自动探测、NeoPixel LED 由第 9 路 PWM 默认驱动 ArduPilot 灯效。掌握以上内容后,即可在不查其他资料的情况下完成 BLITZ F745 的 ArduPilot 部署。
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考