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

  • 成功标志:

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

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

相关推荐
小郭团队5 小时前
1_6_五段式SVPWM (传统算法反正切+DPWM2)算法理论与 MATLAB 实现详解
嵌入式硬件·算法·matlab·dsp开发
小郭团队5 小时前
1_7_五段式SVPWM (传统算法反正切+DPWM3)算法理论与 MATLAB 实现详解
开发语言·嵌入式硬件·算法·matlab·dsp开发
爱潜水的小L5 小时前
自学嵌入式day49,arm led、蜂鸣器和bsp
arm开发·单片机·嵌入式硬件
物联网牛七七7 小时前
stm32内核寄存器和外设寄存器
stm32·单片机·嵌入式硬件
嗯嗯=7 小时前
STM32单片机学习篇3
stm32·单片机·学习
梁洪飞7 小时前
通过链接文件和Start.S学习armv7
linux·arm开发·嵌入式硬件·学习·arm
m0_555762909 小时前
STM32H7 + VS Code + OpenOCD + STLink 完整配置教程
stm32·单片机·嵌入式硬件
飞来客isdn9 小时前
关于单片机与上位机串口通信的问题
单片机·嵌入式硬件·mcu
为何创造硅基生物9 小时前
STM32 串口的中断,空闲中断DMA
stm32·单片机·嵌入式硬件