STMCU小助手
发布时间:2021-12-23 15:00
|
7.1 初学者重要提示 如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。 如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。5 s7 m$ j4 a& _& a, ?/ B1 ? JLINK无法下载解决思路以及常见问题整理,适用于其它LINK( u7 K. Y* H0 t8 z7 G d+ s 7.2 使用IAR调试和下载程序设置(JLINK) 调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。* Z/ f f' Y t3 O _$ H% y! S 6 Q9 O% N, k4 Z; w! E( U/ a 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。2 z9 {) k2 a1 }; k 7.2.1 开发板和JLINK的接线图1 u y$ l0 ]4 P* Q" Z/ _ 开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板:6 g& O# z+ z# \ ' J T3 n. u, @/ P" x
注意转接板不要插反了: : [) W3 b/ u' G, [
. ]* W/ u9 N! |+ ?9 Y 7.2.2 设置Options里面的Degubber选项$ A, F5 g/ ~$ z9 H3 V% } Debug选项主要用于调试设置。
' \+ C1 l6 A% a- r# j9 Z* l' l 设置完毕后,别忘了点击OK。7 q$ R6 X/ e- X& b8 h/ a* l 8 |+ V T7 v7 P 7.2.3 设置Options里面的JLINK选项 注意,在Debugger选择里面选择了JLINK后,才可以设置此选项。Setup部分使用默认配置即可,无需修改:- y C# l3 b% D: a) d, c
: n; ]% [( w& {" b1 Y Connection部分要选择SWD接口:
+ J1 x! q( g+ f) y 设置完毕后别忘了点击OK。 ( s2 @+ P: ^' e o6 N9 @# V! X 7.2.4 程序下载" \# z$ F' Y% x+ Q 前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。菜单Project->download->download Active Application:* A+ C. t8 `' J6 _
下载成功后将开发板重新上电,可以看到开发板上的LED开始闪烁,IAR的Debug log窗口也有信息展示:
4 u6 l R5 P/ k 7.3 使用IAR调试和下载程序设置(STLINK)+ o4 ?2 L. G% j7 b6 K' a: Q' U 调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。$ G7 ^# s; j" j$ e! E 7.3.1 开发板和STLINK的接线图 开发板接上STLINK的效果图如下:! o& z% h- x( U & L" q* j8 @5 n
; o9 d% q6 b5 A& @4 H) a 如果是下面这种STLINK,需要接上转接板:. i$ w- w- g# F) y5 i5 a * b( b0 H7 r9 ^5 P. X
$ ` f4 _+ ~ J7 I+ {, T
7.3.2 设置Options里面的Debug选项6 ?) @* ~# \9 c% ^ Debug选项主要用调试:
: J9 k. I# v: \( X; ] 7.3.3 设置Options里面的STLINK选项9 R# D0 R% J4 O+ S: j 注意,在Debugger选择里面选择了STLINK后,才可以设置此选项。Setup部分选择SWD接口,其它默认即可: : D9 E' ?/ f+ O9 ^, P. L' {
7.3.4 程序下载) [) C% w* [3 S/ d, d 前两步设置好之后,STLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里即可: # N2 ?1 c8 t9 H8 D, S
下载成功后将开发板重新上电,可以看到开发板上的LED开始闪烁,IAR的Debug log窗口也有信息展示。
7.4 IAR程序调试 JLINK或者STLINK设置完毕后,调试是一样的。 7.4.1 全速运行和单步调试 点击如下按钮可以进入调试状态(下载程序到芯片同时开启调试):0 Q, X4 c- B) t# Z/ i% [$ [
$ J; ~+ ]6 W2 z) E$ |' @ 进入调试状态后的效果如下:) H0 K! G+ y' G: x' ]" I u $ F3 X# G6 A3 x3 ^' K+ m' ]0 W: Q9 N
, A+ B6 g, v C! A% e2 } 首先要认识下这11个图标的含义(进入调试状态后,鼠标放在这几个图标上会有提示): , B3 o) |3 J7 y( }
第1个图标是重新编译例程并进入调试状态。" ?6 i* A! U7 |. z 第2个图标是重新进入调试状态。 第3个图标是停止调试。4 T5 U- k F, R( r, K 第4个图标是Step Over(Step over the current step point),每次点击以函数为单位运行,不会进入函数内部。- g9 U+ C; ?( d& m 第5个图标是Step Into(Step into the current step point),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。 第6个图标是Step out(Step out of the current line),点击后退出当前运行的函数,执行下一个函数。, L; \& [/ C' {2 j 第7个图标是Next Statement(Step to the next statement),进入下一个状态,跟第4个图标功能差不多。 第8个图标是Run to Cursor(Execute to the current cursor position),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有光标即可(注意,程序不能倒着执行,也就是能往回设置)- |3 Z0 a/ [4 V2 n9 s, q4 H- k' M ; J# D' i/ V% M- \, q' O; s8 N/ W
( ~3 m2 e% {3 C5 m- M 然后点击此图标即可,可以看到前面多了一个绿色的小箭头,说明已经运行到此行 7 D Y: i% ^% k3 E+ s: A
第9个图标是全速运行。 第10个图标是用于暂停全速运行。 第11个图标是复位调试,重新回到main函数开始执行。 / V7 {5 R: s! ~% H) z 前面几个图标的功能,大家多测试几次就熟练了。9 h$ r& W" w; {0 o4 i' P% P! H 7.4.2 外设寄存器的查看8 s; ^: w/ c, ` n- O$ M, } 初次使用IAR8的话,容易出现找不到在哪里查看寄存器的问题,首先需要点击这里View ->Register - Q) Z( c! C# n/ d7 { ->Register 1(共提供了四个register窗口,打开那个都行,要查看多个外设时,可以同时打开多个窗口查看): : W& V" j, g6 k1 v+ S( ^' R3 ?0 N x
给出的都是CPU寄存器: 6 S% i; C# q0 m. N
+ h& r; Y% g) D3 V; B 这个并不是我们想要的,还有继续下一步,在红色的方框区域右击:9 x* z; ]" ~5 N5 G( k$ G
0 j! o5 E) y0 [. [2 U! n1 \
* y" A2 S$ \! t) Q1 f4 b" N 比如查看DAC:; l" n+ `4 X% g" `; j3 e 4 b( t1 c8 X0 z( {! E! J% P! i# P
m6 H& R3 D, W. s- C. P5 @9 { 7.4.3 全局变量的查看 针对全局变量,IAR提供了专门提供了Watch1, Watch2,Watch3和Watch4窗口,每个窗口可以添加很多变量。从菜单View ->Watch进行添加:) E, ~6 m0 I8 b# r3 w/ t
8 s g" \1 b: [9 k0 U! J# ? 比如定义了一个全局的32位变量count,用户可以直接在Watch1窗口里面输入此变量:: m* h$ p9 c+ V& v4 g, @+ L ! [- A6 [& ^- {- y/ d- B( y
也可以在源文件里面,鼠标右击此变量进行添加。调试过程中,这些窗口里面添加的变量是会更新的。但是全速运行状态,这些变量就不会更新,为了解决这个问题,IAR有一个Live Watch可以在全速运行状态查看变化:, ^6 w. `. } P1 V; O. R* s. T
用户可以直接在Live Watch窗口里面输入变量查看,如果程序里面做了一个简单的加法计数,就可以在全速调试状态查看此变量的动态变化:( ^& L/ s% v/ B8 K1 \' l7 x
7.4.4 局部变量的查看 p/ T# [' ?5 r2 o8 S# n d 针对局部变量,IAR专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,IAR会自动添加。从菜单View ->Locals进行添加窗口: 9 J6 N( t" n( s7 @8 _7 q, ?2 t
局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请栈空间,函数退出后,栈空间就会被释放掉。比如main函数里面一个num局部变量
9 t- a" ^5 R& r8 X 7.4.5 Flash区或者RAM区的查看+ X$ g5 `- M; `0 S/ _+ Y- Z$ i 如果要查看Flash区或者RAM区的内容,IAR提供了4个Memory窗口。从菜单View ->Memory进行添加: - W& f5 S! i+ U* d% d3 C
比如要查看0x2000 0000地址开始的内容,直接输入即可,这个地址是STM32H7的DTCM首地址 0 v1 y& t5 k, B8 Z4 a$ @
' b" N- k9 K' E0 G y6 J 7.4.6 断点调试' x" j' X9 q3 `" F# l+ r4 K 断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加(注意,取消断点也是用的这个图标)。
& p5 J: O ?1 [1 ^8 \; C 比如想在79行添加断点。 8 ~& ~5 q" J) P2 t: g" [
8 T" u- {% l5 k1 e9 q/ u2 V X 用户仅需在那行使用鼠标左键点击一下,然后单击断点图标即可,断点设置好的效果如下:
然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到绿色小箭头也显示在左侧了,说明程序执行到这个地方了(此时还没有执行该语句):
" Q5 J+ k' F& f% p 7.4.7 动态更新频率设置 {9 }# g' t7 {( [ IAR有个周期性更新频率设置选项,菜单Tools->Options:1 I& h& D- _$ b3 n; |" ^* D9 s
单位都是毫秒,最小1ms:+ Q7 S% @5 Z" n T0 @7 q- I
7.5 总结( y# ?1 @2 `+ P; q8 ~ 对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。$ N$ P4 y" b) B9 a Q2 \8 B( A. L D% Q1 ~& P6 Q8 ?5 E 8 V7 A0 q' y0 L# s/ v$ F% s. ^& d& R |
【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实现温度、湿度、气压数据读取
【福利三:逢7发帖赢大礼】成功利用STM32H743VI片内SRAM12和DTCM空间(完全胜利)
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
【福利三:逢7发帖赢大礼】使用惠勤致远STM32H743VI开发板+ST7796并口彩屏移植LVGL9.5并分享一些额外内容
【 逢7发帖赢大礼】7、TouchGFX中实现云彩流动效果
微信公众号
手机版