STMCU小助手
发布时间:2021-12-19 14:00
|
5.1 初学者重要提示 如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。% b& i! W6 I: M# W4 g 如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。 MDK曾发布的STM32F1,F407,F429和F7的所有调试方法的设置细节及其注意事项,同样适用于STM32H7。- u$ a7 ?9 X6 j) v MDK5调试过程中容易崩溃的问题,请看本章5.4小节,比较重要。6 `6 J6 O& x8 X6 \ JLINK无法下载解决思路以及常见问题整理,适用于其它LINK。 5.2 使用MDK调试和下载程序设置(JLINK); z( L" D+ m2 S 调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。 / J9 g, O6 J* ~+ ?9 } k 5.2.1 开发板和JLINK的接线图9 L b1 p9 s8 R9 l" {! S 开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板:
! _$ z: I/ x9 e; g0 p' M 注意转接板不要插反了: $ ]. X% z7 u4 i; @( ]% e
1 @6 i ~" B$ v1 _1 p- N8 M/ Q 5.2.2 设置Options里面的Debug选项( R* d6 Q9 ]3 M- T5 d+ R# Q Debug选项主要用于调试设置。
打开Settings设置选项,设置完毕后别忘了点击确定。# r4 l' m+ Y8 p1 y
5.2.3 设置Options里面的Utilities选项 Utilities选项主要用于程序下载设置。
/ s) D4 ?& x0 A! q 5.2.4 程序下载" x6 W8 q, ]3 |3 }. b% J 前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里就可以下载了: 8 @( K4 s+ n9 G, {7 y2 |
1 K3 b( ]/ e" J- X" y 下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示: , A& H! D8 o2 M: B4 F% y/ a
5.3 使用MDK调试和下载程序设置(STLINK) 调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。7 J _) l& r# D) z8 S - r$ m* {3 w& ?, b! r* d 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。) T9 Z- }" C7 X/ C+ E % }* E; L4 N8 Y3 g+ k" B- c5 Y 5.3.1 开发板和STLINK的接线图$ U, i' C8 f0 o9 |! b$ {% u 开发板接上STLINK的效果图如下:3 ]/ c5 e7 h/ e9 ]5 S! E% U
: E6 W' i/ r8 `% H. [' { 如果是下面这种STLINK,需要接上转接板:
$ O( M+ B5 F0 D9 a2 c, s" f3 } ! `0 @& O3 K5 D0 {
2 u) p- x! A" ]! G 5.3.2 设置Options里面的Debug选项 Debug选项主要用于调试设置:& b4 ~3 ~! a; X& v . ]0 F2 S/ }% a/ h; U1 v
打开Settings设置选项,设置完毕后别忘了点击确定。/ }- a$ K" S4 k1 u
: E9 m, o9 A( M5 w) n- j- f& g 5.3.3 设置Options里面的Utilities选项1 k2 m' e" o+ s B; W8 w Utilities选项主要用于程序下载设置。+ W, l& X& J2 Z3 l
5.3.4 程序下载- s: Q K1 G& K) e: o% s 前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电就可以下载了。点击这里即可: 1 j9 v a8 k. T) ^6 G
下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:
5.4 MDK调试容易崩溃的解决办法 进入到MDK5.2X后,MDK调试的时候很容易崩溃,出现下面这个错误 z- k+ y0 \( n6 [$ u/ t% B- S
3 g4 s" {7 N& e7 i. D 出现这个错误的话,要注意下面两个问题: x' h( H. y" @3 u& L 如果出现这种情况的话,将工程放在桌面路径下,工程名不要有中文会好很多。路径深或者有中文,都会造成这种情况。- o) _1 b; m d" T' D- P1 A 退出调试的时候,如果使用断点了,务必清除所有断点,再退出,否则也会造成这种情况。 3 a/ t7 y' x8 ^/ | 5.5 MDK程序调试 JLINK或者STLINK设置完毕后,调试是一样的。! C; M. X- | I4 V' w Q 5.5.1 全速运行和单步调试 d# k, B/ z0 ~8 R9 W0 o( v1 H 点击如下按钮可以进入调试状态:- _" S9 T6 f; ^ . c1 @; F" j% H; X( N. ~2 A
进入调试状态后的效果如下:+ f& N- n* ?9 A) J+ {7 ?
首先要认识下这7个图标的含义: - x( }! m1 m& j& u- P( |
第1个图标是复位调试。 第2个图标是全速运行。" t! H; m- R8 y) M! d( T. H8 Q 第3个图标是进入全速运行状态后,通过这个图标可以停止全速运行。 第4个图标是Step(Step one line),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。2 C/ [1 I6 b8 `* F( q 第5个图标是Step Over(Step over the current line),每次点击以函数为单位运行,不会进入函数内部。 第6个图标是Step out(Step out of the current line),点击后退出当前运行的函数,执行下一个函数。7 f! b5 g, i1 A/ F6 A 第7个图标是Run to Cursor Line(Run to the current cursor line),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头
* ^$ n6 g2 p2 q% o+ [ 然后点击此图标即可,可以看到前面多了一个黄色的小箭头,说明已经运行到此行 p/ q: L0 C, I& K
; W/ b% D' c0 b/ x+ q* Y 前面几个图标的功能,大家多测试几次就熟练了。- J" Q- g- n2 X& ] 7 e4 ~2 t8 q0 M 5.5.2 外设寄存器的查看7 A0 J3 Z% {" X3 C: @7 _% | 要查看的外设寄存器内容在这个菜单里面:4 ^+ F3 g4 Y( J1 C" p" E
! j# @" u6 r6 p7 e: F 如果要查看内核外设寄存器,在这里: ) S+ _2 [. s+ R' W
5.5.3 全局变量的查看6 ]5 u* B/ O! y2 y1 |# l3 r+ a 针对全局变量,MDK专门提供了Watch1和Watch2两个窗口,每个窗口可以添加很多变量。调试过程中,这些窗口里面添加的变量是会更新的。 " A' C2 E* z0 ^+ M* D
也可以从菜单View ->Watch Windows进行添加。比如下面添加一个简单的全局计数变量。 / K6 u, C/ M8 @, X' U7 v& u9 p5 f
0 n# S; l2 n- Q 5.5.4 局部变量的查看 针对局部变量,MDK专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,MDK会自动添加。9 W4 Y4 h/ e, |* P5 N7 n+ ]& V
6 s- Z6 V5 l# ~6 e3 e 也可以从菜单View ->Call Stack Window进行添加。局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请占空间,退出函数后,栈空间就会被释放掉。比如main函数里面一个num局部变量:
7 U# y+ Y' N# Q6 | 5.5.5 Flash区或者RAM区的查看, S, e' e: s3 y- C; u 如果要查看Flash区或者RAM区的内容,MDK提供了4个Memory窗口。
也可以从菜单View ->Memory Windows进行添加。比如要查看0x0800 0000地址开始的内容,直接输入即可,这个地址是STM32H7的Flash首地址:
# g0 z% ~9 R, e( ^9 B# j2 s 5.5.6 断点调试3 X' X$ A& J" i* x) k 断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加。8 b @3 a% t7 a: G
比如想在84行添加断点。1 w1 z. M1 m8 o5 X' H* _& Y t2 C1 t+ b( E6 c/ g
( |0 a! j$ _# A8 {7 z9 D 用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头: % z) i F7 L/ a0 f+ Y3 J
然后点击那个小红点,可以看到已经添加上: 1 J9 x- G& _. x: \' b6 [
然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到黄色小箭头也显示在左侧了,说明程序执行这个地方了:
6 m' {# ]2 M7 G0 ~8 V* O 正常情况下,断点可以加到任何程序代码可以执行到的地方。另外注意,退出调试前,点击这个按钮取消所有断点,防止MDK调试期间崩溃:* |2 g; s* Q5 i/ D/ S 1 ^7 P* N/ G1 _
/ d2 k) }9 Z% H8 q. ], H- L 5.5.7 寄存器,全局变量和局部变量的动态更新 MDK有个周期性更新选项,如果大家要周期性的观察一些寄存器、全局变量的更新、需要把菜单View -> Periodic Window Update选上。2 u {% b2 b1 ?& s; U2 y
6 a7 w4 v! m( E4 w 这个周期不能设置,大概0.5s左右更新一次。 5.6 总结 对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。 |
【 逢7发帖赢大礼】1、利用CubeMX生成正点原子H7R7开发板的STM32CubeIDE工程
【STM32H735G-DK测评】ADC3+TIMER1+DMA 采样模拟信号
【STM32H735DK测评】Ethernet+lwip DHCP获取IP地址
STM32H743基于CubeMx5.0配置手册
【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实现温度、湿度、气压数据读取
微信公众号
手机版