STM32F103RCT6编写iNav1.7.3飞控固件底层开发

1、下载老版编译器:

我的整体开发环境是:Ubuntu20+conda(python2.7的虚拟环境)

gcc-arm-none-eabi-5_4-2016q3-20160926-linux.tar.bz2

这个是下载地址:下载 |GNU Arm 嵌入式工具链下载 -- Arm 开发者

下载后会出现名字乱码,改名后解压:

1. 重命名 (把奇怪名字改成标准名字)

mv gcc-arm-none-eabi-5_4-2016q3-20160926-linux,-d-,tar.bz2 gcc-arm-none-eabi-5_4-2016q3-20160926-linux.tar.bz2

2. 再次尝试解压

tar -xjf gcc-arm-none-eabi-5_4-2016q3-20160926-linux.tar.bz2

#3. 验证编译器功能:

这行命令的作用是:

在当前的 PATH 前面,临时插入老编译器的路径。

只有当前这个黑色窗口有效!

export PATH=HOME/embedded_tools/gcc-arm-none-eabi-5_4-2016q3/bin:PATH

arm-none-eabi-gcc --version查看编译器版本

2、获取iNav1.7.3固件源码

1. 回到你的主目录

cd ~

2. 克隆代码仓库 (这一步取决于网速,可能需要一点时间)

git clone https://github.com/iNavFlight/inav.git

3. 进入代码目录

cd inav

4. 穿越回 2017 年 (切换到 1.7.3 版本标签)

git checkout 1.7.3

综上便是通过github来获取得到的1.7.3的版本来适配STM32F103RCT6

3、创建虚拟环境开发源码

1. 创建一个名为 inav_build 的环境,指定 python 版本为 2.7

conda create -n inav_build python=2.7

2. 激活这个环境 (每次编译前都要运行这一句)

conda activate inav_build

3. 验证一下 (看看是不是变成了 Python 2.7.x)

python --version

4、修改和编译源码

1、如果要采用VScode的IDE环境进行代码修改,需要编写个配置文件,以免插件自动格式化和空格删除等影响文件编译:

touch ~/.vscode/setting.json

将以下代码粘贴进去,

bash 复制代码
{
    "editor.formatOnSave": false,
    "C_Cpp.formatting": "Disabled",
    "files.trimTrailingWhitespace": false
}

editor.formatOnSave: false -> 告诉 VS Code:"不管我按多少次 Ctrl+S,你都别动我的代码格式!"files.trimTrailingWhitespace: false -> 老代码里经常有很多没用的空格,git diff 会很敏感,关掉这个防止因为删空格导致文件变动。

做完这一步,你就可以放心大胆地用 VS Code 编辑 target.h 了,它现在就是个纯粹的文本编辑器,绝对不会乱动你的代码。

2、编写target.h文件:

确保路径文件没问题,只修改target.h文件的GPIO口来适配自己的版子的型号,这里我们的型号是STM32F103RCT6,根据原理图,将target.h文件内容修改为自己画的版子或者是买的最小系统板,重点关注修改晶振频率 (必改!) 找到 #define HSE_VALUE。原版通常是 12000000 (12M),你的板子是 8M、修改 LED 灯 (为了看状态)、确认 I2C 引脚 (连接 MPU6050)

3、编译文件

切换到inav目录下:cd ~/inav

激活环境:conda activate inav_build

确保编译环境:export PATH=HOME/embedded_tools/gcc-arm-none-eabi-5_4-2016q3/bin:PATH

删除obj文件:rm -rf obj(.hex文件保存位置)

编译文件:make TARGET=NAZE

text+data约等于flash要烧录的实际大小:这里换算是

text (代码段)126760 字节 (约 123 KB)

data (数据段)1524 字节 (约 1.5 KB)

bss (变量段)17204 字节 (这是占 RAM 的,不占 Flash)

最终结论: 固件真实大小是 text + data ≈ 125 KB 。 STM32F103RCT6 有 256 KB 的 Flash 空间。 空间占用率仅 50% 左右! 哪怕是 128KB 的 F103CBT6 也能勉强塞进去。这就彻底验证了 iNav 1.7.3 是可以在这个芯片上完美运行的!

5、Ubuntu烧录代码检验成果

1、Ubuntu 22 直接烧录(最快):

sudo apt update

sudo apt install stm32flash

2、确认端口: 插上你的 USB 转 TTL 模块:

