☰
INAV 板卡支持解析:KroozX 飞控的硬件特性、引脚映射与固件构建指南
2026/10/5 10:20:07 网站建设 项目流程
  • 无人机
  • 嵌入式
  • 智能硬件

【免费下载链接】inav

INAV: Navigation-enabled flight control software

项目地址:https://gitcode.com/gh_mirrors/in/inav
点击查看免费下载

KroozX 是 INAV(Navigation-enabled flight control software)官方支持的固定翼 / 多旋翼飞控板,本文以 docs/boards/KroozX.md 为骨架,结合仓库内KROOZX目标目录的源码与构建脚本,系统梳理这块板卡的硬件配置、引脚级映射、外设接线方式以及固件编译烧录流程。读完本文,你将能够根据源码理解 KroozX 每一路外设的实际引脚定义与限制,并能自行编译适配该板卡的 INAV 固件。

KroozX 硬件特性总览

原文档 docs/boards/KroozX.md 以列表形式给出了板卡的完整规格,以下逐项继承并整理:

类别规格
MCUSTM32F4RGT6(Cortex-M4F,1MB Flash / 192KB RAM)
IMUMPU6000(SPI 总线)、ICM20608(I2C 总线)
气压计MS5611
VCP支持(USB 虚拟串口)
硬件 UART5 路(其中 RX6 / RX1 / TX1 带板载反相器)
PWM 输出10 路
OSDMAX7456,带双视频通道切换开关
黑匣子MicroSD 卡槽(SD/SDHC,最大 64GB)
接收机PPM/SBUS,接在 RX6,带板载反相器
无线板载 HC-12 无线收发器
电压传感器支持,最高 6S 输入
电流传感器支持
集成稳压器5V 2000mA、10V 2000mA(带 LC 滤波)
按键无(USB 供电即进入 STM DFU 引导模式)
蜂鸣器驱动支持
RSSI 模拟/PWM 端口支持
SWD 调试端口支持(SWIO、SWCLK、RST 引脚)

该板卡定位于"高集成度航模飞控":把双 IMU、气压计、OSD 叠加芯片、SD 卡黑匣子、双路稳压电源、无线数传和 SBUS 反相器全部集成到一块板子上,同时保留了 10 路 PWM 输出,兼顾多旋翼与固定翼的使用场景。

硬件核心:STM32F405RGT6 与 KROOZX 构建目标

KroozX 采用 STM32F4RGT6,这是 Cortex-M4F 内核、1MB Flash / 192KB RAM 的 STM32F405 系列芯片。仓库中的构建配置与之完全对应:

  • 目标定义文件 src/main/target/KROOZX/CMakeLists.txt 中,仅有一行声明:target_stm32f405xg(KROOZX HSE_MHZ 16 SKIP_RELEASES)其中HSE_MHZ 16表示板载外部高速晶振为 16MHz,SKIP_RELEASES表示该目标不会进入官方发布版本,需要用户自行编译。
  • target_stm32f405xg是 cmake/stm32f4.cmake 中定义的函数,它为 STM32F405 系列统一注入了编译宏STM32F40_41xxx、STM32F405xx、MCU_FLASH_SIZE=1024、MCU_RAM_SIZE=192,并指定启动文件startup_stm32f40xx.s、链接脚本stm32_flash_f405xg和 SVD 描述STM32F405。
  • 该函数还带BOOTLOADER参数,将引导加载程序代码(src/bl/bl_main.c)一并链接进固件——这正是"USB 供电即进入 STM DFU 引导模式"的固件侧基础:无需物理按键,插上 USB 后 DFU 引导即可被触发,便于用户刷写固件。
  • 从 cmake/main.cmake 看,SKIP_RELEASES属性用于把该目标从发布构建中排除,因此使用 KroozX 板卡时需要手动编译而非直接下载官方 Release 固件。

固件编译要点

KroozX 属于 STM32F4 目标,编译流程与 INAV 其他 F4 目标一致:在 CMake 配置阶段指定目标名为KROOZX,即可生成对应固件。具体的编译环境搭建与参数可以参考仓库中的构建文档(如 Building Manual 与 Building in Linux.md),此处不再赘述。

传感器子系统:IMU、磁力计与气压计

