7.1 初学者重要提示; x) f; G! Y8 q& m& V( J/ ` 如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。$ ^& F4 ?) w; R0 o4 |; i4 w3 K 如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。 JLINK无法下载解决思路以及常见问题整理,适用于其它LINK 7.2 使用IAR调试和下载程序设置(JLINK) 调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。 8 d1 }; M6 g) p 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。 * E2 P, x0 C* x$ `, u 7.2.1 开发板和JLINK的接线图' Q6 F- e1 L Q" C6 R 开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板:# B! o/ n$ Z4 V5 n: d 9 \2 C( r1 P* e3 g/ ~1 M+ G 注意转接板不要插反了: 7.2.2 设置Options里面的Degubber选项 C2 H" H6 I. ^* ? Debug选项主要用于调试设置。9 J# s5 J' {+ d5 O& _ Q 设置完毕后,别忘了点击OK。. c: l$ W' {5 V9 v8 J3 R, | $ a* W8 [1 B, t1 C" O* b$ ? 7.2.3 设置Options里面的JLINK选项 注意,在Debugger选择里面选择了JLINK后,才可以设置此选项。Setup部分使用默认配置即可,无需修改: ( f3 ?* S/ d3 E" o% A7 e S, L # e" b7 K) {0 N9 }- o1 `8 } x/ c9 u0 c Connection部分要选择SWD接口:: f% n4 w K. f9 T . c o2 _2 R6 \) _) ]6 X 设置完毕后别忘了点击OK。 6 ~; T1 k9 y5 d$ g5 g2 u1 G 7.2.4 程序下载 前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。菜单Project->download->download Active Application: & {6 }( |0 B6 M9 M3 ^$ P% I' D3 ] Z0 U0 C+ }% x1 t6 o 下载成功后将开发板重新上电,可以看到开发板上的LED开始闪烁,IAR的Debug log窗口也有信息展示: " N) x6 ] W3 @( C 7.3 使用IAR调试和下载程序设置(STLINK) 调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。9 i6 x8 p6 P, X; g( L1 M 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。" s; e$ T0 }5 V& ? 7.3.1 开发板和STLINK的接线图& \: |' c( v5 m2 k0 K 开发板接上STLINK的效果图如下:' l1 Q B2 @. n: _. c 0 ^3 K+ i% C/ _5 h, M& I& ?' E9 P* ] 如果是下面这种STLINK,需要接上转接板: 4 c+ A. e) \( S# Q: D ! N- k* e( z' i* I 7.3.2 设置Options里面的Debug选项* Z8 v6 n$ ~. b# Y& y5 _3 y# u: Q Debug选项主要用调试: ! [. P- E; f) C 7.3.3 设置Options里面的STLINK选项 注意,在Debugger选择里面选择了STLINK后,才可以设置此选项。Setup部分选择SWD接口,其它默认即可:9 _2 [8 P3 U+ r! [; g1 h6 T- f 7.3.4 程序下载 前两步设置好之后,STLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里即可:8 E0 g) ~2 r- l. @; [5 T S% h6 o2 x0 |" C4 b 下载成功后将开发板重新上电,可以看到开发板上的LED开始闪烁,IAR的Debug log窗口也有信息展示。 6 B# g7 A8 w# v3 f 9 N/ p: i* U) r; h: @. p# k 7.4 IAR程序调试/ z6 ^5 @4 [5 U# _ JLINK或者STLINK设置完毕后,调试是一样的。7 ?1 N5 M! s; g. s5 W- B" b/ d 7.4.1 全速运行和单步调试 点击如下按钮可以进入调试状态(下载程序到芯片同时开启调试): # _! C, p N) N& w& t K 进入调试状态后的效果如下:' f) t9 Z1 `( Y! c; a6 C2 k/ O 2 f" c) q2 a$ H( C# ` : l% j2 {1 j1 |' G5 \! k5 T 首先要认识下这11个图标的含义(进入调试状态后,鼠标放在这几个图标上会有提示):, H7 t. H% e1 F$ [$ \1 d 第1个图标是重新编译例程并进入调试状态。 第2个图标是重新进入调试状态。6 R+ W) [- L9 Y* F# @ 第3个图标是停止调试。 第4个图标是Step Over(Step over the current step point),每次点击以函数为单位运行,不会进入函数内部。+ }/ e. _6 y7 V% Q% ~, ]6 r, D4 O9 {+ F 第5个图标是Step Into(Step into the current step point),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。 第6个图标是Step out(Step out of the current line),点击后退出当前运行的函数,执行下一个函数。 第7个图标是Next Statement(Step to the next statement),进入下一个状态,跟第4个图标功能差不多。 第8个图标是Run to Cursor(Execute to the current cursor position),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有光标即可(注意,程序不能倒着执行,也就是能往回设置)8 t8 X% ]5 Y8 r 然后点击此图标即可,可以看到前面多了一个绿色的小箭头,说明已经运行到此行 : u+ v* {& T0 F 第9个图标是全速运行。 第10个图标是用于暂停全速运行。; L6 O; s* q" f4 Y* ^! T 第11个图标是复位调试,重新回到main函数开始执行。 前面几个图标的功能,大家多测试几次就熟练了。 4 n# W4 ^; y A9 i5 D; @ 7.4.2 外设寄存器的查看* [6 c5 ]- n# T- U3 q 初次使用IAR8的话,容易出现找不到在哪里查看寄存器的问题,首先需要点击这里View ->Register ->Register 1(共提供了四个register窗口,打开那个都行,要查看多个外设时,可以同时打开多个窗口查看):3 E9 e7 V5 U7 b8 m8 E 给出的都是CPU寄存器: 3 T l0 B5 i. l( Z9 D 这个并不是我们想要的,还有继续下一步,在红色的方框区域右击:& V; }+ m3 F( j) ?9 j( j* ^7 f 7 g a6 J4 _" P; H$ h/ w$ w 比如查看DAC: : c6 g7 v1 g& P. t9 t 7.4.3 全局变量的查看6 Q3 l# o+ |% L7 k9 r% o, S 针对全局变量,IAR提供了专门提供了Watch1, Watch2,Watch3和Watch4窗口,每个窗口可以添加很多变量。从菜单View ->Watch进行添加: # [2 z8 ?8 j+ N 比如定义了一个全局的32位变量count,用户可以直接在Watch1窗口里面输入此变量:- ` M. P: r3 V: a 1 l3 v" }2 U! l9 w$ E3 F& B" b 也可以在源文件里面,鼠标右击此变量进行添加。调试过程中,这些窗口里面添加的变量是会更新的。但是全速运行状态,这些变量就不会更新,为了解决这个问题,IAR有一个Live Watch可以在全速运行状态查看变化: $ k5 R( s1 D4 V3 U* n 用户可以直接在Live Watch窗口里面输入变量查看,如果程序里面做了一个简单的加法计数,就可以在全速调试状态查看此变量的动态变化:2 e5 M6 Q: o$ v4 q ; m8 V0 r F% H! ?3 o$ z" E6 ] 7.4.4 局部变量的查看 针对局部变量,IAR专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,IAR会自动添加。从菜单View ->Locals进行添加窗口:1 w/ H- k$ J. l4 h6 S 5 d) Y/ P8 B8 {# V4 y8 E1 m 局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请栈空间,函数退出后,栈空间就会被释放掉。比如main函数里面一个num局部变量7 w; P8 {8 C+ e& Z7 X & `. [" r5 K( s v8 |8 Z) C( z 2 Q9 S$ k: o ]: Y& b! |( P/ s+ j, A 7.4.5 Flash区或者RAM区的查看 如果要查看Flash区或者RAM区的内容,IAR提供了4个Memory窗口。从菜单View ->Memory进行添加:$ Q" w! i' s7 {& Q( O+ o L 比如要查看0x2000 0000地址开始的内容,直接输入即可,这个地址是STM32H7的DTCM首地址 6 d0 w0 i2 K( S: r0 Z$ F1 ? 1 Y$ |5 ?& X* c( t- B1 V' h 7.4.6 断点调试; Y; p& b+ [- p5 q# ]& t) ]# t 断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加(注意,取消断点也是用的这个图标)。 9 ?1 V' W2 t* v% h9 S 比如想在79行添加断点。5 o2 ~; t9 C5 ]) ? 3 o3 P; a# S o! i0 Q D6 q% T 1 a+ D% n" B1 r( d% A2 b2 C 用户仅需在那行使用鼠标左键点击一下,然后单击断点图标即可,断点设置好的效果如下:1 _0 h, I* o$ j1 m6 i 1 n! f4 {: F' u1 q $ J' |- d) u; T; H! a' H 然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到绿色小箭头也显示在左侧了,说明程序执行到这个地方了(此时还没有执行该语句): + [! D+ V8 q! z) V) _ 7.4.7 动态更新频率设置) x( G @8 u% z/ \4 W IAR有个周期性更新频率设置选项,菜单Tools->Options:' p1 b, d! w1 j+ ?3 X4 L' U % i8 F& V0 d5 D 单位都是毫秒,最小1ms: 5 `: N- U9 V' d1 Z. _ 7.5 总结 对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。. e$ t5 ]' d/ w% g8 m & y" e. M% C0 _+ H. J, k; x6 t, n |
stm32使用定时器触发dma传输,启动dma没反应的几种情况的解决方法
【Wio Lite AI视觉开发套件】+cube.ai与食物识别
【STM32H7S78-DK】汽车仪表系统
【STM32H7S78-DK】基于 rtthread 适配 lcd 驱动移植 lvgl
【STM32H7S78-DK评测】TouchGFX (QR Code)二维码生成器
【STM32H7S78-DK】rtthread 增加 psram 内存管理
【STM32H7S78-DK】开箱与rtthread工程初体验
【STM32H7S78-DK评测】-5 LVGL&DMA2D DEMO测试
【STM32H7S78-DK评测】-4 LTDC&DMA2D 基本测试
【STM32H7S78-DK评测】CoreMark移植和优化--兼记printf重定向实现方法及常见问题