IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> inav向STM32F401CCU开发板定制的过程(一) -> 正文阅读

[嵌入式]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的,由于两个芯片的封装、引脚定义、内部功能都有差异,就算编译出来,烧录到STM32F401上,也是运行不起来的。

差异表现在:

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

内部定时器数量不一样,也需要对应调整代码。

外接的总线数量也不一样,不过这里只用一个I2C来串接三个传感器,所以不重要。

重点:时钟晶振频率也不一样,F4V3用的是8MHz的晶振,F401用的是25MHz的晶振,按原有的初始化代码,直接超出了F401能跑的84MHz内部主频。

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

整个过程还有很多坑要踩,最终砍掉了所有不相关的功能:SD卡支持、OSD支持、仪表台、各种非PWM的电调协议、固定翼自动降落功能、可调节图传频道与功率等等,才勉强在256K的FLASH空间里放下了需要的功能。

之后的定制过程待续,如果只是想直接拿来用,可以直接去github下载已经定制好的源码自己编译来用了。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-26 12:16:06  更:2021-08-26 12:18:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 18:37:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计