板卡传感器的选型与接线在 src/main/target/KROOZX/target.h 中定义得十分清晰。

姿态传感器 IMU

原文档记录 KroozX 同时搭载两颗 IMU:

  • MPU6000,挂载在 SPI1 总线上,片选为PB2,SPI 时钟/数据引脚复用 SPI1(PA5SCK、PA6MISO、PA7MOSI);
  • ICM20608,挂载在 I2C 总线上。

target.h 中对 MPU6000 的配置为:

#define MPU6000_CS_PIN PB2 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW90_DEG_FLIP

其中IMU_MPU6000_ALIGN CW90_DEG_FLIP说明板载 MPU6000 的安装方向相对机体坐标系偏转了 90° 且翻转,固件通过该宏在姿态解算前完成坐标系对齐。若用户更换或维修 MPU 芯片,需注意保持该安装方向,否则会出现姿态翻转。

磁力计与气压计

  • 磁力计通过BUS_I2C1访问,且USE_MAG_ALL允许自动探测多种常见罗盘芯片;
  • 气压计选用 MS5611,挂载在BUS_I2C3上;
  • 传感器集合宏SENSORS_SET (SENSOR_ACC|SENSOR_MAG|SENSOR_BARO)表明该板默认同时启用加速度计、磁力计和气压计,为 INAV 的导航功能(地磁航向、气压定高)提供硬件基础。

对应的两条 I2C 总线引脚为:I2C1(PB6SCL /PB7SDA)、I2C3(PA8SCL /PC9SDA)。

串口体系:5 路硬件 UART、板载反相器与无线数传

KroozX 提供 5 路硬件 UART 加 1 路 USB VCP,SERIAL_PORT_COUNT 6即对应"5 UART + 1 VCP"的总端口数。各 UART 引脚定义如下(均来自 target.h):

串口TX 引脚RX 引脚反相器
UART1PA9PA10RX 反相器(PB13)
UART3PB10PB11无
UART4PC10PC11无
UART5PC12PD2无
UART6PC6PC7RX 反相器(PB12)

其中 UART1 与 UART6 的接收端带有板载反相器(INVERTER_PIN_UART1_RX PB13、INVERTER_PIN_UART6_RX PB12),这是为直接对接 SBUS、PPM 等反向电平信号而设计的:

  • 原文档明确指出PPM/SBUS 接在 RX6(即 UART6 的 RX,PC7),配合USE_UART_INVERTER宏,无需外接电平翻转电路即可直连 SBUS 接收机;
  • RX_CHANNELS_TAER表明固件默认的通道映射顺序为"油门-副翼-升降-方向"(TAER),这是大部分航模遥控器的常见设置。

上电预置:反相器与 OSD 切换引脚的默认状态

KroozX 定义了USE_HARDWARE_PREBOOT_SETUP,并在 src/main/target/KROOZX/hardware_setup.c 中实现initialisePreBootHardware():上电初始化阶段就把 UART1 的反相控制引脚 PB13 拉高(即默认启用 UART1 反相),并把 OSD 视频切换引脚OSD_CH_SWITCH(PC5)拉低。这段"先于主程序"的硬件预配置逻辑保证了接收机反相与视频通道状态在飞控正式运行前就是确定的,避免外设上电瞬间的引脚悬空。

板载无线数传 HC-12

原文档记载 KroozX 板载 HC-12 无线收发器。HC-12 是典型的串口透传模块(常见于 433/470MHz 频段),在板卡上通过某一组 UART 与飞控交换串口数据,可作为地面站远距离数传链路使用;具体挂接的串口号与波特率配置以板卡硬件设计为准,可在 INAV 配置界面中将其对应的 UART 口指定为 MSP 或同类型串口协议。

PWM 输出:10 路通道与 DShot 的引脚级限制

MAX_PWM_OUTPUT_PORTS 10与文档记载的"PWM outputs: 10"一致。具体的 10 路电机/舵机输出由 src/main/target/KROOZX/target.c 中的timerHardware表定义:

