5.1 初学者重要提示( n. N( d' O& u/ T 如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。 如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。 F$ h0 Y4 f* v/ N; V6 G MDK曾发布的STM32F1,F407,F429和F7的所有调试方法的设置细节及其注意事项,同样适用于STM32H7。4 }( e) D: c& l MDK5调试过程中容易崩溃的问题,请看本章5.4小节,比较重要。8 ?' G E4 F0 q, M* r; f, \ JLINK无法下载解决思路以及常见问题整理,适用于其它LINK。- n& n+ w2 s. U5 T 5.2 使用MDK调试和下载程序设置(JLINK) 调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。8 Z0 D" W' g, h: I4 G6 s+ P$ c # W. a" a' d5 c0 D6 y 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。1 O6 b6 M) X! b4 p) z3 J & Y4 w5 z4 d" U& [4 r 5.2.1 开发板和JLINK的接线图 开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板:( D' L& _6 i- R! T( J: `3 x n* N 9 w* A6 T' t% g) q- h0 C1 H 注意转接板不要插反了: 8 }' h, S+ g) p 5.2.2 设置Options里面的Debug选项 Debug选项主要用于调试设置。; b; b& v( l% H6 H8 ~ : i2 k. L7 |) a) o$ H- N- B * l, e N" U* M' i) J' g 打开Settings设置选项,设置完毕后别忘了点击确定。; j% O4 t4 Z, e$ A1 [( r ; o# z5 N! W4 L 5.2.3 设置Options里面的Utilities选项 Utilities选项主要用于程序下载设置。- O7 A2 O8 ^ @2 Y& | ! v- |) w9 G9 Y( O/ ^9 Y 5.2.4 程序下载' q% N6 w6 n9 p2 p 前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里就可以下载了: - Y2 ` b6 R% L+ D5 {* l! b- N0 X 下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示: " h |5 @ s( ~9 r: o& B. l 5.3 使用MDK调试和下载程序设置(STLINK)" l C7 T3 V8 X, l 调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。3 R0 M2 A( U9 B7 R4 v' O 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。 5.3.1 开发板和STLINK的接线图, N7 Q# z2 R6 T# H% ]+ } 开发板接上STLINK的效果图如下:( X' s7 c' F0 `. z8 w( }6 _( i" c+ f 如果是下面这种STLINK,需要接上转接板:; J* r3 h# a# x : [0 S+ {% ]" {7 v+ ^ 3 d: R! @/ z7 h% ^5 e5 W7 p4 s+ B 5.3.2 设置Options里面的Debug选项+ Q$ O; U* m: {: g( ~/ T8 | Debug选项主要用于调试设置:0 v; Z5 {% N. z& j0 z ( ?; K* L4 w u% M 打开Settings设置选项,设置完毕后别忘了点击确定。! F' S" \) J! E, V " G2 s5 e6 }7 V* b6 Y 5.3.3 设置Options里面的Utilities选项 Utilities选项主要用于程序下载设置。 1 z6 W5 R. U7 }; `2 Y- F3 N ' W9 M) F/ M/ y# f) y( u* d* N 5.3.4 程序下载+ R% p7 @( [0 B' L0 S4 t 前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电就可以下载了。点击这里即可:& ^4 f6 H, X% m' W6 F4 C ) q$ W/ Q1 s: h" d5 z4 w7 x 下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示: / Y( Y/ _- W W 5.4 MDK调试容易崩溃的解决办法6 {- m" O1 |' k: r' Q8 N 进入到MDK5.2X后,MDK调试的时候很容易崩溃,出现下面这个错误! O ]3 E/ g5 l9 U2 r7 T5 U 出现这个错误的话,要注意下面两个问题: 7 l7 }8 ]6 E" l/ ^ 如果出现这种情况的话,将工程放在桌面路径下,工程名不要有中文会好很多。路径深或者有中文,都会造成这种情况。7 ~6 u; ~2 i4 H5 \+ W' A 退出调试的时候,如果使用断点了,务必清除所有断点,再退出,否则也会造成这种情况。 5.5 MDK程序调试9 e& D' h% N [7 q7 S0 j! { JLINK或者STLINK设置完毕后,调试是一样的。4 ]. G; ~- |# o( j! W 5.5.1 全速运行和单步调试 点击如下按钮可以进入调试状态:/ |5 i1 O0 p1 B6 A, ?5 s - k" Y8 J9 U9 ?( s 进入调试状态后的效果如下: 首先要认识下这7个图标的含义:: F% J0 O9 L* Z) [ ! Z' C) k2 h& q6 ^9 K& N- J7 D5 O # \' }- u* Y2 y" F1 b7 e 第1个图标是复位调试。 第2个图标是全速运行。 第3个图标是进入全速运行状态后,通过这个图标可以停止全速运行。. y5 s0 Y% q! w4 G. y; t# e 第4个图标是Step(Step one line),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。# V9 ^7 E* Q; w, T 第5个图标是Step Over(Step over the current line),每次点击以函数为单位运行,不会进入函数内部。: h9 {! k8 Y. [ 第6个图标是Step out(Step out of the current line),点击后退出当前运行的函数,执行下一个函数。' k' y y! }3 `3 W: A6 f 第7个图标是Run to Cursor Line(Run to the current cursor line),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头4 a8 E3 ]; ?2 e& P5 L: F* k - y) R; t: N+ q. a0 ] 然后点击此图标即可,可以看到前面多了一个黄色的小箭头,说明已经运行到此行& Y6 P1 R! f1 F, o; v; V ! o! x' R5 D' L. C/ P % a) X0 k a& ?# J# l9 Y 前面几个图标的功能,大家多测试几次就熟练了。/ F8 ~- V+ ?0 x1 W) D 5.5.2 外设寄存器的查看# O4 i* |/ k9 O% [ 要查看的外设寄存器内容在这个菜单里面: - u" |; Z: F9 C3 F0 F7 q $ S: |; x: w5 Z8 [' I' l7 {0 j 如果要查看内核外设寄存器,在这里:- N9 o( K' ?4 h6 q) A 5 X5 T! Z8 t" o 5.5.3 全局变量的查看/ x9 ^; m, j8 `2 e: M- {1 e 针对全局变量,MDK专门提供了Watch1和Watch2两个窗口,每个窗口可以添加很多变量。调试过程中,这些窗口里面添加的变量是会更新的。 也可以从菜单View ->Watch Windows进行添加。比如下面添加一个简单的全局计数变量。4 c/ {$ K6 M# i1 L0 P+ ^ - J" o U, C8 o' n0 Y * q+ R5 N W! ~' @ ?. u 5.5.4 局部变量的查看 针对局部变量,MDK专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,MDK会自动添加。/ G& G4 P, I# \1 @8 C+ o) o s + N, c, c( O4 l& r* x7 C 也可以从菜单View ->Call Stack Window进行添加。局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请占空间,退出函数后,栈空间就会被释放掉。比如main函数里面一个num局部变量:2 O5 H5 s0 I! q5 @. K' ^ 1 v8 q) \+ J1 I ! |% t/ }! R# J- u2 ^$ m$ Z& G4 J 5.5.5 Flash区或者RAM区的查看$ \8 K& m3 E& f" c6 v8 M5 k h% M7 L 如果要查看Flash区或者RAM区的内容,MDK提供了4个Memory窗口。) \ Q/ ]- M2 C3 z2 H + R _8 O1 B p8 {) H: M" B2 ? 也可以从菜单View ->Memory Windows进行添加。比如要查看0x0800 0000地址开始的内容,直接输入即可,这个地址是STM32H7的Flash首地址:! y8 I( l, P E) w) O( K * ~& D& Q9 r; w8 Q/ J/ S 5.5.6 断点调试 断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加。 3 r" h3 ]$ u7 Y V' V v2 U 比如想在84行添加断点。 ) [9 g- A& a+ ` 用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头:. @5 Y5 c s7 S4 g# c& D 然后点击那个小红点,可以看到已经添加上:9 c* D6 _( ?5 S# S 然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到黄色小箭头也显示在左侧了,说明程序执行这个地方了: 3 Y9 f& G) B- Y9 X! Y9 m. I 正常情况下,断点可以加到任何程序代码可以执行到的地方。另外注意,退出调试前,点击这个按钮取消所有断点,防止MDK调试期间崩溃: 7 ]/ ^0 Q9 Y! S- }0 o ? K0 l - B6 @# _7 t' q( e 5.5.7 寄存器,全局变量和局部变量的动态更新 MDK有个周期性更新选项,如果大家要周期性的观察一些寄存器、全局变量的更新、需要把菜单View -> Periodic Window Update选上。! h: {; e$ c, r8 [- y( g' k. J + Q2 b4 z u) h t5 A0 h% b, X$ x ; @7 M# k) S& v0 q; l 这个周期不能设置,大概0.5s左右更新一次。 5.6 总结6 l0 A0 t% @! N7 ~ 对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。( i+ N7 v. A9 `: m8 x! w( @9 q + {) |+ n9 n6 X; {/ P" i |
【经验分享】STM32_H7_ADC
STM32H7R/S高性能MCU:安全性,大存储和优异图显赋能更多应用创新
Stm32H7XX GCC下分散加载实现
【银杏科技ARM+FPGA双核心应用】STM32H7系列10——ADC
DIY-STM32H750核心板
[nucleo-H7A3ZI-Q]1-点亮一个皮皮灯
DIY-STM32H743核心板
【银杏科技ARM+FPGA双核心应用】STM32H7系列57——MDK_FLM
1月10日有奖直播 | 基于STM32 的CODESYS智能自动化解决方案
STM32的CAN FD位定时设置注意事项