资讯详情

inav向STM32F401CCU开发板定制的过程(一)

入魔小记写在前面

好些年没到CSDN来记事吧。疫情来临的那一年,呆在家里真的很无聊。幸运的是,郊区没有人在乎空旷的地方,所以我买了一个KT板机和自稳飞控接收机开始玩固定翼。然后换了FS的一代神控i6.开源(山寨)F4V3S飞控慢慢进入魔法。

开始定制的原因:

因为记性不好,经常接错电源线。手里烧的飞行控制不是十块,而是七八块。本来,再买一次。结果,今年不知怎么的,芯片短缺引发,卖家买不到STM32F405,直接让连价格都没涨就断货了,想再烧几块,怕没有电装去飞场,就动了定制到其他板上的心思。

材料:

主控STM32F401CCU开发板,某宝买的,不到20大洋。

MPU6050六轴姿态传感器模块,不到10元。

BMP280大气压力传感器模块,贵10多元,便宜10元。

BN-880带罗盘的GPS模块(GNSS),原来有的。

TXS0108E电平转换模块(人懒,可以用模块解决,不要用三极管解决)不到5元。

目标:可实现固定翼模型飞行的自稳定控制(也应实现多轴飞机),并可基于GPS返航就好。

动手过程:

首先跑去github从inav将源码仓库分叉到自己手中:https://github.com/afilez/inav

然后切到了release_2.5.2分叉,分叉2.5.2-patch分叉后,代码在上面更改。

之所以选择2.5.2版本,因为我只有现成的下载交叉编译工具链环境,新版本改为更新的交叉编译工具链,必须经过漫长的下载过程,不想再来,我手中的配置工具 inav configurator也是2.5.2版的。

在开始定制之前,当然环境至少可以编译一个固件:

make TARGET=

我可以列出目前支持的飞行控制板目标,我最初使用它OMNIBUSF4.所以先试着编译OMNIBUSF4的固件。

make TARGET=OMNIBUSF4

一通编译链接之后,显示FLASH在使用内存空间时,输出输出hex文件了。

第一步,创造自己的target环境来了,这个target就先叫做FLYESF401吧。

cp -a src/main/target/OMNIBUSF4 src/main/target/FLYESF401

重命名main/main/FLYESF401/OMNIBUSF4V3.mk为main/main/FLYESF401/FLYESF401.mk

删除其他不必要的mk文件了。

这时候再次make TARGET=

就看到新的target了。

当然,这还是F4V3S毕竟,使用的固件只是复制环境。

第二步,修改main/target/FLYESF401/target.mk,修改这个板子要附加的源文件,可以看到里面有很多传感器驱动,MPU只留下你想要的,里面没有MPU6050,所以要加一行:

drivers/accgyro/accgyro_mpu6050.c\

其它的,明显不需要的罗盘驱动就删了,不需要的除BMP280以外的气压计驱动也被删除,只留下罗盘BN-880可能用到的QMC5883L或HMC5883L就够了。

暂时不需要OSD支持(MAX7456需要贴片焊,没有现成的开发模块),所以

drivers/max7456.c

也删掉了。

此时,您可以尝试编译和生成一次HEX文件,应用FLASH空间应该比原版小。

还是基于这里STM32F405RGT6 MCU是的,由于两个芯片的包装、引脚定义和内部功能不同,即使编译并燃烧STM32F在401上,也不能运行。

差异表现在:

引脚定义不一样,需要针对数据手册改。

内部定时器数量不同,代码需要相应调整。

外部总线的数量也不同,但这里只有一条I2C串联三个传感器并不重要。

重点:时钟晶振频率不同,F4V3用的是8MHz的晶振,F401用的是25MHz根据原始初始化代码,晶振直接超过F401能跑的84MHz内部主频。

重点:片内FLASH容量不同,F405有1MB的FLASH,而F401只有256K的FLASH,布局也不一样。芯片内部flash一定放不下F4V3的固件。

在整个过程中还有许多坑要踩,最终切断了所有不相关的功能:SD卡支持、OSD支持、仪表板、各种非PWM在256年,电调协议、固定翼自动降落功能、可调图传输频道和功率等。K的FLASH所需的功能放在空间中。

之后的定制过程即将继续。如果只是想直接用,可以直接用github下载自己编译的定制源代码。

标签: 2sd1164功率三极管

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台