输出定时器引脚用途
PWM1TIM5 CH3PA2电机
PWM2TIM5 CH4PA3电机
PWM3TIM5 CH1PA0电机
PWM4TIM5 CH2PA1电机
PWM5TIM3 CH4PB1电机
PWM6TIM3 CH3PB0电机
PWM7TIM4 CH3PB8电机
PWM8TIM4 CH4PB9电机
PWM9TIM1 CH2NPB14电机
PWM10TIM12 CH2PB15电机

源码注释中还保留了 DShot 支持方面的宝贵提示,直接关系到用户能否在这些输出上使用 DShot 协议:

  • PWM5 与 PWM3 共用定时器通道资源冲突:注释明确指出 PWM5 与 PWM3 存在冲突,DShot 在此路不工作;
  • PWM7 与 PWM6 冲突:PWM7 与 PWM6 存在资源冲突,DShot 不工作;
  • PWM8 无 DMA:TIM4_CH4 以及 PB9 上唯一的备用定时器 TIM11_CH1 在 F405 上都没有请求线(request line),因此该输出不支持 DShot;
  • PWM9 / PWM10 的历史遗留修正:源码注释说明 TIM4 并不能到达 PB14/PB15 这两个焊盘,旧版本中这两路输出实际上是"静默失效"的;当前实现将 PWM9 改为 TIM1_CH2N,PWM10 改为 TIM12_CH2。其中 TIM12 在 F405 上没有 DMA,所以 PWM10 仅支持普通 PWM/舵机输出,不支持 DShot;PWM9 使用的 TIM1 通道 2 受 DMA2 Stream6 占用,同样受限制。

因此,在 KroozX 上启用 DShot 前,务必先对照上表确认所接输出引脚与上述限制,建议将需要 DShot 的电机优先安排在没有冲突的通道上。LED 灯带使用 TIM8 CH1(PC6),注意 PC6 同时也是 UART6 的 TX 引脚,串口与灯带功能存在引脚复用关系。

OSD:MAX7456 叠加芯片与双视频通道切换

KroozX 板载 MAX7456 视频字符叠加芯片,这是 FPV 领域使用最广泛的硬件 OSD 方案:

  • MAX7456 挂载在 SPI1 总线上,片选PC4,相关宏为USE_MAX7456、MAX7456_SPI_BUS BUS_SPI1、MAX7456_CS_PIN PC4;
  • 视频通道切换引脚OSD_CH_SWITCH PC5由hardware_setup.c在上电时拉低,配合板上的视频通道开关实现两路视频源(如摄像头 A/B)之间的硬件切换,并将 OSD 字符叠加到当前通道;
  • 默认功能集合DEFAULT_FEATURES中已包含FEATURE_OSD,即固件默认开启 OSD 特性;
  • 值得注意的是,target.h 中主动#undef USE_MSP_DISPLAYPORT,说明该目标明确禁用 MSP DisplayPort 类型的 OSD 方案,OSD 输出完全依赖 MAX7456 硬件叠加。

黑匣子记录:MicroSD 卡存储

KroozX 的 MicroSD 卡槽用于黑匣子(Blackbox)飞行日志存储:

  • SD 卡挂载在 SPI3 总线上:SDCARD_SPI_BUS BUS_SPI3、片选PA15,SPI3 引脚为PB3SCK /PB4MISO /PB5MOSI;
  • 卡检测引脚为PC13,且SDCARD_DETECT_INVERTED说明其检测电平是反向的;
  • ENABLE_BLACKBOX_LOGGING_ON_SDCARD_BY_DEFAULT使固件默认就把黑匣子日志写到 SD 卡上,开箱即可记录;
  • 文档标注支持 SD/SDHC,最大 64GB,配合 INAV 的 Blackbox 功能可对 PID、姿态、动力输出等进行高分辨率事后分析(黑匣子具体使用方式可参考 Blackbox.md)。

电源感知与供电设计:电压、电流、RSSI 与双路稳压

KroozX 的模拟量采集集中在 3 个 ADC 通道上(BOARD_HAS_VOLTAGE_DIVIDER+USE_ADC):

