5.1 初学者重要提示- x% l6 w1 ?/ z6 J 如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。1 B, c& ?6 D5 G" A' n) d 如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。 MDK曾发布的STM32F1,F407,F429和F7的所有调试方法的设置细节及其注意事项,同样适用于STM32H7。1 i3 G( o& @7 d MDK5调试过程中容易崩溃的问题,请看本章5.4小节,比较重要。; Z/ N( K8 l- t6 q JLINK无法下载解决思路以及常见问题整理,适用于其它LINK。 5.2 使用MDK调试和下载程序设置(JLINK)/ |( [% h2 t3 Y6 @5 y. p; G8 }1 u! I1 P 调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。# w, X: A, s. `3 \/ l 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。 5.2.1 开发板和JLINK的接线图 开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板:: `5 ]: z" F V. e ~ ! g3 s, x. x& w& \/ ? 6 D. I3 i( _' z 注意转接板不要插反了: ( W4 I+ M- d" W 5.2.2 设置Options里面的Debug选项 Debug选项主要用于调试设置。 打开Settings设置选项,设置完毕后别忘了点击确定。 T6 |7 i! x: Q, Y% o # D( e4 ^7 A4 s 5.2.3 设置Options里面的Utilities选项 Utilities选项主要用于程序下载设置。5 K) G p7 n0 \0 P' Z 5.2.4 程序下载 前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里就可以下载了: 5 r U; m/ {& X( W3 W9 w" f ; T4 t! {4 Z, l7 K; r 下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示: ; W/ Y% Z! L+ m: {$ O 8 E9 S. _/ ], e) g( I" Z$ M( L 5.3 使用MDK调试和下载程序设置(STLINK), z" ]6 `+ A5 k: R% U! [ S 调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。 & A# I) O( ?. I; S 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。5 ^, ~( J" k1 C9 n/ U# g " I9 `- [7 e' d# d 5.3.1 开发板和STLINK的接线图 开发板接上STLINK的效果图如下: & |; u6 n( i' u" c 如果是下面这种STLINK,需要接上转接板:9 x# e7 y0 h6 }9 L7 e$ A2 e2 ? * g1 c- C' [, a5 C$ c$ J! o) n8 j 4 W2 V' {) \. i7 P! z 5.3.2 设置Options里面的Debug选项6 f. I' ^! H$ n: l. D" r2 u Debug选项主要用于调试设置: 打开Settings设置选项,设置完毕后别忘了点击确定。 8 u. G6 T+ V# W- o( V" t0 q 5.3.3 设置Options里面的Utilities选项 Utilities选项主要用于程序下载设置。 & D6 @) [/ i: g1 b 5.3.4 程序下载 前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电就可以下载了。点击这里即可:' I" P" n. I2 X X$ w& @ 下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示: * W( z3 G/ D9 J6 o! ? 5.4 MDK调试容易崩溃的解决办法 进入到MDK5.2X后,MDK调试的时候很容易崩溃,出现下面这个错误 h2 |. ?# C, m; v8 R: ~ 出现这个错误的话,要注意下面两个问题:' p3 b8 Y M- o" O* v 如果出现这种情况的话,将工程放在桌面路径下,工程名不要有中文会好很多。路径深或者有中文,都会造成这种情况。) q" w! a8 i& Q. q7 A 退出调试的时候,如果使用断点了,务必清除所有断点,再退出,否则也会造成这种情况。 5.5 MDK程序调试- X; x% P$ B3 ] JLINK或者STLINK设置完毕后,调试是一样的。 / a2 d) G/ o7 [4 t* i2 J% ] 5.5.1 全速运行和单步调试 点击如下按钮可以进入调试状态:6 Y0 \) V9 o% l- R' W3 p, q% k' r, k' V # Y' o I0 t! N3 d V3 r! L% g 进入调试状态后的效果如下: " K; a6 M; n7 ~3 w1 k- ^5 O 首先要认识下这7个图标的含义: k9 o0 W6 N; @8 _ 第1个图标是复位调试。2 m2 A1 h! w5 l 第2个图标是全速运行。9 \4 |7 A4 ]. z 第3个图标是进入全速运行状态后,通过这个图标可以停止全速运行。' J3 ?6 B _: G: ^/ g$ g% o9 i% T 第4个图标是Step(Step one line),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。$ m. v9 r6 }9 o* f% G2 g+ n& s 第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),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头 6 ~) m! p- Z* L7 l1 b 7 s7 K4 _7 P' h3 w 然后点击此图标即可,可以看到前面多了一个黄色的小箭头,说明已经运行到此行 ' ~3 u7 K; }; _* R 前面几个图标的功能,大家多测试几次就熟练了。; \$ e1 I# |& l* n 5.5.2 外设寄存器的查看 要查看的外设寄存器内容在这个菜单里面:, B* }+ s/ I4 g' k+ w : a8 @) k. O$ C9 e 7 z/ }( M( P$ {. M3 z0 @ 如果要查看内核外设寄存器,在这里:2 [* G- Z, F- x, ?- d H! G f - p3 y* Y) m: m3 G8 }. ]6 T+ | 5.5.3 全局变量的查看 针对全局变量,MDK专门提供了Watch1和Watch2两个窗口,每个窗口可以添加很多变量。调试过程中,这些窗口里面添加的变量是会更新的。5 e: ]; u1 N) w 也可以从菜单View ->Watch Windows进行添加。比如下面添加一个简单的全局计数变量。 , z! t2 z2 j# q5 V7 f0 u+ F 5.5.4 局部变量的查看 针对局部变量,MDK专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,MDK会自动添加。0 b) U9 ?7 o1 D* d ' D! U/ Q3 q) T+ R7 M4 ] F; y0 i& N! {4 L 也可以从菜单View ->Call Stack Window进行添加。局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请占空间,退出函数后,栈空间就会被释放掉。比如main函数里面一个num局部变量: $ `' g) C0 I3 Q U # }, t* b% x( [( A0 {' w 5.5.5 Flash区或者RAM区的查看 如果要查看Flash区或者RAM区的内容,MDK提供了4个Memory窗口。 - A& w+ ]) p3 K' ~: _ 也可以从菜单View ->Memory Windows进行添加。比如要查看0x0800 0000地址开始的内容,直接输入即可,这个地址是STM32H7的Flash首地址:5 \1 {9 \, t! S7 t . O# b+ _+ [# P* y% Q" H 5.5.6 断点调试 断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加。" k6 u; K0 O; C1 ` 比如想在84行添加断点。 7 y1 I9 T- }' s0 l. V; [! B 3 {4 \" R4 X. G. k 用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头: ! ]* s$ f1 H+ _8 ~3 I4 e% [; g 然后点击那个小红点,可以看到已经添加上:2 P4 _2 Y W2 g* E 然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到黄色小箭头也显示在左侧了,说明程序执行这个地方了: % m) A. X5 J2 U2 u" z; f ) v9 x* `' t* f- ]4 | 正常情况下,断点可以加到任何程序代码可以执行到的地方。另外注意,退出调试前,点击这个按钮取消所有断点,防止MDK调试期间崩溃: , `- u7 {; p) r 5.5.7 寄存器,全局变量和局部变量的动态更新 MDK有个周期性更新选项,如果大家要周期性的观察一些寄存器、全局变量的更新、需要把菜单View -> Periodic Window Update选上。7 v/ _5 `$ c/ [ # h( B+ D5 {8 M/ z4 o: y( [( T" J* w 这个周期不能设置,大概0.5s左右更新一次。; Y' {1 t2 X- \$ |3 p( l 5.6 总结1 E6 H! ?2 L/ r, b1 c) w6 | 对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。* f# X$ O8 n% q: u7 O y- R" h$ j: t, b5 P2 A |
【经验分享】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位定时设置注意事项