STMCU小助手
发布时间:2021-12-19 14:00
|
5.1 初学者重要提示 如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。4 S b1 H, t6 |/ f7 m 如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。6 u- ?$ }0 v1 C MDK曾发布的STM32F1,F407,F429和F7的所有调试方法的设置细节及其注意事项,同样适用于STM32H7。 MDK5调试过程中容易崩溃的问题,请看本章5.4小节,比较重要。, A; l& L( |! ^6 U# ~3 m$ d& E9 n6 b6 n JLINK无法下载解决思路以及常见问题整理,适用于其它LINK。/ G7 k- J1 y6 z 5.2 使用MDK调试和下载程序设置(JLINK)7 j1 Y% V9 L L9 [ 调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。 : J) r9 p& `$ Z' T& b, [. {) i 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。 5.2.1 开发板和JLINK的接线图6 z% k, t. C2 h8 s 开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板:
& `7 ~) G6 s: [7 r4 i 注意转接板不要插反了:- T1 f, v" z) m# k+ g( X0 x 1 \4 |& F3 ?7 F. \/ c# J) }
5.2.2 设置Options里面的Debug选项8 |. w% Q. f( \- W Debug选项主要用于调试设置。
打开Settings设置选项,设置完毕后别忘了点击确定。 # y) s1 W8 R9 h. _3 B
- t0 X2 r4 ^ K2 j 5.2.3 设置Options里面的Utilities选项 Utilities选项主要用于程序下载设置。 6 v% |) j9 o3 Y% o3 f: P
8 ^, q8 ?1 Y- F" E" q 5.2.4 程序下载+ T( e& e. j o2 q" _- n( [6 @4 U0 d) u 前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里就可以下载了:; J3 j" c. a3 x
* \ N1 X6 p7 C 下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示: ! i) a# S# e, X- u
5.3 使用MDK调试和下载程序设置(STLINK) 调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。6 [* z5 p# m3 M! Z5 a V) } 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。 5.3.1 开发板和STLINK的接线图* r) r3 H7 b6 R2 n0 S 开发板接上STLINK的效果图如下:+ X; Q% r! X* G 9 I9 K% b5 y& D( c
如果是下面这种STLINK,需要接上转接板: 7 R( p, y, _1 I" A
* g8 u0 f. \$ d" k
! \! L# {: L9 j; P 5.3.2 设置Options里面的Debug选项. i; n& j1 a, E5 B m3 v Debug选项主要用于调试设置:
打开Settings设置选项,设置完毕后别忘了点击确定。7 i# ?7 }+ a! ~. Y. O ' W8 Q$ y) ~' j: M1 F' P
5 x5 I) R9 ?1 x! C" c; A" t! q4 f 5.3.3 设置Options里面的Utilities选项$ u+ K6 {' x7 o) ]0 H9 H Utilities选项主要用于程序下载设置。
5.3.4 程序下载 前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电就可以下载了。点击这里即可:' e8 Y0 }: F' Y" B2 q
6 w* o- A9 m/ e6 R2 ^- B 下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:9 V* w8 }" Y* P+ }+ W4 X! W
5.4 MDK调试容易崩溃的解决办法 进入到MDK5.2X后,MDK调试的时候很容易崩溃,出现下面这个错误9 H+ i$ Y" {3 d: m7 ] I' ]
出现这个错误的话,要注意下面两个问题: 4 w/ [' b) r( P0 m2 |9 { 如果出现这种情况的话,将工程放在桌面路径下,工程名不要有中文会好很多。路径深或者有中文,都会造成这种情况。. ?4 e% ~, `% z, x 退出调试的时候,如果使用断点了,务必清除所有断点,再退出,否则也会造成这种情况。8 B& p$ }/ ]' z) y 5.5 MDK程序调试1 |7 u: I6 ]5 u+ j JLINK或者STLINK设置完毕后,调试是一样的。- x& ]7 K# F3 x; F 5.5.1 全速运行和单步调试 点击如下按钮可以进入调试状态:
2 n9 c' a2 w1 B N- ^; j# m2 J 进入调试状态后的效果如下: K0 }# J" a9 o1 @
0 B4 O: Y. d5 J4 S3 R: h& M 首先要认识下这7个图标的含义:
, {) y. W3 L7 R& ^8 A( B* g 第1个图标是复位调试。 第2个图标是全速运行。 第3个图标是进入全速运行状态后,通过这个图标可以停止全速运行。 第4个图标是Step(Step one line),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。( {8 A8 [5 ^# s$ D 第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),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头 7 c( o6 q6 I% `
7 [ h x3 p! n0 o* t l 然后点击此图标即可,可以看到前面多了一个黄色的小箭头,说明已经运行到此行5 w! }+ O4 E5 C- r1 P# h# t# C + J& C+ h* n7 {8 R: y
前面几个图标的功能,大家多测试几次就熟练了。7 ?5 r# i8 e! I1 q 5.5.2 外设寄存器的查看 要查看的外设寄存器内容在这个菜单里面: . Z; b) l0 I( ~* q3 ]
5 k9 E- m K7 u4 M/ ~, [! Q 如果要查看内核外设寄存器,在这里: 4 n1 h$ V; g+ A5 I
5.5.3 全局变量的查看, \! W$ }# b% L1 {. Z+ i! H 针对全局变量,MDK专门提供了Watch1和Watch2两个窗口,每个窗口可以添加很多变量。调试过程中,这些窗口里面添加的变量是会更新的。
也可以从菜单View ->Watch Windows进行添加。比如下面添加一个简单的全局计数变量。
5.5.4 局部变量的查看 针对局部变量,MDK专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,MDK会自动添加。
也可以从菜单View ->Call Stack Window进行添加。局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请占空间,退出函数后,栈空间就会被释放掉。比如main函数里面一个num局部变量:
5.5.5 Flash区或者RAM区的查看 如果要查看Flash区或者RAM区的内容,MDK提供了4个Memory窗口。6 J' [3 k, H& M) y
6 t, V S2 D4 g, F$ Q 也可以从菜单View ->Memory Windows进行添加。比如要查看0x0800 0000地址开始的内容,直接输入即可,这个地址是STM32H7的Flash首地址:. a5 S1 H* x6 n! Y; x( a& V
5.5.6 断点调试 断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加。
# _0 g3 D% y( T* f W/ l& _. n$ V 比如想在84行添加断点。 * B8 D0 C+ I2 `
用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头:
然后点击那个小红点,可以看到已经添加上:0 A+ C& w4 @) F" Q
然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到黄色小箭头也显示在左侧了,说明程序执行这个地方了: 1 ~* O- J3 e+ H$ C9 r: s+ F6 \9 w
正常情况下,断点可以加到任何程序代码可以执行到的地方。另外注意,退出调试前,点击这个按钮取消所有断点,防止MDK调试期间崩溃: 6 I$ k( ]+ a* W! C- r
9 b+ U: o) |1 s) J" H 5.5.7 寄存器,全局变量和局部变量的动态更新 u! M: P% x% o9 q/ Q* e2 B MDK有个周期性更新选项,如果大家要周期性的观察一些寄存器、全局变量的更新、需要把菜单View -> Periodic Window Update选上。 T5 f9 a& A. G+ G7 z" d) G
这个周期不能设置,大概0.5s左右更新一次。 5.6 总结 对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。 4 e3 f+ M( k, y$ { $ m* F: B2 _. ^# u$ v; x6 } |
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
【福利三:逢7发帖赢大礼】使用MPU6050模块、img_dsc、img_btn机制实现一些简单有趣的动画效果
【福利三:逢7发帖赢大礼】使用arc弧形拉条控件控制PWM舵机及使用SPI3接口操作NRF24L01模块进行无线通信
【福利三:逢7发帖赢大礼】调试nucleo-WBA65RI工程测试样板的一些心得
【福利三:逢7发帖赢大礼】lv_timer和BME680实现温度、湿度、气压数据读取
【福利三:逢7发帖赢大礼】成功利用STM32H743VI片内SRAM12和DTCM空间(完全胜利)
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
【福利三:逢7发帖赢大礼】使用惠勤致远STM32H743VI开发板+ST7796并口彩屏移植LVGL9.5并分享一些额外内容
【 逢7发帖赢大礼】7、TouchGFX中实现云彩流动效果
微信公众号
手机版