| |
|
开发:
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例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |