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
浙公网安备 33010602011771号