模拟量ADC 通道引脚
VBAT 电池电压ADC_CHN_1PC3
电流传感器ADC_CHN_2PC2
RSSI(模拟/PWM)ADC_CHN_3PC0
  • 电压分压电路支持最高 6S 锂电池输入(文档记载 up to 6S),对应默认功能集合中的FEATURE_VBAT与FEATURE_CURRENT_METER,即固件默认启用电压回传与电流计;
  • 板载双路稳压器输出 5V 2000mA 与 10V 2000mA(后者带 LC 滤波),可为图传、接收机、舵机等外设提供干净、大电流的供电;
  • RSSI 既支持模拟量采集(ADC),也可在对应的 IO 上接收 PWM 形式的 RSSI 信号,适配不同接收机类型。

指示灯、蜂鸣器、灯带与 IO 资源

  • LED:LED0 PA14(红色)、LED1 PA13(绿色),用于显示解锁/告警/连接状态;
  • 蜂鸣器:BEEPER PC1,且BEEPER_INVERTED说明蜂鸣器驱动为反向电平,对应文档的"Buzzer driver: Yes";蜂鸣器用法可参考 Buzzer.md;
  • 可编程 LED 灯带:USE_LED_STRIP+WS2811_PIN PC6,支持 WS2811/WS2812 可寻址灯带,通过 TIM8 CH1 输出时序(如前所述,PC6 与 UART6 TX 复用);
  • BLHeli 直刷接口:USE_SERIAL_4WAY_BLHELI_INTERFACE使能通过飞控串口对 BLHeli 电调进行 4-way 参数读写/刷写;
  • IO 掩码:TARGET_IO_PORTA/B/C 0xffff与TARGET_IO_PORTD (BIT(2))声明了三个 GPIO 端口全部参与资源管理、D 端口仅 PD2 可用,这也解释了为何 UART5 的 RX 恰好使用 PD2。

烧录、接线与使用注意事项

  1. DFU 刷写(无按键设计):KroozX 不带物理按键,插上 USB 供电即自动进入 STM 的 DFU 引导模式。用户可以在 INAV Configurator 或使用 STM32 官方 DFU 工具直接烧录固件;由于目标带BOOTLOADER引导代码,也支持通过飞控自身的引导加载程序在线升级。DFU 相关流程可参考 Broken USB recovery.md 与 USB Flashing.md。
  2. 固件自行编译:由于SKIP_RELEASES标记,KroozX 固件需要手动编译。在 CMake 阶段以KROOZX为目标名即可得到该板固件(参考 Cmake usage.md)。
  3. 默认功能集合:DEFAULT_FEATURES为FEATURE_TX_PROF_SEL | FEATURE_VBAT | FEATURE_CURRENT_METER | FEATURE_OSD,即开箱默认启用遥控器配置档位选择、电池电压、电流计与 OSD 四项功能;接收机默认类型为RX_TYPE_SERIAL(串行接收机),通道顺序默认 TAER。
  4. DShot 通道选择:如前文所述,10 路 PWM 中 PWM5/PWM7/PWM8/PWM10 存在冲突或缺失 DMA,启用 DShot 前务必对照 target.c 中的注释选择可用通道。
  5. 引脚复用提醒:PC6 同时承担 UART6 TX 与 LED 灯带输出,PA15 既是 SD 卡片选也参与 IO 资源管理,配置外设时应在资源(Resource)视图中确认占用关系。

小结

KroozX 是一块外设高度集成的 STM32F405 飞控:双 IMU + MS5611 气压计构成导航感知基础,5 路硬件 UART 配合两路板载反相器简化了 SBUS/PPM 接收机与数传的接线,MAX7456 硬件 OSD 与 MicroSD 黑匣子让图传与事后分析开箱即用,10 路 PWM 输出则兼顾了多旋翼与固定翼的装机需求。通过 src/main/target/KROOZX/target.h、target.c 与 hardware_setup.c 的源码对照,用户可以精确掌握每一路引脚的归属与限制,从而在装机、排故和自定义固件时做到心中有数。

  • 无人机
  • 嵌入式
  • 智能硬件

【免费下载链接】inav

INAV: Navigation-enabled flight control software

项目地址:https://gitcode.com/gh_mirrors/in/inav
点击查看免费下载

相关推荐

上一篇:kotlinx.coroutines 集成模块指南:Guava、SLF4J 与 Google Play Services 异步 API 的无缝互操作
下一篇:Rust 中的"继承"实现指南:以 Traits 与组合(Composition)替代经典继承——来自 awesome-low-level-design 的 OOP 实践解析

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询