[开发工具] 实战经验 | STM32CubeIDE实用技巧之工程联调

[复制链接]
1146|8
 楼主| STM新闻官 发表于 2025-3-25 11:05 | 显示全部楼层 |阅读模式
本帖最后由 STM新闻官 于 2025-3-25 11:18 编辑

01前言
STM32CubeIDE的工程联调功能太好用了,特别是调试BOOT和APP的场景下,可以让大家清楚的看到程序是如何一步一步的从BOOT跳转到APP的,强烈的视觉冲击,让人眼前一亮,拨云见日,让bug无处遁形。

02准备
刚好手上有一块STM32H563的NUCLEO板,那我们就基于该开发板来一步一步展现IAP工程联调的美妙吧。首先通过STM32CubeMX准备IAP的BOOT和APP的示例工程。

2.1. 制作BOOT工程
BOOT工程我们准备了常规的LED点灯程序,我们使能了ICACHE,配置了外部按键中断(并使能中断),以及板子上的三个LED灯(GPIO output),如下图所示。
8560067e21ee8cd1ec.png
▲ 图1. BOOT工程STM32CubeMX的配置

在生成的工程中,我们添加了按键检测,如果有按键按下,则进入IAP的跳转流程中,如下图所示。
1702067e21fc9d3947.png
▲ 图2. BOOT工程中的跳转代码

上述代码涉及到的变量定义和函数的实现如下图所示:
4203467e21fd811934.png
▲ 图3. BOOT工程相关的变量定义和函数实现

2.2. 制作APP工程

APP工程的基本配置与BOOT工程完全一样,可以直接导入BOOT工程的STM32CubeMX的配置,故在此不重复展示。

在STM32CubeMX生成的工程中,APP工程还需要修改内存分散加载文件,以适配APP工程的内存偏移,如下图所示。
4858667e21fec485ce.png
▲ 图4. 修改APP工程的内存分散加载链接文件

修改代码里中断向量表的偏移地址,如下图所示:
3289667e21ff6c539f.png
▲ 图5. 修改APP工程的中断向量表偏移值

在APP的主循环中添加LD3的闪灯程序,如下图所示:
4401567e22001b090f.png

▲ 图6. APP工程的主循环


03调试配置
准备好工程后,接下来我们就可以配置BOOT工程的调试选项了。在BOOT工程的调试选项中,新增APP工程的调试配置,如下图所示:
7406867e22012bc38d.png

▲ 图7. BOOT工程的Debug Configuration选项

注意:这里的Step5中,我们去掉了“Perform build”和“Download”两个选项,目的是仅仅加载APP工程的symbols,不需要重新编译和下载工程。如果勾选这两个选项,调试器建立连接时,会产生错误。

添加完APP的调试配置后,会在BOOT工程的调试选项中看到如下图所示配置:
5133067e220214266d.png

▲ 图8. BOOT工程的完整选项

在演示工程联调之前,我们先通过STM32CubeIDE下载APP的工程(在APP工程的Debug configuration中下载程序,或者通过STM32CubeProgrammer下载),然后再通过BOOT的调试选项进入到调试界面。

我们可以在BOOT工程中设置断点,同时也在APP的主循环中添加断点,然后运行程序,可以看到LD1在闪烁。

此时按下开发板的蓝色用户按钮,可以看到LD2也会点亮1秒钟,然后工程停在BOOT工程的断点处。

在调试界面,我们配置调试为汇编单步执行,如下图所示:
38767e22036da68b.png

▲ 图9. 配置APP工程的汇编单步执行


这样我们就能清晰的看到程序从BOOT跳转到APP工程的Reset_Handler程序了。如果继续全速运行,可以看到LD1和LD2熄灭,LD3在间隔500毫秒闪烁。


04小结
这里我列举出可能会出错的地方,方便大家顺利实验。

1. 在准备好BOOT和APP的工程后,需要先通过STM32CubeIDE将APP的程序下载到开发板上。

2. 本文档中的演示示例,BOOT工程在跳转到APP代码之前,需要失能ICACHE,因为在APP工程中,ICACHE的初始化函数如果判断到ICACHE是激活的话,会直接进入到错误处理函数,造成APP代码无法往后执行。

▼▼▼
点击按钮下载《STM32CubeIDE实用技巧之工程联调》原文档。




xuanhuanzi 发表于 2025-3-25 11:17 | 显示全部楼层
要学会Bootloader开发技术。
 楼主| STM新闻官 发表于 2025-3-25 11:19 | 显示全部楼层
tpgf 发表于 2025-4-8 10:10 | 显示全部楼层
STM32CubeIDE是STMicroelectronics推出的集成开发环境,基于Eclipse和GDB工具链,支持STM32微控制器的开发、调试和编程
guanjiaer 发表于 2025-4-8 12:38 | 显示全部楼层
实时变量监控:使用Live Expressions功能(Window → Show View → Live Expressions)
磨砂 发表于 2025-4-8 18:03 | 显示全部楼层
在调试配置中可配置多个核心的调试会话
可以分别控制每个核心的运行状态
晓伍 发表于 2025-4-8 19:57 | 显示全部楼层
无法连接目标设备的时候可以检查物理连接,确认调试器供电正常,尝试降低SWD/JTAG时钟频率
八层楼 发表于 2025-4-8 21:50 | 显示全部楼层
可以进行变量监视
  • 添加监视表达式:Window → Show View → Expressions
  • 查看变量值:Window → Show View → Variables


观海 发表于 2025-4-9 17:51 | 显示全部楼层
调试启动后,IDE会自动切换到调试透视图,程序通常会在main()函数的开始处暂停
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:您的嵌入式应用将得益于意法半导体领先的产品架构、技术、多源产地和全方位支持。意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器。

1385

主题

1669

帖子

24

粉丝
快速回复 在线客服 返回列表 返回顶部