拓冰建站拓冰建站
首页 / 资讯中心 / 正文

ArduPilot ChibiOS 硬件定义解析:Flywoo GOKU F405 AIO 飞控板在 ardupilot 中的完整支持实现

ArduPilot ChibiOS 硬件定义解析Flywoo GOKU F405 AIO 飞控板在 ardupilot 中的完整支持实现【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot本文以 ardupilot 仓库中 FlywooF405S-AIO 板卡 README 为主体系统讲解 Flywoo GOKU F405 1-2S 12A AIO内置 ELRS 2.4G 接收机这块 FPV 小飞机/穿越机航电板在 ArduPilot 中的硬件定义、UART/舵机/电池监测配置方式并结合仓库中的 hwdef.dat、defaults.parm 等文件说明底层实现细节。读完后你将掌握该板卡的串口映射、PWM 分组约束、默认参数含义以及 DFU 首刷与 .apj 升级两种固件加载流程。板卡概述与核心硬件特性Flywoo GOKU F405 AIO 是 Flywoo 出品的飞控一体板AIO All-In-One面向 1-2S 低压小尺寸多旋翼特点是将飞控、4 合 1 电调与 ELRS 2.4G 接收机集成在一块 30×30mm 的 PCB 上。README 列出的关键规格如下飞控部分MCUSTM32F405 32 位处理器1024KB FlashIMUMPU6000SPI 接口气压计BMP280板载 LEDWS2812×2USB VCP全部 UART 可同时使用USB 不占用 UART6 个硬件 UARTUART1、2、3、4、5、6内置 ELRS 2.4GHz 串口接收机同时支持外接串口接收机SBUS、iBus、Spektrum、Crossfire8MB 板载 Flash 用于 Blackbox 记录5V 电源输出最大 2.0A重量8.5g安装孔距标准 25.5/26.5mm。电调部分内置 12A BLHeli_S 4 合 1 电调固件版本 Z_H_30_REV16.7支持 BLHeli_S / BlueJay / J-ESC 三种电调协议支持 Oneshot125、Oneshot42、Multishot、DShot150、DShot300、DShot600输入电压 1-2S 锂聚电池持续电流 12A。从仓库结构看该板卡对应 ChibiOS HAL 的AP_HW_FlywooF405S_AIO板级 ID在 board_types.txt 中注册为板型号1099——这是 ArduPilot 固件与 Bootloader 识别板卡的唯一数字身份也是 .apj 固件文件名中 board id 的来源。硬件定义文件hwdef.datArduPilot 如何认识这块板ArduPilot 的 ChibiOS 后端通过hwdef.dat描述引脚、外设与默认驱动选择再经chibios_hwdef.py生成构建配置。hwdef.dat 中的关键定义与 README 规格一一对应MCU STM32F4xx STM32F405xx、FLASH_SIZE_KB 1024、OSCILLATOR_HZ 8000000外部晶振FLASH_RESERVE_START_KB 48Bootloader 占据 Flash 前 48KB固件从偏移处开始——这与后文的 DFU 首刷流程直接相关仅启用I2C_ORDER I2C1PB8 SCL / PB9 SDA即板外 I2C 连接器只有一路总线用于外接气压计与罗盘SPIDEV dataflash SPI3 ... FLASH1_CS MODE3 104*MHZBlackbox 数据 Flash 挂在 SPI3 上片选 PB3OSD 同样复用 SPI3SPIDEV osd SPI3 DEVID1 OSD1_CS MODE0 10*MHZ片选 PB14并设置HAL_OSD_TYPE_DEFAULT 1MAX7456 兼容驱动同时把 OSD 字体 font0.bin 打包进 ROMFS这与 README“OSD 使用 OSD_TYPE 1 (MAX7456 driver)”完全吻合。IMU 定义比 README 更宽README 只提到 MPU6000而 hwdef.dat 中同时定义了两个 SPI IMUSPIDEV icm42688 SPI1 DEVID1 GYRO1_CS MODE3 2*MHZ 16*MHZ SPIDEV mpu6000 SPI1 DEVID1 GYRO1_CS MODE3 1*MHZ 8*MHZ IMU Invensensev3 SPI:icm42688 ROTATION_ROLL_180 IMU Invensense SPI:mpu6000 ROTATION_YAW_90即同一 GYRO1_CSPB12引脚下既可识别 ICM-426882MHz/16MHz 模式也可识别 MPU6000两者还配置了不同的安装旋转。ArduCopter 的 ReleaseNotes.txt 中也记录了“FlywooF405S-AIO with alternative IMUs”这一演进说明该板卡后续增加了替代 IMU 的支持。气压计同理README 标称 BMP280hwdef.dat 中则同时探测 BMP280、DPS310、SPL06 三种 I2C 地址 0x76 的器件BARO BMP280 I2C:0:0x76 BARO DPS310 I2C:0:0x76 BARO SPL06 I2C:0:0x76多个产品系列的 ReleaseNotes.txt 明确记录了“FlywooF405S-AIO and -HD boards support SPL06 barometerPR:33779”可以确认 SPL06 支持是后期补充的实现事实。UART 映射六个串口与 USB 的分工README 的 UART 映射表图中以 Rn/Tn 标注Rn 为 UARTn 的接收脚、Tn 为发送脚| Name | Pin | Function | |:-|:-|:-| | SERIAL0 | COMPUTER | USB | | SERIAL1 | RX1/TX1 | USART1ELRSRX/TX 均支持 DMA | | SERIAL2 | TX2/RX2 | USART2GPSRX 支持 DMA | | SERIAL3 | TX3/RX3 | USART3RC 输入/输出支持 DMA | | SERIAL4 | TX4/RX4 | UART4TELEM | | SERIAL5 | TX5/RX5 | UART5 | | SERIAL6 | TX6/RX6 | UART6VTX |DMA 支持情况USART1 与 USART3 支持收发 DMAUART4 仅支持发送 DMAUSART2 仅支持接收 DMAUART5/UART6 不支持 DMA。对照 hwdef.dat 中的实际引脚定义SERIAL_ORDER OTG1 USART1 USART2 USART3 UART4 UART5 USART6 PA11 OTG_FS_DM OTG1 PA12 OTG_FS_DP OTG1 # USART1 (ELRS) PA10 USART1_RX USART1 PB6 USART1_TX USART1 define DEFAULT_SERIAL1_PROTOCOL SerialProtocol_RCIN # USART2 (GPS) PD5 USART2_TX USART2 NODMA PD6 USART2_RX USART2 define DEFAULT_SERIAL2_PROTOCOL SerialProtocol_GPS # USART3 (RX) PB10 USART3_TX USART3 PB11 USART3_RX USART3 # UART4 (TELEM) PA0 UART4_TX UART4 PA1 UART4_RX UART4 NODMA # UART5 PD2 UART5_RX UART5 NODMA # USART6 (VTX) PC6 USART6_TX USART6 NODMA PC7 USART6_RX USART6 NODMA几点值得注意的实现细节默认协议已按板卡用途预置DEFAULT_SERIAL1_PROTOCOL SerialProtocol_RCIN表明 SERIAL1USART1出厂即被识别为接收机串口对应内置 ELRS 接收机DEFAULT_SERIAL2_PROTOCOL SerialProtocol_GPS将 USART2 预置为 GPS 口。用户无需手动改协议即可开箱使用。UART5 只定义了 RX 脚PD2从源码结构看该脚仅用于单向接收无法作为完整串口使用。SERIAL0 即 USBOTG1与 README“USB 不占用 UART”的说法一致因此该板实际拥有 6 个 UART 加 1 个 USB 通道共 7 路串行通信能力。RC 输入只走串口不支持 PPMREADME 明确RC 输入配置在 UART1 或 UART3支持串口 RC 协议CRSF、SBUS 等该板不支持 PPM。这与 hwdef.dat 中DEFAULT_SERIAL1_PROTOCOL SerialProtocol_RCIN的默认设置一致——内置 ELRS 接收机接在 USART1 上上电后即以串口 RC 模式工作。配合 defaults.parm 的出厂默认参数# RC setup RC_OPTIONS 8704 SERIAL1_PROTOCOL 23RC_OPTIONS 8704与SERIAL1_PROTOCOL 23共同完成了串口 RC 的默认启用保证 ELRS 接收机无需用户干预即可接收遥控信号。PWM 输出与 DShot 分组约束README 说明该板最多 5 路 PWM 输出其中图中 ESC1ESC4 焊盘对应前 4 路电机输出全部 5 路均支持 DShot。PWM 被划分为 3 个组PWM 1-2Group 1PWM 3-4Group 2LEDGroup 3同一组内的通道必须使用相同的输出速率若组内任一通道使用 DShot则该组所有通道都必须使用 DShot。PWM 1-4 支持双向 DShot。这一约束在 hwdef.dat 的电机与 LED 定义中得到验证# MOTORS PB0 TIM3_CH3 TIM3 PWM(1) GPIO(50) # M1 PB1 TIM3_CH4 TIM3 PWM(2) GPIO(51) BIDIR # M2 PA3 TIM2_CH4 TIM2 PWM(3) GPIO(52) BIDIR # M3 PA2 TIM2_CH3 TIM2 PWM(4) GPIO(53) # M4 # LEDs PA9 TIM1_CH2 TIM1 PWM(5) GPIO(54) # M5 define AP_NOTIFY_GPIO_LED_1_ENABLED 1 PC14 LED0 OUTPUT LOW GPIO(90) define AP_NOTIFY_GPIO_LED_1_PIN 90可以看到 M1/M2 同挂 TIM3Group 1、M3/M4 同挂 TIM2Group 2、LED 通道独立挂 TIM1Group 3这正是“同组同速率”约束的物理来源同一硬件定时器决定了同组通道的刷新率必须一致。M2 与 M3 额外标注BIDIR即支持双向 DShot可读取电调遥测数据。此外板上还有一颗由 PC14 驱动的 WS2812 指示灯AP_NOTIFY 体系AP_NOTIFY_GPIO_LED_1_PIN 90配合 defaults.parm 中的SERVO5_FUNCTION 120与NTF_LED_LEN 2第 5 路 PWMPA9被预配置为 WS2812 LED 通道并挂接两枚灯珠——这解释了 README 中“Onboard LED: WS2812*2”与“LED: Group 3”的关系。出厂默认的电调协议设置为# ESC setup MOT_PWM_TYPE 6 SERVO_BLH_AUTO 1 SERVO_BLH_TRATE 0即默认 DShot 输出并启用 BLHeli_S 自动协议与双向遥测与板上内置 BLHeli_S 4 合 1 电调直接匹配。另外 hwdef.dat 末尾设置HAL_FRAME_TYPE_DEFAULT 12注释注明“Motor order implies Betaflight/X for standard ESCs”即默认机架类型为 Betaflight X 顺序的四轴用户可按实际电机布局调整 FRAME_CLASS/FRAME_TYPE。电池监测板载电压/电流检测的默认参数README 指出板上有内置电压传感器支持 2S6S 锂聚电池的电压监测注电压分压比按多 S 电池设计而电调供电为 1-2S正确的电池参数为BATT_MONITOR 4模拟电压电流检测BATT_VOLT_PIN 12BATT_VOLT_MULT 约 11BATT_CURR_PIN 13BATT_CURR_MULT 约 60.2“这些值在固件中默认设置通常无需调整。”这与 hwdef.dat 中的 ADC 定义精确对应# ADC1 PC2 BATT_CURRENT_SENS ADC1 SCALE(1) define HAL_BATT_CURR_PIN 12 define HAL_BATT_CURR_SCALE 60.2 PC3 BATT_VOLTAGE_SENS ADC1 SCALE(1) define HAL_BATT_VOLT_PIN 13 define HAL_BATT_VOLT_SCALE 11.0 define HAL_BATT_MONITOR_DEFAULT 4HAL_BATT_MONITOR_DEFAULT 4使固件自动选择 BATT_MONITOR4ANALOG 电压电流HAL_BATT_VOLT_SCALE 11.0与HAL_BATT_CURR_SCALE 60.2则分别对应 BATT_VOLT_MULT≈11 与 BATT_CURR_MULT≈60.2霍尔电流传感器的毫伏/安培换算系数。此外 PC0 还被定义为一个RSSI_ADC模拟输入BOARD_RSSI_ANA_PIN 10从定义看可用于接收 RSSI 信号。由于该板使用模拟电池监测minimize_fpv_osd.inc 还顺带禁用了 SMBUS 电池驱动以节省 Flash。罗盘无内置、依赖外接 I2CREADME 说明该板没有内置罗盘但提供外接 I2C 连接器。hwdef.dat 中用以下定义落实了这一策略# 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 屏蔽HAL_I2C_INTERNAL_MASK 0并对 I2C 总线做全类型罗盘探测AP_COMPASS_PROBING_ENABLED 1外接的常见罗盘芯片HMC5883、LIS3MDL 等以仓库 AP_Compass 支持的型号为准可被自动识别HAL_COMPASS_AUTO_ROT_DEFAULT 2预置了外接罗盘与主板的相对旋转角减少用户手动设置 COMPASS_AUTOROT 的负担。节省 Flash 的裁剪策略与自动构建目标1MB Flash 对 FPV 小飞控偏紧hwdef.dat 末尾通过 include 文件裁剪驱动# save some flash space include ../include/minimize_fpv_osd.inc AUTOBUILD_TARGETS Copter从 minimize_fpv_osd.inc 可以看到裁剪内容禁用光学流、SBus 输出、内燃机、高级失败保护、PrecisionLanding 等 FPV 小机不需要的模块仅保留四/六/八轴电机框架移除大部分测距仪驱动保留 Benewake TF02/TF03/TFmini/TFminiPlus但同时强制保留 Tramp 视频发射机支持与 CRSF 遥测文本支持。AUTOBUILD_TARGETS Copter表明该板卡的自动构建只产出 ArduCopter 固件。固件加载DFU 首刷与 .apj 日常升级README 给出的加载流程分两步首次刷写按住 Bootloader 按钮同时插入 USB使板卡进入 DFU 模式然后使用任意的 DFU 刷写工具加载with_bl.hex固件带 Bootloader 的固件后续升级首次固件载入后即可通过任意 ArduPilot 地面站软件用.apj固件文件升级。这一流程在 hwdef-bl.dat 中得到了对应实现# bootloader starts at zero offset FLASH_RESERVE_START_KB 0 # the location where the bootloader will put the firmware FLASH_BOOTLOADER_LOAD_KB 48 SERIAL_ORDER OTG1 PA13 JTMS-SWDIO SWD PA14 JTCK-SWCLK SWD PA9 LED_BOOTLOADER OUTPUT LOW define HAL_LED_ON 0Bootloader 固件自身从 Flash 0 偏移开始、仅保留 USBOTG1串口并配置了 SWD 调试脚PA13/PA14与 Bootloader 指示灯PA9。它把后续固件放到 48KB 处——这正是普通版 hwdef.dat 中FLASH_RESERVE_START_KB 48的由来两个文件互相印证了“Bootloader 占 48KB、固件从 48KB 开始”的 Flash 布局。板型号 1099 则保证地面站选择的 .apj 与板卡 Bootloader 匹配。相关板卡与后续演进仓库中另有一块同源板卡 FlywooF405HD-AIOv2其 hwdef.dat 直接include ../FlywooF405S-AIO/hwdef.dat复用本板的全部引脚定义说明两者硬件同源、仅个别差异如 IMU 配置在子目录中覆盖各产品ArduPlane/ArduCopter/ArduSub/ArduRover/AntennaTracker的 ReleaseNotes.txt 均记录了该板卡 SPL06 气压计支持的提交PR:33779以及更早期“FlywooF405S-AIO with alternative IMUs”的功能演进。小结Flywoo GOKU F405 AIO 在 ArduPilot 中的支持是一个典型的“README 规格 hwdef 落地 defaults.parm 预配置”三层结构README 面向用户说明串口映射、PWM 分组约束、电池参数与刷写流程hwdef.dat 面向构建系统给出精确的引脚、DMA、SPI、ADC 与默认驱动选择含 MPU6000/ICM-42688 双 IMU、三种气压计探测、104MHz 黑匣子 Flashdefaults.parm 则把串口 RC、DShotBLHeli_S、WS2812 LED 一次性预置好。对使用者而言只需按 1099 板型号下载 Copter 固件DFU 首刷 with_bl.hex 之后即可通过地面站日常升级绝大多数参数开箱即用。【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门