经过接近5个月的努力,已经将betaflight 4.3.0 -rc2 从stm32 移植到 雅特力at32F437Zmt7,开发板已经对功能初步验证通过, 协同另外一个朋友(N.T.Jia)正在制作原型飞控板进行试飞验证。趁这段时间开一个坑,总结一下怎么把bf 移植到非STM32 系列的MCU上,以及遇到了哪些坑、怎么进行优化,以及后继如何对bf 固件进行定制等话题。
betaflight 代码结构
betaflight 的代码结构主要如下, 整体上我们移植需要关注的是 src/main/drivers 文件夹下的驱动,其他文件夹各自用途标注
+---docs -- bf 的文档文件夹,包括如何设置、搭建编译环境等,如果英语不太差建议多读
+---lib -- MCU 以及引用的一些外部lib 文件,mcu 的驱动库比如HAL、at32 的bsp放这里
| +---main
| | +---AT32F43x
| | +---BoschSensortec
| | | \---BMI270-Sensor-API
| | +---CMSIS --- ARM 核心的驱动,必须要
| | +---dyad
| | +---google --google的glc序列化协议
| | \---MAVLink --mavlink 数传协议
| \---test -- 自动化单元测试用例
+---make -- makefile 的主要文件夹, 包括target引入、特定MCU 的编译链接配置等, at32 需要新建一个 makefile文件
| \---mcu
+---src --主要源代码文件夹
| +---link -- gcc 的ld 文件夹,主要声明程序的内存、flash布局,需要根据mcu 仔细调整, 声明内存起始、flash起始、程序的 bss、ess 等段声明,bf 的配置数据管理体系 PG (flash 模拟eeprom )重点在这里。F4的重启到bootloader 也是在这里
+---main
| | +---blackbox 黑匣子代码
| | +---build 构建的一些设置
| | +---cli bf 地面站的cli 功能实现
| | +---cms OSD 设置菜单的实现
| | +---common 通用配置文件
| | +---config 读写config 的配置
| | +---drivers 驱动层 ,mcu和传感器的驱动代码,移植的代码主要在这里
| | | +---accgyro 加速度计与陀螺仪,基本不需要修改
| | | +---accgyro_legacy “史前”古老的加速度计和陀螺仪
| | | +---barometer 气压计驱动
| | | +---compass 罗盘驱动
| | | +---rangefinder 遥控测试用的
| | | \---rx 所有接收机的驱动,包括elrs、cc2500 、sbus 等,大部分不需要移植,ppm 、elrs 用到timer 需要修改
| | +---fc init、飞控核心代码无需移植
| | +---flight 飞行状态代码,无需移植
| | +---io 对于输入输出的抽象代码,不需要修改
| | | \---asyncfatfs
| | +---msc U盘模式,需要移植
| | +---msp bf configuator 和bf 串口配置通信的协议,无需移植
| | +---osd OSD 的抽象层无需修改
| | +---pg 配置信息读写库,无需修改
| | +---rx 接收机上层代码,无需修改
| | +---scheduler 核心调度器,无需修改
| | +---sensors 传感器抽象代码,无需修改
| | +---startup mcu 启动初始化代码,需要根据mcu配置 startup.s ,修改初始化静态变量、预加载内存变量等部分
| | +---target 硬件目标配置信息,需要根据板子自己定义
| | | +---AT32F437DEV 本次移植用的开发板target.h target.c target.mk 文佳
| +---test --单元测试代码
| | \---unit
| | \---timer_definition_unittest.include
| | +---drivers
| | \---pg
| \---utils --工具代码无需修改
\---unified_targets --统一化的固件配置信息,无需修改
\---configs
整体上代码的结构,可以看下
可以看到bf 代码呈沙漏型,中间的driver文件夹对上下层进行了抽象隔离,也便于bf 向各个mcu移植。 不过总体来说stm32 系列mcu 的结构变化不是很大,除了F7、H7 内存、DMA有部分的差异之外, 代码中夹杂着宏定义来实现1套代码不同target 打包
飞控制作视频专辑:
二木山人B站主页:
https://space.bilibili.com/29163672/video
群友制作试飞成功@现代野人:
国产芯片飞控升级4.3.1 同步优化
详解第二版国产芯片飞控硬件
新飞控首飞
国产芯穿越机飞控
开源资料
由于资料是处于持续更新中,建议到如下地址下载
固件等其他:可加入BF飞控移植自制交流群下载,QQ群号:428787190