STMCU小助手
发布时间:2021-12-23 15:00
|
7.1 初学者重要提示 Z2 |6 u4 ^$ ?* K, K: T 如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。 如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。 JLINK无法下载解决思路以及常见问题整理,适用于其它LINK/ @+ h8 t# y/ \9 n$ a# e ; L+ p K4 m. u% R 7.2 使用IAR调试和下载程序设置(JLINK) 调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。' D/ U1 G3 U+ W" c 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。 - N( o s9 `) h* M6 y4 G" P, e% w 7.2.1 开发板和JLINK的接线图1 O/ ^% G! @7 I 开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板:# S4 {& Z7 I* e# w% e/ ^
注意转接板不要插反了: 2 @1 m, Y* b9 v6 D
6 ~/ M5 P0 r; _ 7.2.2 设置Options里面的Degubber选项% M$ \; g4 ^. I8 H Debug选项主要用于调试设置。; s: B+ H2 |; i+ [0 ?3 o : a4 ^1 _4 W f* J6 l. _( \
. J# c2 Z* {# N( ` 设置完毕后,别忘了点击OK。. @+ |8 M8 D- u6 K 7.2.3 设置Options里面的JLINK选项 注意,在Debugger选择里面选择了JLINK后,才可以设置此选项。Setup部分使用默认配置即可,无需修改: 1 v& U: D) f& [% a9 I2 v
Connection部分要选择SWD接口:' D5 H4 {; E. p' Z / G9 R, }. P# h* w7 N5 n2 c
2 X7 ~! J* v+ F! g- I 设置完毕后别忘了点击OK。) K1 M& l, F' K7 {# D8 g : R2 D E+ W: P6 K* k8 f! L 7.2.4 程序下载 前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。菜单Project->download->download Active Application:
- S3 l! e& x3 @4 l 下载成功后将开发板重新上电,可以看到开发板上的LED开始闪烁,IAR的Debug log窗口也有信息展示:8 S, }5 K! _! I. L 7 ~6 ]6 W: ^+ } P
7.3 使用IAR调试和下载程序设置(STLINK), C8 k( n/ l% w B8 C 调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。- f5 F. ^: x: G, X: @( g 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。3 `4 T6 w/ \- c; W6 ` A8 M' | 7.3.1 开发板和STLINK的接线图 开发板接上STLINK的效果图如下:, W$ l7 V+ ]6 A; H' V3 U: D * ~/ x x5 W! Y8 ~- ?4 f% s$ i6 R
0 i8 R8 W3 j/ |+ |: I 如果是下面这种STLINK,需要接上转接板:
+ j' y( W, N) R" i% R 7.3.2 设置Options里面的Debug选项& d8 e6 I( o1 M' a, Q Debug选项主要用调试: $ e7 C; B5 C U( B
+ N6 s1 d1 g6 p, _$ i$ ?2 ^' P3 t 7.3.3 设置Options里面的STLINK选项6 P" ?$ f0 ~2 q* d, E 注意,在Debugger选择里面选择了STLINK后,才可以设置此选项。Setup部分选择SWD接口,其它默认即可: 7 f. x+ T3 I! `
6 J" L( ]- k* F+ |. V6 L4 L 7.3.4 程序下载 前两步设置好之后,STLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里即可:) V+ y9 h" q$ u& l$ f; q$ X" x ) d3 d( k9 @- V+ O; F
下载成功后将开发板重新上电,可以看到开发板上的LED开始闪烁,IAR的Debug log窗口也有信息展示。7 W3 X2 n8 N0 @8 |7 v# ? * Q! \, K2 R; p' ]: T3 b# S" H
, I6 v5 T: _5 ?9 j% \ 7.4 IAR程序调试 JLINK或者STLINK设置完毕后,调试是一样的。 7.4.1 全速运行和单步调试5 |* |5 |9 {' }5 f 点击如下按钮可以进入调试状态(下载程序到芯片同时开启调试):+ s+ w8 t/ o$ }5 [+ O- { 3 W+ a$ n" Z& } k- U2 X+ i2 Q
进入调试状态后的效果如下:
6 g& x* Z( m; T$ B) H 首先要认识下这11个图标的含义(进入调试状态后,鼠标放在这几个图标上会有提示): + Q7 I8 @6 m/ s
" F: d3 s3 _' H V. x* |0 c# ]3 m 第1个图标是重新编译例程并进入调试状态。 第2个图标是重新进入调试状态。! p) z& C9 H' [3 F }$ L- p8 x9 T 第3个图标是停止调试。 第4个图标是Step Over(Step over the current step point),每次点击以函数为单位运行,不会进入函数内部。 第5个图标是Step Into(Step into the current step point),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。& b9 b b$ o& y) z 第6个图标是Step out(Step out of the current line),点击后退出当前运行的函数,执行下一个函数。. w1 z& o" J) i) f, U 第7个图标是Next Statement(Step to the next statement),进入下一个状态,跟第4个图标功能差不多。 第8个图标是Run to Cursor(Execute to the current cursor position),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有光标即可(注意,程序不能倒着执行,也就是能往回设置)
9 H9 [5 ?& m& G' _6 R; n; ~1 O$ S 然后点击此图标即可,可以看到前面多了一个绿色的小箭头,说明已经运行到此行 8 n1 r+ \' a3 Q) o: n
第9个图标是全速运行。 第10个图标是用于暂停全速运行。! p+ a9 B* e; | A- z: J 第11个图标是复位调试,重新回到main函数开始执行。 前面几个图标的功能,大家多测试几次就熟练了。0 o% g" g1 t; A" c ! V7 M) }, G) Z 7.4.2 外设寄存器的查看 初次使用IAR8的话,容易出现找不到在哪里查看寄存器的问题,首先需要点击这里View ->Register 3 U6 g* l ]% @ A( _* e( P ->Register 1(共提供了四个register窗口,打开那个都行,要查看多个外设时,可以同时打开多个窗口查看):7 b4 Y* M2 Z8 y* T( t
给出的都是CPU寄存器:0 h; h2 I6 @# c. T) J" S % |- h: h0 [8 d6 s8 G; {
这个并不是我们想要的,还有继续下一步,在红色的方框区域右击:& y: Y; B1 F; g # p- ^1 e- h+ W- L3 X1 \
: X3 Z: x$ d5 ~$ d! `) ^: Z
比如查看DAC:
$ Z' o" I. w: Z. T& W0 x& K* c# r1 R4 Q 7.4.3 全局变量的查看5 v4 a3 ]% Q0 o7 i9 y' F/ _ 针对全局变量,IAR提供了专门提供了Watch1, Watch2,Watch3和Watch4窗口,每个窗口可以添加很多变量。从菜单View ->Watch进行添加:0 [% \0 ^# Q3 j" h, N
/ h G, {" Z& b9 a0 m2 U$ w 比如定义了一个全局的32位变量count,用户可以直接在Watch1窗口里面输入此变量: r3 G0 O x) z. q0 U5 M
0 I# w: `7 B5 a 也可以在源文件里面,鼠标右击此变量进行添加。调试过程中,这些窗口里面添加的变量是会更新的。但是全速运行状态,这些变量就不会更新,为了解决这个问题,IAR有一个Live Watch可以在全速运行状态查看变化:
用户可以直接在Live Watch窗口里面输入变量查看,如果程序里面做了一个简单的加法计数,就可以在全速调试状态查看此变量的动态变化:
7.4.4 局部变量的查看 针对局部变量,IAR专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,IAR会自动添加。从菜单View ->Locals进行添加窗口:1 T* `& F8 r# u/ j6 h: C # \6 f0 v# n# C% f
) w4 [* ?( O& y; I% D2 _ 局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请栈空间,函数退出后,栈空间就会被释放掉。比如main函数里面一个num局部变量 ) I: h( X7 _, G# u! q/ V; T, j
- e; y. m' j: y6 z* I2 \ 7.4.5 Flash区或者RAM区的查看 如果要查看Flash区或者RAM区的内容,IAR提供了4个Memory窗口。从菜单View ->Memory进行添加:5 {3 \3 r0 C$ ]& x3 y& D ' [, J) C3 k4 a8 g
比如要查看0x2000 0000地址开始的内容,直接输入即可,这个地址是STM32H7的DTCM首地址 ' S/ P9 c! ]) \1 q
7.4.6 断点调试 断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加(注意,取消断点也是用的这个图标)。 0 }4 c0 Q: k; p/ T
比如想在79行添加断点。 5 e! \. h6 J5 ~+ @# Q! X) Y2 O# _$ K/ _
用户仅需在那行使用鼠标左键点击一下,然后单击断点图标即可,断点设置好的效果如下:. Q5 `) P' j k( T! Y . Z" X* I7 Q7 a+ p) u" x; C: ?: N
然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到绿色小箭头也显示在左侧了,说明程序执行到这个地方了(此时还没有执行该语句): - k6 m& C$ q7 t. T$ ~% V
7.4.7 动态更新频率设置6 z7 l5 n p6 H8 Q8 K* M \$ z IAR有个周期性更新频率设置选项,菜单Tools->Options:
Y9 V7 e0 G5 {1 O! z7 u( G 单位都是毫秒,最小1ms: 4 x l2 n2 S0 K" z) D
" p- l; s6 [; N1 ?4 J& O; U 7.5 总结 对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。 0 `( d T0 \$ N% | ; ^/ j) g/ A* ]/ `7 E8 @" b |
【 逢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实现温度、湿度、气压数据读取
微信公众号
手机版