
5.1 初学者重要提示$ h7 w& R' ~6 G 如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。6 e( j: I+ U. o* \+ I8 q% [ 如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。 MDK曾发布的STM32F1,F407,F429和F7的所有调试方法的设置细节及其注意事项,同样适用于STM32H7。 MDK5调试过程中容易崩溃的问题,请看本章5.4小节,比较重要。$ Y9 _' v: y7 N! ^/ s ^, ? JLINK无法下载解决思路以及常见问题整理,适用于其它LINK。& W, V0 N: I- n3 `7 B 5.2 使用MDK调试和下载程序设置(JLINK)1 H5 ~% t: S3 k0 b' Y' V+ G" _' p5 a8 x 调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。 5.2.1 开发板和JLINK的接线图 开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板:! P$ p* A" V" f3 z* i ![]() 9 v% Z/ y0 r' ~3 M4 i 注意转接板不要插反了:9 I, d# L6 ~, t( o8 r0 i/ R6 X q6 V3 i6 H- `: ^$ H ![]() 5.2.2 设置Options里面的Debug选项 b) f$ D2 k, r: w Debug选项主要用于调试设置。 ![]() 打开Settings设置选项,设置完毕后别忘了点击确定。3 Y- h( Y' y& X# t! ` Z0 I ![]() ' m2 K$ P0 }% }. j. c d m, \ 5.2.3 设置Options里面的Utilities选项 Utilities选项主要用于程序下载设置。: ?6 T2 ]/ D1 \7 S ![]() 3 S# F. D8 L v3 C+ k9 p; s9 M2 W& }: C 5.2.4 程序下载; x i/ O4 a& N 前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里就可以下载了:7 e3 \% i1 K% L2 K ![]() 0 J) A9 D+ f X& N 下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:/ m0 J+ m# Y* d9 J$ T$ ?+ m ![]() 5.3 使用MDK调试和下载程序设置(STLINK) 调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。 " G% {+ f/ W6 D- c8 z8 u) Q" r2 D 5.3.1 开发板和STLINK的接线图 开发板接上STLINK的效果图如下: ![]() W/ U. H0 _/ b# N7 ` 如果是下面这种STLINK,需要接上转接板:9 r7 ?7 M+ U. b1 H D- u7 Y! Y( U# L" U0 l; C ![]() ![]() + w3 G! f9 l& X3 ]4 C5 z; ~ 5.3.2 设置Options里面的Debug选项/ r: x" U8 l; A! L8 [4 g) j Debug选项主要用于调试设置: $ P( E. x7 F. j5 c) c2 T% i* D ![]() 打开Settings设置选项,设置完毕后别忘了点击确定。 $ n6 C b p& H9 s- \ ![]() 1 h3 Q( v; R" ]$ B 5.3.3 设置Options里面的Utilities选项1 M* n/ F, a2 q Utilities选项主要用于程序下载设置。 ) Q# y- r y5 [, L0 Y ![]() 5.3.4 程序下载; k- a0 l' l. X5 l 前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电就可以下载了。点击这里即可: ![]() " A+ X6 `) d' G4 d 下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示: ![]() " n& A% \% ?- y2 e 5.4 MDK调试容易崩溃的解决办法 进入到MDK5.2X后,MDK调试的时候很容易崩溃,出现下面这个错误 ![]() * @' N' a$ J0 O5 W9 r 出现这个错误的话,要注意下面两个问题:" a1 Z0 z% a4 m5 E+ f" B 如果出现这种情况的话,将工程放在桌面路径下,工程名不要有中文会好很多。路径深或者有中文,都会造成这种情况。# a" \6 ]& _7 Q 退出调试的时候,如果使用断点了,务必清除所有断点,再退出,否则也会造成这种情况。 : Z q7 ~, U5 ?, _ 5.5 MDK程序调试5 T4 n" g& z% x7 W0 @8 p R& T JLINK或者STLINK设置完毕后,调试是一样的。 ) j. s) P2 d' ~6 v8 F 5.5.1 全速运行和单步调试 点击如下按钮可以进入调试状态:/ r4 l9 ~' Y) ^+ |* f0 e ' _. t4 h9 `7 ~/ c7 _ ![]() # W6 G! l8 k# I( z' ]8 D 进入调试状态后的效果如下:! F3 p. p/ C: } ![]() - j) j8 `& u- y! |8 L/ L7 i 首先要认识下这7个图标的含义: 0 ]1 N2 C D5 i6 i t7 B9 I5 S$ X ![]() 第1个图标是复位调试。 第2个图标是全速运行。 第3个图标是进入全速运行状态后,通过这个图标可以停止全速运行。" ~& X' U; g: Q5 v5 k+ C _ 第4个图标是Step(Step one line),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。 第5个图标是Step Over(Step over the current line),每次点击以函数为单位运行,不会进入函数内部。 第6个图标是Step out(Step out of the current line),点击后退出当前运行的函数,执行下一个函数。 第7个图标是Run to Cursor Line(Run to the current cursor line),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头 5 b, @7 w5 b T6 f9 W; ~ ![]() & ~2 V# O8 X6 f9 v" R 然后点击此图标即可,可以看到前面多了一个黄色的小箭头,说明已经运行到此行/ l; i( M, e+ _; b, l ![]() # N9 y) s% p- ^5 [7 r 前面几个图标的功能,大家多测试几次就熟练了。2 r6 V4 O j1 n/ H. p; d+ b 5.5.2 外设寄存器的查看 要查看的外设寄存器内容在这个菜单里面: ![]() 5 T% V& s! g/ q6 c& B 如果要查看内核外设寄存器,在这里:% w7 ~2 N, z+ D: `4 C" \ ! `7 p/ G' S6 [- ^2 T& Q: b8 u ![]() 6 q8 i$ e- c2 d8 Z8 ^9 y 5.5.3 全局变量的查看2 g8 V# [ y0 K; U! }: q& V 针对全局变量,MDK专门提供了Watch1和Watch2两个窗口,每个窗口可以添加很多变量。调试过程中,这些窗口里面添加的变量是会更新的。 7 E+ Q# ?; V3 v$ V/ h% i ![]() 也可以从菜单View ->Watch Windows进行添加。比如下面添加一个简单的全局计数变量。 ' {0 O& f' w# v4 v/ N+ G ![]() $ @2 _. Y) V7 u; ?9 W$ B 5.5.4 局部变量的查看6 h+ |$ e/ }. T4 G0 n 针对局部变量,MDK专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,MDK会自动添加。$ M$ v1 ?6 o4 C0 L . _; b( O/ v" l# B# Q$ B- Y ![]() 也可以从菜单View ->Call Stack Window进行添加。局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请占空间,退出函数后,栈空间就会被释放掉。比如main函数里面一个num局部变量:: M& W3 f% g# @ s* v( v8 }* f& v ![]() 5.5.5 Flash区或者RAM区的查看+ S$ g8 Y! |* M+ Q9 Z' Z, _) q 如果要查看Flash区或者RAM区的内容,MDK提供了4个Memory窗口。 : H' d c, X. R ![]() 也可以从菜单View ->Memory Windows进行添加。比如要查看0x0800 0000地址开始的内容,直接输入即可,这个地址是STM32H7的Flash首地址: F! [2 r2 c0 L& H) Z% F ![]() 5.5.6 断点调试* F0 S; U. U* ~' Z7 H# ~( } 断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加。 t, ^0 ?9 f" w. u5 X$ t! v$ s % d! C0 |8 A* o ![]() 比如想在84行添加断点。 2 |- U- Y2 u: @ P0 J% [$ G ![]() 用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头: ; H$ s6 v. P4 k2 N# e" A" Y( L ![]() 3 r* Y! @. _$ J% n% F1 r 然后点击那个小红点,可以看到已经添加上:9 Q2 B8 y9 t3 @1 [ ![]() 9 y& F! R: r% y$ C 然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到黄色小箭头也显示在左侧了,说明程序执行这个地方了:; E( M. H; n1 O2 g . ]9 X/ j: t$ x( U, l5 c% e7 s- A B ![]() / y. r" w5 P1 p 正常情况下,断点可以加到任何程序代码可以执行到的地方。另外注意,退出调试前,点击这个按钮取消所有断点,防止MDK调试期间崩溃:1 n6 t' K2 ]3 w9 q% s' O 5 V. K* d% U" G T; n) J$ F ![]() 5.5.7 寄存器,全局变量和局部变量的动态更新 MDK有个周期性更新选项,如果大家要周期性的观察一些寄存器、全局变量的更新、需要把菜单View -> Periodic Window Update选上。9 F; E1 x/ x9 u ![]() , Q; t, ?; U" N/ ~- a% l& X4 n 这个周期不能设置,大概0.5s左右更新一次。( n0 x/ K4 l$ z! ^7 G 5.6 总结 对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。 ' G: S1 m+ Y" W# W 5 k; N% _/ R$ B! d6 x |
拷打cubemx【003】——找不到的芯片包
【2025·STM32峰会】GUI解决方案实训分享5-调通板载的NRF24L01 SPI接口并使用模块进行无线通信(发送和接收)
【2025·STM32峰会】GUI解决方案实训分享4-使用MVP架构从硬件外设读取数据并显示到图形界面、从图形界面发送指令控制硬件外设
【2025·STM32峰会】GUI解决方案实训分享3-搭建空白TouchGFX例程并实现简单的功能(含硬件部分的串口打印)
【2025·STM32峰会】GUI解决方案实训分享2-编译运行TouchGFX咖啡机例程(含桌面仿真)
【2025·STM32峰会】+TouchGFX实现动态进度显示以及界面切换
【2025·STM32峰会】+使用TouchGFX快速创建GUI
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
实战经验 | 关于STM32H7使用LL库生成ADC代码工作异常问题说明
实战经验 | 关于STM32H745的MC SDK电机控制工程问题的解决办法