7.1 初学者重要提示 如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。9 x2 e: V1 s' {6 A$ j( H6 d/ m 如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。$ ]) H f) F1 [7 ?$ u& J3 B JLINK无法下载解决思路以及常见问题整理,适用于其它LINK% ]+ }6 w) E" L, ] u. i) m) j, T 7.2 使用IAR调试和下载程序设置(JLINK) 调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。2 i' a- s. @7 L5 }4 u& I e+ D9 l Y( R( H 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。7 k+ G3 \8 H! T2 K& P( s ( F2 G& @, G8 P( z/ t 7.2.1 开发板和JLINK的接线图 开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板: : }& F* h7 f8 @( v' K 注意转接板不要插反了:1 T- U1 C2 D8 `/ H' p 4 w4 e7 Z- h* I3 C4 J / Y& b' ?$ V$ K0 w 7.2.2 设置Options里面的Degubber选项 Debug选项主要用于调试设置。) R. x( I& B) U1 k3 p * m+ N- T5 k5 R/ ^$ J$ ], @ 0 V# }" N4 |, h0 [* V5 T 设置完毕后,别忘了点击OK。 0 b, }. }8 O9 I* o9 V0 I 7.2.3 设置Options里面的JLINK选项; x+ K* B/ a" ` 注意,在Debugger选择里面选择了JLINK后,才可以设置此选项。Setup部分使用默认配置即可,无需修改: Connection部分要选择SWD接口: / m6 B; `' X, k, i0 y' _ 设置完毕后别忘了点击OK。) t L( a3 l/ I" K9 k0 h' ] 7.2.4 程序下载 前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。菜单Project->download->download Active Application: 下载成功后将开发板重新上电,可以看到开发板上的LED开始闪烁,IAR的Debug log窗口也有信息展示: 7.3 使用IAR调试和下载程序设置(STLINK) 调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。# H* t% G/ Y9 P# {3 k 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。 7.3.1 开发板和STLINK的接线图$ i) f' Q* ~/ o. B7 Q4 p- n( V0 z, } 开发板接上STLINK的效果图如下:- n( Z; o8 S/ F7 ` # z, p& d% E, h O) } 如果是下面这种STLINK,需要接上转接板: 6 f; {' e8 o8 n5 Q 7.3.2 设置Options里面的Debug选项* b' f5 W9 Y) a Debug选项主要用调试: 1 W- y% R5 ]8 f) T' a+ p 7.3.3 设置Options里面的STLINK选项 注意,在Debugger选择里面选择了STLINK后,才可以设置此选项。Setup部分选择SWD接口,其它默认即可: Z# y) |3 B9 W( Y% |8 H " X0 L2 Y) A& X$ E; i 2 @8 J2 u( E( M 7.3.4 程序下载$ M) m. u6 t* P) _& S7 [; w 前两步设置好之后,STLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里即可: 9 a5 M( l0 i9 n+ t/ [ 下载成功后将开发板重新上电,可以看到开发板上的LED开始闪烁,IAR的Debug log窗口也有信息展示。+ L7 }2 E; r5 q+ N& z ' O$ n) ?! s" c" F3 W1 l 7.4 IAR程序调试 JLINK或者STLINK设置完毕后,调试是一样的。 3 q* a9 q0 N; g' R$ X: a5 I8 b- w 7.4.1 全速运行和单步调试 点击如下按钮可以进入调试状态(下载程序到芯片同时开启调试): 7 G- c5 R' ? e7 z' {3 c! K 进入调试状态后的效果如下:2 q" N: u7 l7 V% b% E* Y 首先要认识下这11个图标的含义(进入调试状态后,鼠标放在这几个图标上会有提示):" w: B( e* L& u 第1个图标是重新编译例程并进入调试状态。- p# b6 V/ p6 a: U! Z 第2个图标是重新进入调试状态。" V- ~0 P. h- N1 T 第3个图标是停止调试。 第4个图标是Step Over(Step over the current step point),每次点击以函数为单位运行,不会进入函数内部。 第5个图标是Step Into(Step into the current step point),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。- M: W9 {) _- _/ y# Y+ y0 L 第6个图标是Step out(Step out of the current line),点击后退出当前运行的函数,执行下一个函数。/ o* t: W8 g: ~. M4 _ 第7个图标是Next Statement(Step to the next statement),进入下一个状态,跟第4个图标功能差不多。 第8个图标是Run to Cursor(Execute to the current cursor position),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有光标即可(注意,程序不能倒着执行,也就是能往回设置) 然后点击此图标即可,可以看到前面多了一个绿色的小箭头,说明已经运行到此行) x' z5 U2 w$ k! p; f" W 第9个图标是全速运行。* i; E' X. a: t: V 第10个图标是用于暂停全速运行。 第11个图标是复位调试,重新回到main函数开始执行。0 T q3 v" w3 D7 f/ y 7 p8 ~) s5 i N9 L6 b8 U$ N 前面几个图标的功能,大家多测试几次就熟练了。 7 x5 Y0 n0 @- t, N 7.4.2 外设寄存器的查看" U# |4 y- R5 k 初次使用IAR8的话,容易出现找不到在哪里查看寄存器的问题,首先需要点击这里View ->Register ->Register 1(共提供了四个register窗口,打开那个都行,要查看多个外设时,可以同时打开多个窗口查看): % ]( k, ~; w4 S2 ]4 c! S 2 J4 F: G5 z3 z4 z 给出的都是CPU寄存器:9 R0 d' M% c4 P5 h U. V- X" u) k + r1 \/ l5 R# R4 i3 n- D 这个并不是我们想要的,还有继续下一步,在红色的方框区域右击: E6 X$ L4 k( |7 g4 A3 u " \0 v! l: z O& i; f% } 3 w7 ]1 ~) a" R% K6 b9 f& n0 y 比如查看DAC:8 F D t) @5 E, E+ K 5 @6 m0 `. a8 W/ `, \+ Q) e 7.4.3 全局变量的查看 针对全局变量,IAR提供了专门提供了Watch1, Watch2,Watch3和Watch4窗口,每个窗口可以添加很多变量。从菜单View ->Watch进行添加: - B# M) g6 N$ i8 F ! O6 \& m# d5 i8 B- F/ c1 u 比如定义了一个全局的32位变量count,用户可以直接在Watch1窗口里面输入此变量:# [7 W6 I2 y* Z C i. F - s0 K! n$ D3 c4 v 也可以在源文件里面,鼠标右击此变量进行添加。调试过程中,这些窗口里面添加的变量是会更新的。但是全速运行状态,这些变量就不会更新,为了解决这个问题,IAR有一个Live Watch可以在全速运行状态查看变化: : K& @$ p$ b6 e- T- H 用户可以直接在Live Watch窗口里面输入变量查看,如果程序里面做了一个简单的加法计数,就可以在全速调试状态查看此变量的动态变化: * _' _0 D* \1 B& y " x/ R: k7 e; O& X" { 7.4.4 局部变量的查看1 W I+ d( w7 s& g 针对局部变量,IAR专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,IAR会自动添加。从菜单View ->Locals进行添加窗口: + o0 C8 p& s& E& [. T- D5 a9 M 0 E% ~: p( a+ L; { 局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请栈空间,函数退出后,栈空间就会被释放掉。比如main函数里面一个num局部变量, Q5 t% t& m8 _3 Y : b1 b5 Z. A# | t8 }. N 7.4.5 Flash区或者RAM区的查看# b4 G) k' _8 m% @ 如果要查看Flash区或者RAM区的内容,IAR提供了4个Memory窗口。从菜单View ->Memory进行添加: : C) U P% s: a) G& M8 S# H 比如要查看0x2000 0000地址开始的内容,直接输入即可,这个地址是STM32H7的DTCM首地址 + ]: _7 Q! z; e' j7 Z' Y! t& b 7.4.6 断点调试 断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加(注意,取消断点也是用的这个图标)。 比如想在79行添加断点。, x; i0 z; r& M* X; |5 `/ X( M 用户仅需在那行使用鼠标左键点击一下,然后单击断点图标即可,断点设置好的效果如下:# N& [; H+ m0 A- g4 c 6 |/ N8 S# W. D; w, Z1 Y" e5 G ' p$ y; D* W0 H8 F& `, X+ B 然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到绿色小箭头也显示在左侧了,说明程序执行到这个地方了(此时还没有执行该语句):8 I$ D+ ~+ w! x1 E( r W 4 P+ b* j7 }# j# p 9 L) D: j8 r& w6 p( u7 y+ O 7.4.7 动态更新频率设置 IAR有个周期性更新频率设置选项,菜单Tools->Options: 3 j8 G' U j4 s2 o, U, d* G4 U2 E3 x 单位都是毫秒,最小1ms:1 ~0 G5 X! k4 ?: r- l + Q) W6 T/ t R8 J$ v; N 8 j/ P" _! _" O5 y 7.5 总结 对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。* }$ m0 D) H) i9 `4 C 5 A) P% n) Z" o6 a+ l' z : I U; Q1 s c |
【经验分享】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位定时设置注意事项