|
01 前言 STM32CubeIDE的工程联调功能太好用了,特别是调试BOOT和APP的场景下,可以让大家清楚的看到程序是如何一步一步的从BOOT跳转到APP的,强烈的视觉冲击,让人眼前一亮,拨云见日,让bug无处遁形。02 准备 刚好手上有一块STM32H563的NUCLEO板,那我们就基于该开发板来一步一步展现IAP工程联调的美妙吧。首先通过STM32CubeMX准备IAP的BOOT和APP的示例工程。1 U4 @) D4 V# ^6 Q* i; U& a6 L2.1. 制作BOOT工程 # J2 a1 O) c1 g$ F$ _ e- t! H7 ` BOOT工程我们准备了常规的LED点灯程序,我们使能了ICACHE,配置了外部按键中断(并使能中断),以及板子上的三个LED灯(GPIO output),如下图所示。 5 p5 V; O+ i$ g. `: k6 N, Z- E# g
▲ 图1. BOOT工程STM32CubeMX的配置 ; f" d4 y# t8 k& e6 S: a 在生成的工程中,我们添加了按键检测,如果有按键按下,则进入IAP的跳转流程中,如下图所示。 * B! g0 A5 O2 I; T3 P6 L
▲ 图2. BOOT工程中的跳转代码 7 z$ c9 K+ m: J/ s9 L4 B9 y; S# i$ g 上述代码涉及到的变量定义和函数的实现如下图所示:
▲ 图3. BOOT工程相关的变量定义和函数实现 2.2. 制作APP工程! l( A: W$ P7 x" L) \3 E1 N* w APP工程的基本配置与BOOT工程完全一样,可以直接导入BOOT工程的STM32CubeMX的配置,故在此不重复展示。" q! d* Z% |0 l* U 9 Q) H; y! {1 D 在STM32CubeMX生成的工程中,APP工程还需要修改内存分散加载文件,以适配APP工程的内存偏移,如下图所示。
▲ 图4. 修改APP工程的内存分散加载链接文件 9 S9 V4 C0 N6 f4 V 修改代码里中断向量表的偏移地址,如下图所示:
▲ 图5. 修改APP工程的中断向量表偏移值
▲ 图6. APP工程的主循环 ! s% f. Q9 ~4 t( e+ a5 Z 03 调试配置 " H& i1 g- R5 ~7 C* t7 @ 准备好工程后,接下来我们就可以配置BOOT工程的调试选项了。在BOOT工程的调试选项中,新增APP工程的调试配置,如下图所示:. ^2 I, m5 k3 W a' x
▲ 图7. BOOT工程的Debug Configuration选项 注意:这里的Step5中,我们去掉了“Perform build”和“Download”两个选项,目的是仅仅加载APP工程的symbols,不需要重新编译和下载工程。如果勾选这两个选项,调试器建立连接时,会产生错误。3 p0 L2 c4 T) p 添加完APP的调试配置后,会在BOOT工程的调试选项中看到如下图所示配置:& P) ]& c/ L. a9 |! D9 t3 |' o- K 7 z- Z7 B) x3 p3 @, d
▲ 图8. BOOT工程的完整选项 在演示工程联调之前,我们先通过STM32CubeIDE下载APP的工程(在APP工程的Debug configuration中下载程序,或者通过STM32CubeProgrammer下载),然后再通过BOOT的调试选项进入到调试界面。" J. j( K# n" R z7 | ! U' t3 a8 E1 E3 x$ M 我们可以在BOOT工程中设置断点,同时也在APP的主循环中添加断点,然后运行程序,可以看到LD1在闪烁。 5 N9 l6 {+ }% ^( h S% T 此时按下开发板的蓝色用户按钮,可以看到LD2也会点亮1秒钟,然后工程停在BOOT工程的断点处。 / M Z! w( M2 U, O! n* e 在调试界面,我们配置调试为汇编单步执行,如下图所示:$ d4 b6 `/ F6 _
▲ 图9. 配置APP工程的汇编单步执行 这样我们就能清晰的看到程序从BOOT跳转到APP工程的Reset_Handler程序了。如果继续全速运行,可以看到LD1和LD2熄灭,LD3在间隔500毫秒闪烁。* M& i" B* q; Z ]) G- j : X$ W+ L; s; r7 a7 o. T9 v- | 04 小结 这里我列举出可能会出错的地方,方便大家顺利实验。9 t5 K- c3 H- B$ W' x 0 F2 v& L$ w2 l+ S4 j9 D 1. 在准备好BOOT和APP的工程后,需要先通过STM32CubeIDE将APP的程序下载到开发板上。 2. 本文档中的演示示例,BOOT工程在跳转到APP代码之前,需要失能ICACHE,因为在APP工程中,ICACHE的初始化函数如果判断到ICACHE是激活的话,会直接进入到错误处理函数,造成APP代码无法往后执行。 |
【STM32H5 评测】基础硬件加密与随机数性能 - STM32H5E5实测硬件AES加解密、HASH运算、TRNG真随机数输出速率与稳定性
【STM32H5 评测】NUCLEO-H5E5ZJ 使用 TrustZone 安全分区系统实践测试
【STM32H5 评测】CPU核心性能 - STM32H5E5跑 RTOS,观察任务切换速度、中断响应快慢
【STM32H5 评测】内存读写性能 - STM32H5E5实测Flash,SRAM读写速度,用DMA搬运大块数据
【NUCLEO-C562RE】OLED 显示
保姆级教程:CMake 工程导入 STM32CubeIDE 步骤
STM32CubeCLT 1.22.0新版本发布
【下载问题解决】关于ST官网下载软件问题解决
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
微信公众号
手机版