STMCU小助手
发布时间:2021-12-23 15:00
|
7.1 初学者重要提示 Y$ N- b$ ~3 P! O! j 如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。) e9 i9 x* Z. ?8 p 如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。% p' ^( c' F- P8 f* x JLINK无法下载解决思路以及常见问题整理,适用于其它LINK5 y9 L C; `6 v+ J * |0 f9 E; |- s- b 7.2 使用IAR调试和下载程序设置(JLINK)* @% L" H# J) ?! o @ n0 Q 调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。2 k3 Z9 {( _7 ], U8 {" m ) @& J2 k( G( {4 j0 Q 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。" `- ?: i3 a- ~+ d- s. s" X 7.2.1 开发板和JLINK的接线图 开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板:
注意转接板不要插反了: " ^1 v! r8 x8 P( @& C
8 W+ f2 k2 b, S# G* Y) @0 F 7.2.2 设置Options里面的Degubber选项 Debug选项主要用于调试设置。
* m. N; l0 }) y$ p* G 设置完毕后,别忘了点击OK。 ! e4 ? [8 Y: p4 Q* H' V 7.2.3 设置Options里面的JLINK选项: y* I% |8 r i: Z! P& F 注意,在Debugger选择里面选择了JLINK后,才可以设置此选项。Setup部分使用默认配置即可,无需修改:- N1 K0 W! G) j0 U
8 v+ e7 @2 G1 r$ k Connection部分要选择SWD接口: 7 v" K$ U. Q# r7 m- n+ a
设置完毕后别忘了点击OK。( v3 L5 E/ w) S" a% _8 Y) l $ M0 X5 M9 W! \$ v- X1 ]4 O 7.2.4 程序下载, u/ v1 S; i3 u7 e' r4 u" P0 z7 e 前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。菜单Project->download->download Active Application: 5 ?5 g' z, | `
3 ]5 S9 u- d& T+ G4 } 下载成功后将开发板重新上电,可以看到开发板上的LED开始闪烁,IAR的Debug log窗口也有信息展示:& F$ y. N; x8 b/ Y9 F0 r% |1 A
7.3 使用IAR调试和下载程序设置(STLINK)+ ]) _, k2 W2 Q: {: l9 o 调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。5 }8 [* q' {8 b) k/ ^% X 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。 7.3.1 开发板和STLINK的接线图 开发板接上STLINK的效果图如下: ) G8 F2 i- }/ k& Q v7 j
如果是下面这种STLINK,需要接上转接板:- k) r3 D; J# ` ) S3 k7 {1 k+ T( u$ g/ v
" J+ X( U, P% B. o
/ ^: v7 s: u$ }6 f 7.3.2 设置Options里面的Debug选项& _3 S4 p2 c8 f Debug选项主要用调试:! \6 I8 x6 `3 i! z. U/ G7 I! @ 0 h6 W$ S% y+ ~! `" z
* `. @& S6 d3 m 7.3.3 设置Options里面的STLINK选项% h# m d" C D& G 注意,在Debugger选择里面选择了STLINK后,才可以设置此选项。Setup部分选择SWD接口,其它默认即可:. z! t5 [: F$ d# s* q- @( S5 C
2 N" w4 Z$ u6 [, z3 Z G 7.3.4 程序下载 e+ Q7 ~5 V1 q+ {+ C. ^; |8 l 前两步设置好之后,STLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里即可: 5 M- S* B! e; y: G* Y% W/ ^: n& U
下载成功后将开发板重新上电,可以看到开发板上的LED开始闪烁,IAR的Debug log窗口也有信息展示。8 z% z; `- ]. L. s$ N6 D2 }% C & x9 w8 r; p% S
' o7 U, K8 f6 q1 k1 ~+ g' Q 7.4 IAR程序调试 JLINK或者STLINK设置完毕后,调试是一样的。 9 h/ E9 \ I( j, F }% ~ 7.4.1 全速运行和单步调试 点击如下按钮可以进入调试状态(下载程序到芯片同时开启调试):
! b& x) @& U: O) o) \& l 进入调试状态后的效果如下: ( |: k2 w# O! \- M5 v
首先要认识下这11个图标的含义(进入调试状态后,鼠标放在这几个图标上会有提示):
; \+ a- X7 b5 f7 G 第1个图标是重新编译例程并进入调试状态。! ^3 u( V4 M L* E, I2 P 第2个图标是重新进入调试状态。 s% T" L* r; C" U- s 第3个图标是停止调试。 第4个图标是Step Over(Step over the current step point),每次点击以函数为单位运行,不会进入函数内部。 第5个图标是Step Into(Step into the current step point),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。 第6个图标是Step out(Step out of the current line),点击后退出当前运行的函数,执行下一个函数。/ o" e1 T2 A* v9 d: Z% H2 X 第7个图标是Next Statement(Step to the next statement),进入下一个状态,跟第4个图标功能差不多。& h* L! ?! J! J+ n D& e 第8个图标是Run to Cursor(Execute to the current cursor position),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有光标即可(注意,程序不能倒着执行,也就是能往回设置)4 t3 o( T( E6 k @
9 q0 x P, Y# L 然后点击此图标即可,可以看到前面多了一个绿色的小箭头,说明已经运行到此行* T5 ~1 p& H% C1 z; O0 F
第9个图标是全速运行。9 h+ f! V- h( s 第10个图标是用于暂停全速运行。2 F; x8 R& o0 `$ A- U& X: C 第11个图标是复位调试,重新回到main函数开始执行。 前面几个图标的功能,大家多测试几次就熟练了。 , |) S$ k0 _/ S 7.4.2 外设寄存器的查看0 f j3 ?/ v2 @ E 初次使用IAR8的话,容易出现找不到在哪里查看寄存器的问题,首先需要点击这里View ->Register , D, L; i/ }' | f. _' ] ->Register 1(共提供了四个register窗口,打开那个都行,要查看多个外设时,可以同时打开多个窗口查看):1 P ~! P- `2 Q; t( v
' {" I/ y5 Z) K8 z* [ 给出的都是CPU寄存器:0 A5 f2 y" E- y2 ]( o3 O, v
9 Y- o# Y. U) `) o+ ^2 Z* K 这个并不是我们想要的,还有继续下一步,在红色的方框区域右击: ) Y1 u$ ^2 p+ [2 o* p
比如查看DAC:
7.4.3 全局变量的查看( A2 D6 T/ q! Y+ R 针对全局变量,IAR提供了专门提供了Watch1, Watch2,Watch3和Watch4窗口,每个窗口可以添加很多变量。从菜单View ->Watch进行添加:) n& h; a' s }" S8 c2 a & w; ], ~& |3 O
比如定义了一个全局的32位变量count,用户可以直接在Watch1窗口里面输入此变量:% a! j0 V6 X. X: Q 8 E) @; ? s1 k3 i9 t2 a7 }+ e) u
+ H1 c# J3 l; K" N0 k7 X$ W4 ~ 也可以在源文件里面,鼠标右击此变量进行添加。调试过程中,这些窗口里面添加的变量是会更新的。但是全速运行状态,这些变量就不会更新,为了解决这个问题,IAR有一个Live Watch可以在全速运行状态查看变化:
" e. ~. J! S; H* h 用户可以直接在Live Watch窗口里面输入变量查看,如果程序里面做了一个简单的加法计数,就可以在全速调试状态查看此变量的动态变化:
5 F' q6 V, }# a# H) h8 `3 L; E | 7.4.4 局部变量的查看 针对局部变量,IAR专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,IAR会自动添加。从菜单View ->Locals进行添加窗口:4 U9 z6 a" M0 h+ x- @, `$ V " J& V( a y; X0 J: Y2 w6 a2 m
局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请栈空间,函数退出后,栈空间就会被释放掉。比如main函数里面一个num局部变量 9 A6 m+ t: I4 [8 v- S
7.4.5 Flash区或者RAM区的查看 如果要查看Flash区或者RAM区的内容,IAR提供了4个Memory窗口。从菜单View ->Memory进行添加:7 ^* G; l( X7 `+ o6 z( A 3 a4 [. m. Q, |2 H) S1 T) M
% L# F5 q$ n' O5 d* k h& Q* k 比如要查看0x2000 0000地址开始的内容,直接输入即可,这个地址是STM32H7的DTCM首地址 9 Z( x1 W W. u9 ]% m
; p5 C6 w, F, G7 B9 k; C. y 7.4.6 断点调试 断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加(注意,取消断点也是用的这个图标)。 ) ?1 w7 G r1 m9 _) r4 l- V
比如想在79行添加断点。
" S5 ^, Z9 k0 V; |! \5 b$ _ 用户仅需在那行使用鼠标左键点击一下,然后单击断点图标即可,断点设置好的效果如下:
8 A i( q" J' D6 r% Z8 w } 然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到绿色小箭头也显示在左侧了,说明程序执行到这个地方了(此时还没有执行该语句): ; |3 m) U3 D! O+ a3 k p& d3 x8 ?2 Z1 x
! x$ }# h2 i1 T' B6 w 7.4.7 动态更新频率设置1 x6 I+ m2 { }. h- E f" c IAR有个周期性更新频率设置选项,菜单Tools->Options: ! M ?5 H: {3 j1 i) I
单位都是毫秒,最小1ms:3 U0 V M: i/ F6 A7 D
( T- A4 u+ \9 K+ K# c6 u$ ?$ T 7.5 总结 对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。4 C2 A O. U9 b/ W4 a P & E* i. O2 M! k6 U, Q . X7 A; R$ W/ P% ?! S0 d |
【 逢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实现温度、湿度、气压数据读取
微信公众号
手机版