INAV适配自己的飞控

news/2025/2/2 23:45:08/文章来源:https://www.cnblogs.com/LGQ-Wakkk/p/18697219

你自制的飞控大概率是基于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 commandFEATURE_BAT_PROFILE_AUTOSWITCH = 1 << 3,FEATURE_UNUSED_12 = 1 << 4,  //was FEATURE_MOTOR_STOPFEATURE_UNUSED_1 = 1 << 5,   // was FEATURE_SERVO_TILT was FEATURE_DYNAMIC_FILTERSFEATURE_SOFTSERIAL = 1 << 6,FEATURE_GPS = 1 << 7,FEATURE_UNUSED_3 = 1 << 8,        // was FEATURE_FAILSAFEFEATURE_UNUSED_4 = 1 << 9,          // was FEATURE_SONARFEATURE_TELEMETRY = 1 << 10,FEATURE_CURRENT_METER = 1 << 11,FEATURE_REVERSIBLE_MOTORS = 1 << 12,FEATURE_UNUSED_5 = 1 << 13,         // RX_PARALLEL_PWMFEATURE_UNUSED_6 = 1 << 14,         // RX_MSPFEATURE_RSSI_ADC = 1 << 15,FEATURE_LED_STRIP = 1 << 16,FEATURE_DASHBOARD = 1 << 17,FEATURE_UNUSED_7 = 1 << 18,         // Unused in INAVFEATURE_BLACKBOX = 1 << 19,FEATURE_UNUSED_10 = 1 << 20,        // was FEATURE_CHANNEL_FORWARDINGFEATURE_TRANSPONDER = 1 << 21,FEATURE_AIRMODE = 1 << 22,FEATURE_SUPEREXPO_RATES = 1 << 23,FEATURE_VTX = 1 << 24,FEATURE_UNUSED_8 = 1 << 25,         // RX_SPIFEATURE_UNUSED_9 = 1 << 26,         // SOFTSPIFEATURE_UNUSED_11 = 1 << 27,        // FEATURE_PWM_SERVO_DRIVERFEATURE_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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/878147.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【模拟电子技术】19-差分放大电路的构成

【模拟电子技术】19-差分放大电路的构成 我们知道在直接耦合放大电路中零点漂移是一个很困扰的问题(可以理解为静态工作点稳定问题),我们通过增加电阻Re来抑制温漂,前面我们也提到过有一种电路可以在直流的时候doubleRe,而交流的时候使得Re消失我们想要抑制这种现象,想到…

球钟问题

球钟问题,对栈和队列的实际应用球钟问题 1. 问题背景 ​ 球钟是一个利用球的移动来记录时间的简单装置。它有三个可以容纳若干个球的指示器:分钟指示器,五分钟指示器和小时指示器。 举例:若分钟指示器中有2个球,五分钟指示器中有6个球,小时指示器中有5个球,则时间为5:32…

本地部署deepseek

前言 如果你电脑配置不错,且期望不受网络限制也可以流畅使用deepseek,那就本地部署deepseek试试吧。下载并安装Ollama Ollama是一个开源的 LLM(大型语言模型)服务工具(就是大模型运行工具),用于简化在本地运行大语言模型,降低使用大语言模型的门槛,使得大模型的开发者…

【邮件安全】近期常见的钓鱼邮件(202411期)

本期主要分享自2024年11月至今几种典型的钓鱼邮件样本。希望通过这种分享,可以帮助广大用户提高警惕性,增强识别与防范钓鱼邮件的能力。 邮箱账户异常类 以下图为例,该钓鱼邮件伪造用户账户出现异常登录情况,引导用户点击“认证账户”按钮进入钓鱼页面。 下图是一封伪造用户…

AI医院:大语言模型在多智能体医疗交互模拟器中的表现如何?

近年来,人工智能(AI)技术,尤其是大语言模型(LLMs),在医学领域取得了显著进展。这些模型在静态医疗问答任务中表现优异,甚至在某些情况下能够媲美人类专家。然而,医学诊断并非单一静态的任务,而是一个动态、复杂的过程,涉及多轮互动和信息收集。 为了更全面地评估LLM…

万字综述|一文掌握大语言模型在生物信息学中的应用

随着大语言模型(LLMs)技术的飞速发展,其在自然语言处理(NLP)领域的成功应用逐渐扩展到了生物信息学领域。生物信息学作为一个跨学科的领域,涉及基因组学、蛋白质组学、药物发现等多个方向,LLMs的引入为这些领域带来了新的研究工具和方法。 2025年1月,佐治亚大学Tianmin…

自主做前端页面小工程07

通过使用elementui和js部分代码实现 其重点在于导航栏与弹窗和数据的回显与数据只可预览,基本完成 这是补发昨天学习记录

自主做前端小工程08

今天学习记录,完成部门经理页面,主要是分vue中的变量,创建了更多对话框页面和表单

【邮件安全】近期常见的钓鱼邮件(202412期)

# 钓鱼邮件样本 本期主要分享自2024年12月至今几种典型的钓鱼邮件样本。年关将至,大家要擦亮眼睛,谨防受骗! 带附件类钓鱼上图是一封带有html附件的钓鱼邮件,html附件中包含钓鱼页面。一旦用户打开html文件,可能会非法收集用户个人信息或引导用户输入账号密码等敏感信息。…

CTF-web过年加更

一、菜狗杯的无一幸免看代码可以发现$arr[]=1(在数组中追加一个数且赋值为1,永久为真),想要饶过它就需要让数组溢出(最大int数) int范围为32位:2的31次方-1=2147483647;64位:2的63次方-1=9,223,372,036,854,775,807 在顶部传入参数0=(以上2个看情况选)即可拿到flag二…

python 项目工程化开发

虚拟环境工具 安装poetry pip install -U peotry上述方式不行时 (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python加入环境变量初始化项目 安装cookiecutter pip install -U cookiecutter初始化项目 cd workspace cookiecutter …

Java-GUI编程-五子棋游戏

java-gui编程-五子棋小游戏 文件目录如下: 棋盘背景图如下: 运行效果如下: FiveChess类代码: package com.gui.fivechess;public class FiveChess { //主类,运行该类即可启动游戏 public static void main(String[] args) { FiveChessFrame ff = new FiveChe…