
5.1 初学者重要提示 如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。 如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。3 }5 c7 K4 Y% {. O9 V MDK曾发布的STM32F1,F407,F429和F7的所有调试方法的设置细节及其注意事项,同样适用于STM32H7。 MDK5调试过程中容易崩溃的问题,请看本章5.4小节,比较重要。 JLINK无法下载解决思路以及常见问题整理,适用于其它LINK。 5.2 使用MDK调试和下载程序设置(JLINK) 调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。/ D" h" }' W3 k- ]1 { 7 t) U" M% J" E 5.2.1 开发板和JLINK的接线图 开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板:- h( A& v& g3 V 9 b4 A3 l4 r& P' e7 Z2 V ![]() ! ^1 k: o( U4 A7 s. w2 R 注意转接板不要插反了: ![]() 5.2.2 设置Options里面的Debug选项1 I0 o6 c3 A+ C3 i) G J2 d Debug选项主要用于调试设置。" m4 B# J1 u$ E' b) [- f8 G ' w9 c- g/ p l. }+ B ![]() 打开Settings设置选项,设置完毕后别忘了点击确定。5 d$ z9 T, W- Y6 V& } 0 g. {8 l, R0 G ![]() + p& [ f1 D5 ?# @- ?5 X: G" W; B 5.2.3 设置Options里面的Utilities选项 Utilities选项主要用于程序下载设置。& \% A. B( `: v6 Q" f5 k/ M9 e ![]() 0 T; C2 S5 z! j& S% K( `& c- w 5.2.4 程序下载 前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里就可以下载了: ! n: A9 h: Z9 F/ Z/ ?$ r8 | ![]() 下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示: ![]() 3 `; t& o* f( R- c1 Q' Y! Q9 D& Y 5.3 使用MDK调试和下载程序设置(STLINK)5 O4 G4 }2 E$ P4 d& I( J8 c$ Z6 O 调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。 6 [6 `9 U6 J4 @! r 5.3.1 开发板和STLINK的接线图 开发板接上STLINK的效果图如下:- Y: v: z1 F8 E2 |, N) J3 t8 m ![]() 如果是下面这种STLINK,需要接上转接板: ![]() ![]() " o; {) T; \$ F1 A# _* r! J& Y 5.3.2 设置Options里面的Debug选项# Y4 Y- E; `4 u Debug选项主要用于调试设置:( O8 F* V/ \/ }$ ^9 Y' e; m* r ![]() 打开Settings设置选项,设置完毕后别忘了点击确定。 ![]() 9 t) H$ t1 n Y d0 a8 p( \1 ^; b% ] 5.3.3 设置Options里面的Utilities选项+ r; h3 P# A C, k! y' a a0 ] Utilities选项主要用于程序下载设置。6 ]7 F* U, c1 y 1 W% c2 ?2 N7 l4 X! C4 b7 v ![]() ! O8 c# K& u% Y. X3 b 5.3.4 程序下载 D& _% d. r1 }$ V g/ @0 `# w8 y% S 前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电就可以下载了。点击这里即可: ( u1 p/ @: c1 |5 D' [ ![]() 5 }! K- H# c' n. q 下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示: ![]() 5.4 MDK调试容易崩溃的解决办法 进入到MDK5.2X后,MDK调试的时候很容易崩溃,出现下面这个错误 # w& f/ S: d! u/ j ![]() 出现这个错误的话,要注意下面两个问题: 如果出现这种情况的话,将工程放在桌面路径下,工程名不要有中文会好很多。路径深或者有中文,都会造成这种情况。 退出调试的时候,如果使用断点了,务必清除所有断点,再退出,否则也会造成这种情况。% J! ~3 d. p; H/ r5 `) N6 I) N 5.5 MDK程序调试 JLINK或者STLINK设置完毕后,调试是一样的。' }) i1 @3 [8 `: l1 m + g5 g' F4 e4 z. z5 \4 i$ L 5.5.1 全速运行和单步调试3 Y `) s1 j$ P: a/ y 点击如下按钮可以进入调试状态: ![]() 进入调试状态后的效果如下: . Q! \, W, \0 m0 X, i# d ![]() 首先要认识下这7个图标的含义:$ b8 H0 F$ m# C0 r + v! `$ w9 |2 U. f) d- t5 f ![]() 第1个图标是复位调试。0 i r" a. |, @ 第2个图标是全速运行。7 W" Z. N0 c+ y5 p1 u 第3个图标是进入全速运行状态后,通过这个图标可以停止全速运行。! G- s7 |6 d4 }9 n% Q% T' ]/ j 第4个图标是Step(Step one line),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。( g- f) S* C" o 第5个图标是Step Over(Step over the current line),每次点击以函数为单位运行,不会进入函数内部。% W6 D& I/ P& q: B3 p. E, _# i3 I 第6个图标是Step out(Step out of the current line),点击后退出当前运行的函数,执行下一个函数。/ ~! ^! p% t- L+ p 第7个图标是Run to Cursor Line(Run to the current cursor line),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头 ![]() 然后点击此图标即可,可以看到前面多了一个黄色的小箭头,说明已经运行到此行 % G/ B" W, m. W$ d) l4 P; |' M( L ![]() $ F- y" {0 R4 P 前面几个图标的功能,大家多测试几次就熟练了。 A- d5 p, v* Z% Y- U1 Q t ) _1 [2 P7 t7 {9 p( r3 {; ]5 w9 q/ y3 N 5.5.2 外设寄存器的查看 要查看的外设寄存器内容在这个菜单里面: ; M6 G, ~0 g% H! k, c9 w1 r ![]() 如果要查看内核外设寄存器,在这里: ![]() / _4 x& D& I1 L: a 5.5.3 全局变量的查看: i0 f9 l; ^4 C! d 针对全局变量,MDK专门提供了Watch1和Watch2两个窗口,每个窗口可以添加很多变量。调试过程中,这些窗口里面添加的变量是会更新的。 ![]() 也可以从菜单View ->Watch Windows进行添加。比如下面添加一个简单的全局计数变量。 ![]() 5.5.4 局部变量的查看) D0 k! F$ H) P1 r3 ? 针对局部变量,MDK专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,MDK会自动添加。8 Q' v0 x; s3 w) i/ M & J" M. @6 w4 r$ ?5 k: C ![]() * i* i! {9 ~! Y$ u" s" S 也可以从菜单View ->Call Stack Window进行添加。局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请占空间,退出函数后,栈空间就会被释放掉。比如main函数里面一个num局部变量: ![]() ; ~, O/ f3 W) }3 t. V 5.5.5 Flash区或者RAM区的查看2 W1 S2 [' z9 X 如果要查看Flash区或者RAM区的内容,MDK提供了4个Memory窗口。 q, I4 k$ x9 l$ n' L _& z ![]() 也可以从菜单View ->Memory Windows进行添加。比如要查看0x0800 0000地址开始的内容,直接输入即可,这个地址是STM32H7的Flash首地址:" K; E- t T, M - X# F5 H0 V, V0 o D' X ![]() & w( F+ `* h9 e 5.5.6 断点调试 断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加。 ![]() 比如想在84行添加断点。& v2 ]: }3 ^' E3 N ![]() 1 {+ E+ |5 f+ w2 F/ F4 [0 Z% t 用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头:5 C" H8 q0 R8 n( b. w ![]() # V" [( `5 R1 L1 q' X 然后点击那个小红点,可以看到已经添加上: U! W) m* e0 U, g$ O _' I8 ^8 V4 k# g ! v- e# S, w( F+ c j; e; ` ![]() 然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到黄色小箭头也显示在左侧了,说明程序执行这个地方了:5 I9 |, c$ K7 N) ~ 9 ~8 O' t4 [8 _3 ` ![]() 正常情况下,断点可以加到任何程序代码可以执行到的地方。另外注意,退出调试前,点击这个按钮取消所有断点,防止MDK调试期间崩溃:9 b/ b# W( K6 z9 Z/ _! l ![]() / r- D( o5 q% M0 _2 g9 P+ V 5.5.7 寄存器,全局变量和局部变量的动态更新 MDK有个周期性更新选项,如果大家要周期性的观察一些寄存器、全局变量的更新、需要把菜单View -> Periodic Window Update选上。 5 q4 B# i2 Y4 C ![]() 这个周期不能设置,大概0.5s左右更新一次。" ^& A- j: G6 T$ V W: \8 m6 g 7 M$ _' S+ {7 _' h 5.6 总结3 k7 S7 ?7 t+ R: j9 o( H8 i% A) l 对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。: z" J6 `6 |4 ^5 V& ^: q3 [ 2 N- h) y3 I1 ? ! R4 ^! L: K/ k |
STM32H7的TCM,SRAM等五块内存基础知识
STM32H7的TCM,SRAM等五块内存基础知识
简单了解一下STM32H7的BDMA
有奖预约 | STM32H7R7基于RT-Thread RTOS的智能终端GUI解决方案
【STM32H745I-DISCO】基于TouchGFX的工业控制器界面设计
STM32H745I-DISCO串口打印
【STM32H745I-DISCO】TouchGFX探索——3、触屏滑屏操作与中文显示
TouchGFX软件下载及使用
【STM32H745I-DISCO】TouchGFX探索——2、照葫芦画瓢
STM32H745I-DISCO硬件信号为空,M4、M7对于硬件信号的优先性判断