INAV适配自己的飞控

你自制的飞控大概率是基于STM32F405,如果不是,对于其它飞控的适配也基本一致。
对于飞控的适配,就是简单修改一下硬件描述文件,更为复杂的是编译环境的搭建等等。
这里是对硬件描述文件修改的笔记以及教程。

硬件描述文件位置:
src/main/target/*
大多数都是从MATEKF405移植的,例如正点原子F405飞控等等,我们也基于这个修改。
在target目录下找到MATEKF405文件夹
里面有:
CMakeLists.txt:用于控制这部分是否编译
target.c: 主要为定时器资源的描述
target.h: 主要硬件描述的位置

首先是这个CMakeLists.txt:

target_stm32f405xg(MATEKF405)
target_stm32f405xg(MATEKF405OSD)

这部分逻辑很简单就是当你输入make MATEKF405的时候编译系统知道要编译什么

target.h

LED

#define LED0                    PB9
#define LED1                    PA14

这里定义LED的引脚

BEEPER蜂鸣器

#define BEEPER                  PC13
#define BEEPER_INVERTED

这里定义蜂鸣器的引脚,根据实际情况决定是否需要反相,无需反相去掉定义即可

SPI

#define USE_SPI
#define USE_SPI_DEVICE_1

#define SPI1_SCK_PIN            PA5
#define SPI1_MISO_PIN   	    PA6
#define SPI1_MOSI_PIN   	    PA7

这部分是指定使用哪个SPI外设,例如SPI1 SPI2等等,通过USE_SPI_DEVICE_1指定对应的总线编号,后面给出具体引脚的定义。注意这里不指定CS引脚,CS引脚属于具体芯片定义的部分,在后面会指定。

IMU

大部分IMU都是挂载在SPI总线上的
MATEKF405支持两种IMU:MPU6500 MPU6000
首先是选择你使用的IMU:

#define USE_IMU_MPU6500
#define USE_IMU_MPU6000

之后是指定IMU所在的SPI总线以及CS引脚:

#define MPU6500_SPI_BUS         BUS_SPI1
#define MPU6000_SPI_BUS         BUS_SPI1
#define MPU6500_CS_PIN          PC2
#define MPU6000_CS_PIN          PC2

最后是指定IMU的焊接方向:

#define IMU_MPU6500_ALIGN       CW180_DEG
#define IMU_MPU6000_ALIGN       CW270_DEG

IIC

    #define USE_I2C
    #define USE_I2C_DEVICE_1
    #define I2C1_SCL                PB6
    #define I2C1_SDA                PB7

定义使用IIC外设并且指定具体总线编号 这里面指定使用IIC1
之后定义IIC1使用的引脚
随后需要定义一下默认的IIC总线:

#define DEFAULT_I2C_BUS         BUS_I2C1

BARO气压计

#define USE_BARO
#define BARO_I2C_BUS                DEFAULT_I2C_BUS

指定使用气压计并且指定所在IIC总线
指定支持的气压计型号:

#define USE_BARO_BMP280
#define USE_BARO_MS5611
#define USE_BARO_BMP085
#define USE_BARO_DPS310
#define USE_BARO_SPL06

只要可能用到,都可以选上,到时候可以在上位机在线选择

MAG磁力计

指定使用磁力计并且指定所在IIC总线

#define USE_MAG
#define MAG_I2C_BUS                 DEFAULT_I2C_BUS
#define USE_MAG_ALL

上述是支持所有磁力计

OPFLOW 光流

#define USE_OPFLOW
#define USE_OPFLOW_MSP

RANGEFINDER测距仪

#define USE_RANGEFINDER
#define USE_RANGEFINDER_MSP

指定RANGEFINDER所在IIC总线:

#define RANGEFINDER_I2C_BUS         DEFAULT_I2C_BUS

LED STRIP LED灯带

#define USE_LED_STRIP
#define WS2811_PIN              PB6

目前的LED灯带应该是支持WS2811 WS2812。但是都写作WS2811。
这里指定对应的引脚就可以了

UART&VCP

VCP(USB虚拟串口)

需要指定USB VBUS检测引脚,以及是否启用USB VBUS检测,这个主要是用于检测到连接到电脑。

#define USE_VCP
#define VBUS_SENSING_PIN        PB12
#define VBUS_SENSING_ENABLED

硬件串口

#define USE_UART1
#define UART1_RX_PIN            PA10
#define UART1_TX_PIN            PA9

#define USE_UART2
#define UART2_RX_PIN            PA3
#define UART2_TX_PIN            PA2

#define USE_UART3
#define UART3_RX_PIN            PC11
#define UART3_TX_PIN            PC10

#define USE_UART4
#define UART4_RX_PIN            PA1
#define UART4_TX_PIN            PA0

#define USE_UART5
#define UART5_RX_PIN            PD2
#define UART5_TX_PIN            PC12

指定使用的串口外设以及对应的引脚。

软件串口

#define USE_SOFTSERIAL1
#define SOFTSERIAL_1_RX_PIN      PA1  //RX4
#define SOFTSERIAL_1_TX_PIN      PA0  //TX4

#define USE_SOFTSERIAL2
#define SOFTSERIAL_2_RX_PIN      PA2  //TX2
#define SOFTSERIAL_2_TX_PIN      PA2  //TX2

指定IO模拟的软件串口
最后是定义所有串口的总数 包括VCP、硬件串口、软件串口,上述的总共有8个:

#define SERIAL_PORT_COUNT       8

FEATURE

设置默认FEATURE:

#define DEFAULT_FEATURES            (FEATURE_OSD | FEATURE_CURRENT_METER | FEATURE_VBAT | FEATURE_TELEMETRY )

所有支持的FEATURE: "fc/config.h"

typedef enum {
    FEATURE_THR_VBAT_COMP = 1 << 0,
    FEATURE_VBAT = 1 << 1,
    FEATURE_TX_PROF_SEL = 1 << 2,       // Profile selection by TX stick command
    FEATURE_BAT_PROFILE_AUTOSWITCH = 1 << 3,
    FEATURE_UNUSED_12 = 1 << 4,  //was FEATURE_MOTOR_STOP
    FEATURE_UNUSED_1 = 1 << 5,   // was FEATURE_SERVO_TILT was FEATURE_DYNAMIC_FILTERS
    FEATURE_SOFTSERIAL = 1 << 6,
    FEATURE_GPS = 1 << 7,
    FEATURE_UNUSED_3 = 1 << 8,        // was FEATURE_FAILSAFE
    FEATURE_UNUSED_4 = 1 << 9,          // was FEATURE_SONAR
    FEATURE_TELEMETRY = 1 << 10,
    FEATURE_CURRENT_METER = 1 << 11,
    FEATURE_REVERSIBLE_MOTORS = 1 << 12,
    FEATURE_UNUSED_5 = 1 << 13,         // RX_PARALLEL_PWM
    FEATURE_UNUSED_6 = 1 << 14,         // RX_MSP
    FEATURE_RSSI_ADC = 1 << 15,
    FEATURE_LED_STRIP = 1 << 16,
    FEATURE_DASHBOARD = 1 << 17,
    FEATURE_UNUSED_7 = 1 << 18,         // Unused in INAV
    FEATURE_BLACKBOX = 1 << 19,
    FEATURE_UNUSED_10 = 1 << 20,        // was FEATURE_CHANNEL_FORWARDING
    FEATURE_TRANSPONDER = 1 << 21,
    FEATURE_AIRMODE = 1 << 22,
    FEATURE_SUPEREXPO_RATES = 1 << 23,
    FEATURE_VTX = 1 << 24,
    FEATURE_UNUSED_8 = 1 << 25,         // RX_SPI
    FEATURE_UNUSED_9 = 1 << 26,         // SOFTSPI
    FEATURE_UNUSED_11 = 1 << 27,        // FEATURE_PWM_SERVO_DRIVER
    FEATURE_PWM_OUTPUT_ENABLE = 1 << 28,
    FEATURE_OSD = 1 << 29,
    FEATURE_FW_LAUNCH = 1 << 30,
    FEATURE_FW_AUTOTRIM = 1 << 31,
} features_e;

接收机相关配置

接收机接口类型

指定默认类型:

#define DEFAULT_RX_TYPE         RX_TYPE_SERIAL

所有支持的接收机接口类型:"rx/rx.h"

typedef enum {
    RX_TYPE_NONE = 0,
    RX_TYPE_SERIAL,
    RX_TYPE_MSP,
    RX_TYPE_SIM
} rxReceiverType_e;

接收机类型/协议类型:

指定默认协议类型:

#define SERIALRX_PROVIDER       SERIALRX_SBUS

所有支持的协议:

    SERIALRX_SPEKTRUM1024 = 0,
    SERIALRX_SPEKTRUM2048,
    SERIALRX_SBUS,
    SERIALRX_SUMD,
    SERIALRX_IBUS,
    SERIALRX_JETIEXBUS,
    SERIALRX_CRSF,
    SERIALRX_FPORT,
    SERIALRX_SBUS_FAST,
    SERIALRX_FPORT2,
    SERIALRX_SRXL2,
    SERIALRX_GHST,
    SERIALRX_MAVLINK,
    SERIALRX_FBUS,
    SERIALRX_SBUS2,

指定接收机默认的端口:

#define SERIALRX_UART           SERIAL_PORT_USART2

模拟 ADC

指定使用的ADC外设以及DMA

#define USE_ADC
#define ADC_INSTANCE                ADC1
#define ADC1_DMA_STREAM             DMA2_Stream0

指定使用的ADC通道:

#define ADC_CHANNEL_1_PIN           PC5
#define ADC_CHANNEL_2_PIN           PC4
#define ADC_CHANNEL_3_PIN           PB1

为通道赋予功能:

#define VBAT_ADC_CHANNEL            ADC_CHN_1
#define CURRENT_METER_ADC_CHANNEL   ADC_CHN_2
#define RSSI_ADC_CHANNEL            ADC_CHN_3

IO资源

指定此型号的MCU含有哪些引脚资源:
例如对于STM32F405RGT6 GPIOA GPIOB GPIOC全部引出 GPIOD仅仅引出PD2

#define TARGET_IO_PORTA         0xffff
#define TARGET_IO_PORTB         0xffff
#define TARGET_IO_PORTC         0xffff
#define TARGET_IO_PORTD         (BIT(2))

common.h

TELEMETRY遥测输出

启用遥测:

#define USE_TELEMETRY

具体指定支持的遥测协议类型:

#define USE_TELEMETRY_LTM
#define USE_TELEMETRY_SIM
#define USE_TELEMETRY_MAVLINK
#define USE_TELEMETRY_SRXL
#define USE_TELEMETRY_GHST
#define USE_TELEMETRY_IBUS
#define USE_TELEMETRY_SMARTPORT
#define USE_TELEMETRY_CRSF
#define USE_TELEMETRY_JETIEXBUS
#define USE_TELEMETRY_SBUS2
#define USE_TELEMETRY_HOTT
#define USE_TELEMETRY_FRSKY_HUB
posted @ 2025-02-02 23:40  LGQ_Wakkk  阅读(1063)  评论(0)    收藏  举报