CORVON 743V2 完整指南:从开箱默认配置到固件烧录的 10 路电机飞控避坑手册
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
CORVON 743V2 是 ArduPilot 生态中一块面向多轴无人机的 STM32H743 飞控硬件定义:Cortex-M7 内核跑满 480 MHz,2 MB Flash、1 MB RAM,给出 10 路 DShot 电机输出(1-8 路可回读 ESC 遥测)加 2 路 PWM 舵机。读完后,你能直接说清它的出厂串口映射、传感器挂在哪条总线上、DShot 双向遥测到底哪几路能用,以及怎么本地编译并刷入 ArduCopter 固件。
CORVON 743V2 硬件规格速览
先看硬件底牌,后文所有小节都围绕这张表展开:
| 子系统 | 配置 |
|---|---|
| 主控 | STM32H743VIH6,Cortex-M7 @ 480 MHz,2 MB Flash / 1 MB RAM |
| 惯性测量 | ICM-42688P 与 BMI088 双 IMU,共挂 SPI3 |
| 气压/罗盘 | BMP581 气压计、IST8310 罗盘,均在内部 I2C2 总线 |
| 电机/舵机 | 10 路 DShot(1-8 路双向)+ 2 路标准 PWM 舵机 |
| 通信 | 8 路 UART + USB + FDCAN1(DroneCAN) |
| 电源监测 | 双路模拟电池电压/电流(BATT1、BATT2) |
| 模拟量 | 空速(AS 焊盘)、RSSI(RS 焊盘) |
| 存储 | microSD 卡(SDMMC1,4 位总线),用于机载日志与 SD 刷固件 |
| 指示 | 无源蜂鸣器、GPIO RGB 灯、WS2812 灯条接口 |
| 板卡 ID | AP_HW_CORVON743V2(数值 1229,见 board_types.txt) |
一个容易踩的点:板卡 ID 同时写在 hwdef.dat 和 hwdef-bl.dat 的APJ_BOARD_ID行里,bootloader 靠它判断该加载哪个固件,改任何自定义分支时别动它。
开箱即用:出厂串口映射与预设参数
这块板子出厂即是一套完整的 FPV 多轴配置,以下项目你不需要动任何参数:
- SERIAL0(USB-C):MAVLink2,接地面站的默认通道;
- SERIAL1(TELEM1,USART1,PA9/PA10):MAVLink2 电台口;
- SERIAL2(O4-AIR 6 针插座,USART2,PA2/PA3):预设为 MSP DisplayPort,直接插 DJI O4/O3 Air Unit 即可显示 OSD 画面,出厂
OSD_TYPE = 5已固化; - SERIAL3(GPS,USART3,PD8/PD9):GPS 数据口,I2C1 外部总线也从这里引出;
- SERIAL4(TELEM2,UART4,PA0/PA1):MAVLink2,预留给伴机电脑;
- SERIAL5(UART5 焊盘,PB13/PB12):留白给用户,默认无协议;
- SERIAL6(RCIN,USART6,PC6/PC7):遥控输入,支持 SBUS、CRSF、ELRS;
- SERIAL7(UART7 焊盘,PE8/PE7):预设为 ESC telemetry,配合前文 1-8 路双向 DShot 回读电调数据;
- SERIAL8(板载蓝牙,UART8,PE1/PE0):MAVLink2,波特率锁 115200。
两个设计细节值得记住:其一,O4-AIR 插座里有一根 SBUS 信号线被硬线接到了 USART6 的遥控输入上,也就是说 O4 既能出 OSD 画面,又能顺带当遥控器输入用;其二,多数蓝牙模块在配对模式下波特率锁定 115200,所以 SERIAL8 默认按这个值配置——hwdef.dat 里有专门注释说明这一点,你换蓝牙模块时别把波特率改成 57600 之类的值。
传感器布局:双 IMU、气压计与罗盘取舍
两颗 IMU 共享 SPI3 总线,各占一个片选:ICM-42688P 的 CS 在 PA15,BMI088 拆成陀螺(CS 在 PD5)和加速度(CS 在 PD4)两个 SPI 设备——这是 BMI088 双芯片结构的常规接法。三颗芯片都带 DRDY(数据就绪)中断线,分别接 PD10、PD11、PD6;采样时钟分别为 2 MHz/16 MHz 与 10 MHz。两颗 IMU 都声明了ROTATION_ROLL_180_YAW_90,即硬件做了翻转安装,软件已自动补偿,你不用关心。
I2C 总线分内、外两条:
- I2C2 是内部总线(
HAL_I2C_INTERNAL_MASK 1指定位 0),挂板载 BMP581 气压计(地址 0x46)和 IST8310 罗盘(地址 0x0E,安装朝向 YAW_90); - I2C1 是外部总线(PB6/PB7,带内部上拉),从 GPS 插座引出,外接罗盘经 ArduPilot 常规探测流程自动识别。
这里给一条明确建议:禁用板载 IST8310,在 GPS 接口外接罗盘。board README 的理由是电源系统的电磁干扰会污染板载磁强计;从 hwdef.dat 看,板载那颗默认启用位就是false,而外部总线同地址的 IST8310 是true,出厂行为已经是"用外部、弃板载"。你的 EKF 配置里如果只看到一颗外部罗盘,属于正常状态。
CAN 口只有一路 FDCAN1(PB8/PB9),按 DroneCAN 协议接外设(如 GPS、电调)。
输出能力:DShot 双向遥测能用哪几路
12 路输出分在四个定时器组,外加一路灯条:
- PWM 1-4(TIM1)与 5-6(TIM3):DShot 电机输出,双向,可回读 ESC 遥测;
- PWM 7-10(TIM4):DShot 电机输出,其中 7-8 双向、9-10 只能输出;
- PWM 11-12(TIM12):标准 PWM 舵机,
NODMA标记意味着没有输入捕获 DMA,不支持 DShot 遥测; - PWM 13(TIM2_CH1,PA5):WS2812 灯条数据信号。
为什么 9-10 路是单向的?hwdef.dat 的注释给出硬件级原因:TIM4 的第三、四通道没有 DMAMUX 输入捕获请求,无法回读 ESC 帧。另外每对通道(CH1/CH2、CH3/CH4)只共享一路输入捕获 DMA,所以每对里只标一个BIDIR,另一路仍能拿到遥测。
使用上记住两条硬约束:
- 同一个定时器组内的所有通道必须共用相同的输出频率和 DShot 模式,这是硬件限制,参数里改一路会影响全组;
- 电机接线按 M1-M10 焊盘走,1-8 路接电调后把电调遥测配到 SERIAL7,就能在地面站看到电调转速与温度。
所有电机/舵机脚同时也是 ArduPilot GPIO(M1-M12 对应 GPIO 50-61,灯条脚 M13 是 62),可用于继电器或 PINIO 场景。SW1-SW4(GPIO 70-73)是通用用户焊盘,不是安全开关,别按安全按钮的语义去接线。板载蜂鸣器是无源压电式,接在 TIM14 上。
灯光与指示:RGB 状态灯和 WS2812 灯条
板载 RGB 三路灯由 GPIO 直驱(PE5 红、PE6 绿、PE4 蓝),且是低电平点亮,交给 ArduPilot 的 AP_Notify 系统管理上锁/解锁/故障等状态,不需要你配置。
WS2812 灯条(俗称 NeoPixel,一串可编程 RGB 灯珠)从LED+ / LED_STRIP / LED-三针插座引出:LED+接 5V、LED_STRIP是数据信号、LED-接地。数据信号走 PWM 13(TIM2_CH1),选 TIM2 是因为系统 tick 定时器用了 TIM5,TIM2 刚好空闲。出厂已默认点亮——defaults.parm 里有SERVO13_FUNCTION 120把 PWM13 指派给串行灯,hwdef 的NTF_LED_TYPES = 455同时置位了板载 RGB、I2C 灯和 NeoPixel 三类位。
可操作结论:插上灯条即亮;如果你的灯珠多于 1 颗,把NTF_LED_LEN从默认值 1 改成实际数量,否则只有第一颗灯会亮。
电源与模拟输入:双路电池、空速与 RSSI
板子提供两组相互独立的模拟电池输入,主电源接B+/5VIN焊盘:
| 通道 | 焊盘 | 模拟引脚号 | 电压系数 | 电流系数 |
|---|---|---|---|---|
| BATT1 | BV/BI | 10 / 11 | 21.12 | 40.2 |
| BATT2 | B2V/B2I | 4 / 8 | 21.12 | 40.2 |
出厂参数为BATT_MONITOR = 4(模拟电压+电流模式)与BATT2_MONITOR = 4。关键提醒:21.12 和 40.2 只是随板硬件的参考值,实际分压比取决于你接入的电源监测模块的分压电阻和电流传感器灵敏度——换模块后务必按模块 datasheet 重算BATT_VOLT_MULT与BATT_AMP_PERVLT(BATT2 同理),这是这块板子最常见的调参错误来源。电压偏高/电流偏大的读数基本都可以先怀疑系数没对。
另外两个模拟输入:
- 模拟空速:
AS焊盘,ADC 模拟引脚 18,设ARSPD_TYPE = 2启用;hwdef 已通过HAL_DEFAULT_AIRSPEED_PIN 18预设引脚号,不用手动填ARSPD_PIN; - 模拟 RSSI:
RS焊盘,模拟引脚 3,设RSSI_TYPE = 1启用。
存储与恢复:SD 卡、Flash 分区和 bootloader
microSD 走 SDMMC1 总线,4 位数据位全引出(PC8-PC11 对应 D0-D3),在系统内挂载为 FAT 设备SDCD1,承载机载日志。构建时BUILD_ABIN True会让 waf 额外产出 ABIN 镜像,为 SD 卡刷固件路径做准备。
Flash(2048 KB)的分区约定是三条:
- bootloader 占0-128 KB(bootloader 侧
FLASH_BOOTLOADER_LOAD_KB 128指定固件加载点,固件侧FLASH_RESERVE_START_KB 128声明预留,两边严格对应); - 参数存储在sector 14(H7 扇区粒度 128 KB),大小 32 KB,刷固件不覆盖已保存参数;
- 其余空间留给固件本体。
bootloader 还有几条与恢复相关的行为(定义在 hwdef-bl.dat):
- 启动阶段只保留 USB 与 USART1 两个恢复控制台;
- 三个 IMU 片选脚(PA15/PD5/PD4)被钳在高电平,防止上电过程误驱动 IMU;
- LED 语义与固件不同:绿色 = 活动指示,蓝色 = bootloader 状态;
AP_BOOTLOADER_FLASH_FROM_SD_ENABLED 1开启SD 卡刷固件:把固件文件放进 SD 卡插板重启,不依赖 USB 也能救砖。
构建与烧录:两条日常路径 + 一条 DFU 恢复
本地编译只需两条命令(首次需先获取源码git clone https://gitcode.com/GitHub_Trending/ar/ardupilot):
./waf configure --board CORVON743V2 ./waf copter # 也可换成 plane / rover / sub产物落在build/CORVON743V2/ArduCopter/apj/下,其中.apj是带 bootloader 偏移的整机镜像,*_with_bl.hex是 bootloader 与固件的合刷镜像。
三条烧录路径按场景选:
- 日常升级:板子出厂自带 ArduPilot bootloader,任意 ArduPilot 地面站经 USB 或串口直接推送
.apj即可,无需外接下载器; - DFU 恢复 bootloader:bootloader 本身损坏时,进 DFU 模式用 STM32CubeProgrammer 刷
arducopter_with_bl.hex(或对应机型文件); - SD 卡刷固件:无 USB 条件时走 SD 卡路径,依赖前文的 ABIN 与
AP_BOOTLOADER_FLASH_FROM_SD_ENABLED 1。
避坑清单
- 板载 IST8310 默认已禁用,EKF 里看不到它属正常现象;要罗盘就在 GPS 接口外接,别把板载那颗打开。
- 换电源监测模块后,必须按实际电阻重算
BATT_VOLT_MULT/BATT_AMP_PERVLT,两组电池各自独立计算。 - PWM 9-10 路(TIM4 的 CH3/CH4)没有 DMAMUX 输入捕获请求,是纯输出,指望它们回读电调遥测会失望。
- 同一个定时器组(如 TIM1 的 1-4 路)必须保持相同 DShot 频率与模式,改参数时整组一起改。
- SW1-SW4 只是通用 PINIO/继电器脚,按安全开关的语义接线会出意外。
- 蓝牙模块(SERIAL8)波特率保持 115200,改高波特率会导致配对后失联。
- WS2812 灯珠数大于 1 时记得改
NTF_LED_LEN,默认 1 只点亮第一颗。 - 刷 bootloader 只能用
*_with_bl.hex走 DFU,直接刷.apj碰不到 bootloader 区。 - 自定义分支里改动板卡 ID(
APJ_BOARD_ID)会让 bootloader 拒载固件,先检查这里。
完整定义以 README、hwdef.dat 与 hwdef-bl.dat 为准,参数级细节可直接对照源码。
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考