ls /dev/ttyUSB*

3、解除锁定(类似于权限)

这里的 /dev/ttyUSB0 换成你刚才看到的

sudo stm32flash -u /dev/ttyUSB0

4、开始烧录:

-w: 写入

-v: 校验 (Verify)

-g 0x0: 烧录完从地址0开始运行 (可选)

export PATH=HOME/embedded_tools/gcc-arm-none-eabi-5_4-2016q3/bin:PATH

sudo stm32flash -w obj/inav_1.7.3_NAZE.hex -v /dev/ttyUSB0

看到进度条走到 100% 并且显示 Verification: OK,就是成功了!

USB转TTL有时容易出问题,这里推荐用STLINK-v2进行烧录(上图我就是用STlink进行烧录的),非常稳定,以下是操作步骤

1、硬件部分:

ST-LINK V2 (下载器) ABrobot 开发板 注意事项
SWCLK (或 CLK) CLK 时钟线
SWDIO (或 DIO) DIO 数据线
GND GND **必须接!**共地
3.3V 3V3 供电 (见下方警告)

2、Ubuntu上位机部分:

1>安装调试软件

OpenOCD 是 Linux 下最强大的开源调试软件,支持 ST-Link

sudo apt update

sudo apt install openocd

2、进行烧录:

cd ~/inav切换到目录下

解释:使用stlink配置文件,目标是stm32f1系列,执行烧录、校验、复位、退出

xk@ubuntu:~/inav$ sudo openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c "program obj/inav_1.7.3_NAZE.hex verify reset exit"

6、Window进行代码烧录

PS:也可以用Window进行软件烧录:

1、下载软件:FlyMcu (经典老牌) 对于 STM32F103 这种板子,FlyMcu 是最简单好用的。

去搜一下"FlyMcu 下载"或者去 STM32 论坛找一个。它只有一个 .exe 文件,免安装。

2. 操作步骤:

  1. 打开 FlyMcu。

  2. Port: 选择你的 USB 转 TTL 对应的 COM 口(去设备管理器确认)。

  3. Bps:115200 或者 256000

  4. Code File: 点击加载,选择你的 .hex 文件。

  5. 底部选项 (关键): 选择 "DTR的低电平复位,RTS高电平进BootLoader" (即使你是手动跳线,选这个通常也没错,或者选"不使用RTS/DTR")。

  6. 点击 "开始编程 (Start ISP)"

看到右边显示绿色进度条走完,提示"完成",就是成功了。

7、iNav地面站检查

地面站连接 (联机验证) 这是最终考核。要注意,烧的是 2017 年的固件,现代的 Configurator 连不上

  • 必须下载旧版地面站: INAV Configurator 1.7.21.7.3

    • 去 GitHub Releases 页面翻以前的版本下载。

    • 或者找 Cleanflight Configurator 2.x 版本也可以兼容。

  • 连接:

    • 用 USB 转 TTL 依然接在 PA9/PA10。

    • 电脑上打开 Configurator。

    • 选择端口,波特率选 115200

    • 点击 Connect

  • 成功标志:

    • 如果不报错进入了界面。

    • 拿起板子晃动,屏幕上的小飞机跟着实时转动

相关推荐
深圳市九鼎创展科技30 分钟前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计35 分钟前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
風清掦2 小时前
【江科大STM32学习笔记-05】EXTI外部中断11
笔记·stm32·学习
小龙报2 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机
范纹杉想快点毕业2 小时前
嵌入式与单片机开发核心学习指南——从思维转变到第一性原理的深度实践
单片机·嵌入式硬件
Industio_触觉智能2 小时前
瑞芯微RK3566开发板规格书,详细参数配置,型号EVB3566-V1,基于RK3566核心板SOM3566邮票孔封装
嵌入式硬件·开发板·rk3568·rk3566·核心板·瑞芯微
czwxkn2 小时前
4STM32(stdl)TIM定时器
stm32·单片机·嵌入式硬件
Love Song残响3 小时前
NVIDIA显卡终极优化指南
stm32·单片机·嵌入式硬件
qq_672592753 小时前
电源芯片为什么发热
单片机·嵌入式硬件
天天爱吃肉82183 小时前
【跨界封神|周杰伦×王传福(陶晶莹主持):音乐创作与新能源NVH测试,底层逻辑竟完全同源!(新人必看入行指南)】
python·嵌入式硬件·算法·汽车