
7.1 初学者重要提示 如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。 如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。 JLINK无法下载解决思路以及常见问题整理,适用于其它LINK 5 y4 ^; r* s7 X4 W! U 7.2 使用IAR调试和下载程序设置(JLINK)/ o7 q7 ?. d/ s& _ 调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。 * H. ]& m4 _" C5 v( d7 U9 L" B 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。2 ]# Q. K$ z( D. w @3 ^& d- J , X: u6 H" n {+ K 7.2.1 开发板和JLINK的接线图 开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板: - n/ k4 [1 u& ?# S5 R ![]() * C: E0 i7 }) N* e$ t 注意转接板不要插反了:: c& G) C! ~& x* i* \9 V 7 s/ }" _, M, W! A; C ![]() 3 p1 {$ |) F+ z8 T$ b5 k' [; c3 ^ 7.2.2 设置Options里面的Degubber选项 Debug选项主要用于调试设置。 ![]() # P5 N- |, b j% b 设置完毕后,别忘了点击OK。7 T) E& [5 M3 s. D$ H- P ( Q: T0 }9 ~2 i 7.2.3 设置Options里面的JLINK选项 注意,在Debugger选择里面选择了JLINK后,才可以设置此选项。Setup部分使用默认配置即可,无需修改:$ z$ N$ n0 B& H" m0 o9 E5 x ![]() Connection部分要选择SWD接口:1 l( C% j1 N, { ![]() 设置完毕后别忘了点击OK。 0 S: e8 n) D, n 7.2.4 程序下载4 T% V! U2 W" t/ J2 ? P 前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。菜单Project->download->download Active Application:! F2 v; ~2 [4 s3 G& y8 n. h ) a4 |; G' O$ D8 p ![]() 下载成功后将开发板重新上电,可以看到开发板上的LED开始闪烁,IAR的Debug log窗口也有信息展示: ![]() + {1 p& h( u; l$ Y 7.3 使用IAR调试和下载程序设置(STLINK), _) V7 {% ~# R. b3 J) e! A 调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。 7.3.1 开发板和STLINK的接线图 开发板接上STLINK的效果图如下:" m1 k0 N# N6 c" y6 Y ; j5 S8 v4 p! D$ ?, x; Q ![]() 如果是下面这种STLINK,需要接上转接板: q4 Q% Q9 s" i/ J " J% G) ?* H9 T' B ![]() ![]() 7.3.2 设置Options里面的Debug选项+ h/ V7 W* [( v Debug选项主要用调试: ![]() 7.3.3 设置Options里面的STLINK选项 注意,在Debugger选择里面选择了STLINK后,才可以设置此选项。Setup部分选择SWD接口,其它默认即可:* P, H8 q. J; y3 j% {5 w/ z ![]() 1 j: m( F+ k! H+ l$ s( C* p8 ` 7.3.4 程序下载. Z3 `6 s6 R s% b1 K: v; D 前两步设置好之后,STLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里即可:3 `0 ^$ y$ V* s/ j; d ![]() $ `$ J# V: z& d R c$ T6 q 下载成功后将开发板重新上电,可以看到开发板上的LED开始闪烁,IAR的Debug log窗口也有信息展示。 ![]() 7.4 IAR程序调试7 w+ u8 o- r' u/ @2 A- D JLINK或者STLINK设置完毕后,调试是一样的。( e) ]4 Y3 E# K* [0 X7 I3 G 7.4.1 全速运行和单步调试) B) `% M, y, _) e& d* ]+ i! @1 s 点击如下按钮可以进入调试状态(下载程序到芯片同时开启调试): * v: o) ~( A. u/ t5 ~' E) L. n ![]() ) n+ m* G9 k. X+ b0 Z4 \$ z 进入调试状态后的效果如下: 3 Z& v. B, { o9 a* m d ![]() 首先要认识下这11个图标的含义(进入调试状态后,鼠标放在这几个图标上会有提示):+ X% j6 [7 _. ^" n: J1 S9 |! q* w ![]() 第1个图标是重新编译例程并进入调试状态。5 e a8 r2 X- `+ f5 u t 第2个图标是重新进入调试状态。! l9 t, I, U% H- H5 V7 J# i' w 第3个图标是停止调试。 第4个图标是Step Over(Step over the current step point),每次点击以函数为单位运行,不会进入函数内部。! H6 W. U; S M$ A9 K% f; [ 第5个图标是Step Into(Step into the current step point),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。 第6个图标是Step out(Step out of the current line),点击后退出当前运行的函数,执行下一个函数。" z. `. E6 O( R* }. Q 第7个图标是Next Statement(Step to the next statement),进入下一个状态,跟第4个图标功能差不多。 第8个图标是Run to Cursor(Execute to the current cursor position),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有光标即可(注意,程序不能倒着执行,也就是能往回设置) ![]() 然后点击此图标即可,可以看到前面多了一个绿色的小箭头,说明已经运行到此行 ' e1 j# ^: y/ _ R1 |$ [! n/ w ![]() 4 H1 i6 K% ^6 N' M5 a' u 第9个图标是全速运行。 第10个图标是用于暂停全速运行。 第11个图标是复位调试,重新回到main函数开始执行。. Y/ y) J1 J' k1 u1 j! u$ K4 @ 前面几个图标的功能,大家多测试几次就熟练了。, l( n. _/ l3 @ 7.4.2 外设寄存器的查看 初次使用IAR8的话,容易出现找不到在哪里查看寄存器的问题,首先需要点击这里View ->Register 1 S& u4 n. F- x" K( Z8 M" ~8 o5 t ->Register 1(共提供了四个register窗口,打开那个都行,要查看多个外设时,可以同时打开多个窗口查看): ![]() 给出的都是CPU寄存器: $ g8 Z) r) B: Q1 _# W: X- ^ ![]() 这个并不是我们想要的,还有继续下一步,在红色的方框区域右击: ![]() ![]() 1 P2 i3 E9 C( w1 {3 [. Y3 K 比如查看DAC: ![]() 7.4.3 全局变量的查看5 \8 }' m! ]. v; Y 针对全局变量,IAR提供了专门提供了Watch1, Watch2,Watch3和Watch4窗口,每个窗口可以添加很多变量。从菜单View ->Watch进行添加:! {, a$ P9 u1 ]% V/ E) Q ![]() 3 g: `. k7 u" u$ W) x' i 比如定义了一个全局的32位变量count,用户可以直接在Watch1窗口里面输入此变量: ![]() 也可以在源文件里面,鼠标右击此变量进行添加。调试过程中,这些窗口里面添加的变量是会更新的。但是全速运行状态,这些变量就不会更新,为了解决这个问题,IAR有一个Live Watch可以在全速运行状态查看变化:' ?. U. k9 e" X! ?3 d ![]() & V. Z/ ~ {! ? 用户可以直接在Live Watch窗口里面输入变量查看,如果程序里面做了一个简单的加法计数,就可以在全速调试状态查看此变量的动态变化: 2 s% D& U3 I! L7 h' c- J ![]() 7.4.4 局部变量的查看 针对局部变量,IAR专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,IAR会自动添加。从菜单View ->Locals进行添加窗口:/ D, J5 I8 M! h7 j- y! _1 s ![]() 局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请栈空间,函数退出后,栈空间就会被释放掉。比如main函数里面一个num局部变量0 G" B h6 d& Z; }. q ![]() 7.4.5 Flash区或者RAM区的查看* C5 `4 r% K" A: d3 F$ E 如果要查看Flash区或者RAM区的内容,IAR提供了4个Memory窗口。从菜单View ->Memory进行添加:" E; T! [5 E: r6 m2 R( b5 z # W; a2 e R$ S& B ![]() & J* p: i7 I) U- Z" [ 比如要查看0x2000 0000地址开始的内容,直接输入即可,这个地址是STM32H7的DTCM首地址 ![]() 7.4.6 断点调试 断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加(注意,取消断点也是用的这个图标)。 : V6 e0 z2 B! u& z; m ![]() - L* q' e2 T/ X W, t# z7 G/ T4 N 比如想在79行添加断点。 b7 ^5 |8 q* M# A5 e6 z+ _ ![]() 用户仅需在那行使用鼠标左键点击一下,然后单击断点图标即可,断点设置好的效果如下: ![]() 然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到绿色小箭头也显示在左侧了,说明程序执行到这个地方了(此时还没有执行该语句):- I$ _8 H' T) ^% |0 v+ o9 Q& Y+ X% m) J : @2 ^7 g+ q' _ ![]() ! |5 @9 y1 _4 h* c5 W$ o" e6 q: ~ 7.4.7 动态更新频率设置 IAR有个周期性更新频率设置选项,菜单Tools->Options: 1 d7 r! ]' w" L* X ![]() # s7 o7 o( I0 [' G 单位都是毫秒,最小1ms: ![]() 7.5 总结 对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。# \3 X: k' |/ G % _* H4 A9 y2 K2 O/ L8 e: b- u 2 T' \, v$ C6 W5 |! x+ [ |
【Wio Lite AI视觉开发套件】+移植TensorFlow Lite
STM32H745I-DISCO脉冲宽度调制(PWM)
STM32H745I-DISCO串口通信,输入输出
拷打cubemx【002】——自定义还需基于芯片的工程
STM32硬件结构学习
STM32中BOOT的作用
STM32H7的TCM,SRAM等五块内存基础知识
STM32H7的TCM,SRAM等五块内存基础知识
简单了解一下STM32H7的BDMA
有奖预约 | STM32H7R7基于RT-Thread RTOS的智能终端GUI解决方案