7.1 初学者重要提示: ?9 T+ N0 E% k& q3 a( k8 @ 如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。! @' p0 Q2 V) _ K 如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。 JLINK无法下载解决思路以及常见问题整理,适用于其它LINK 8 x8 V' Z4 q* X3 W, x* E3 f 7.2 使用IAR调试和下载程序设置(JLINK) 调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。2 B- s* A7 Y# e- h* B( D1 n, [$ P 8 T: {1 S6 R) w/ Z" i4 x- {! s 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。! S* {7 O h! N' ^2 l ( J$ x% l3 h( o1 o7 h2 O2 ] 7.2.1 开发板和JLINK的接线图 开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板:9 t$ [* \) `+ K- ] " `4 o- {0 P* W, d: n, I 5 N9 {4 B- h5 b. [/ `4 M8 @9 ^0 Z- } 注意转接板不要插反了:# V- L. W) ?, D& d6 A7 H) C. { 7.2.2 设置Options里面的Degubber选项 Debug选项主要用于调试设置。6 O: r' }( F3 R7 U$ D: J/ K- s 设置完毕后,别忘了点击OK。2 S0 K" ]: k" C 2 b8 p4 X. s, I0 o X. X8 |6 d 7.2.3 设置Options里面的JLINK选项" h) M- i% j. V# f, G/ x 注意,在Debugger选择里面选择了JLINK后,才可以设置此选项。Setup部分使用默认配置即可,无需修改: 9 L& Y/ e/ D0 \ u* Y 0 M1 R, q4 b! ^# W9 g Connection部分要选择SWD接口:8 T& k! d/ r3 f 7 V o# E* s% B/ i 设置完毕后别忘了点击OK。 7.2.4 程序下载 前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。菜单Project->download->download Active Application:8 }" b/ m* {& X3 `$ w n0 [- R5 H ) Q: i5 l$ r& _: K0 W( U% @( { " w- T- F8 g" w5 y. A. Q: ~ 下载成功后将开发板重新上电,可以看到开发板上的LED开始闪烁,IAR的Debug log窗口也有信息展示: / M& e/ n2 ?/ q- z4 r" F 7.3 使用IAR调试和下载程序设置(STLINK) 调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。: [, a( [, ?4 ^! r 在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。1 k- c4 J1 f/ s) ~# y9 K0 K 7.3.1 开发板和STLINK的接线图 开发板接上STLINK的效果图如下: " h) k( Q% y" Y' ] 如果是下面这种STLINK,需要接上转接板:* T2 d9 Z, }# ?" ^# G- s. m: Q " N* X0 L$ x1 Y' w! v# V" y& @: ]' r & W8 m* Q% h% P, ^! l4 [4 ]! G" _ 7.3.2 设置Options里面的Debug选项/ `* g& b' z% F Debug选项主要用调试: - E" R, R8 T N. Q! F' q 7.3.3 设置Options里面的STLINK选项( c$ L3 `1 N" h J" I# c& f. H 注意,在Debugger选择里面选择了STLINK后,才可以设置此选项。Setup部分选择SWD接口,其它默认即可: & O. s; ^3 n& m 7.3.4 程序下载8 i# |$ r1 T+ j; O 前两步设置好之后,STLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里即可:& }5 z- ?( S6 q. O* z ! a, K" \! O! f8 x! ~9 o7 w: l 下载成功后将开发板重新上电,可以看到开发板上的LED开始闪烁,IAR的Debug log窗口也有信息展示。! K z2 |& |5 H3 A) F 9 B6 D- ]0 Q5 T8 M% c b w 7.4 IAR程序调试& H, h& ^7 e! S3 b X: R; @ JLINK或者STLINK设置完毕后,调试是一样的。3 u% }6 R; h4 Q2 T2 f. T 7.4.1 全速运行和单步调试 点击如下按钮可以进入调试状态(下载程序到芯片同时开启调试): ! I( Q( A( I. o) j/ u ) B5 x: O$ K2 i" \' U# { 进入调试状态后的效果如下:+ R8 r4 t) V# S i$ j" S 3 C8 r2 t$ w6 ^ ) I: s2 z" ~3 V m 首先要认识下这11个图标的含义(进入调试状态后,鼠标放在这几个图标上会有提示): 第1个图标是重新编译例程并进入调试状态。% T o) G7 @0 O G5 D" w( o 第2个图标是重新进入调试状态。, t8 i& k+ X# T$ {; i, N7 U 第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),点击后退出当前运行的函数,执行下一个函数。8 {9 ~, l& F9 M' \) b* n% B3 |5 } 第7个图标是Next Statement(Step to the next statement),进入下一个状态,跟第4个图标功能差不多。7 B3 a% v' r8 o$ A) i) l6 F 第8个图标是Run to Cursor(Execute to the current cursor position),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有光标即可(注意,程序不能倒着执行,也就是能往回设置) : r# K3 z0 k) O* m 然后点击此图标即可,可以看到前面多了一个绿色的小箭头,说明已经运行到此行0 D; A& M0 ?; C; u2 l 6 s6 {2 [& ?0 n 第9个图标是全速运行。 第10个图标是用于暂停全速运行。 第11个图标是复位调试,重新回到main函数开始执行。5 s/ J ?2 t; P9 K2 p& W 前面几个图标的功能,大家多测试几次就熟练了。& e, a3 a( `" `* e 0 W& E, F8 I. z( n 7.4.2 外设寄存器的查看! G, @$ F8 s/ H: t' ~7 { 初次使用IAR8的话,容易出现找不到在哪里查看寄存器的问题,首先需要点击这里View ->Register ->Register 1(共提供了四个register窗口,打开那个都行,要查看多个外设时,可以同时打开多个窗口查看): , b6 }& x; k" _: f( `% ~) w- z % |, k; u6 D; X 给出的都是CPU寄存器: 8 A, L4 f) F/ W* q. W0 d# n8 Y" I 这个并不是我们想要的,还有继续下一步,在红色的方框区域右击:- X4 s* u/ C. c2 ]- o: q0 x4 s $ f0 ] w, e# T% o- g - y5 g( O0 ]* U7 e: i; c - U L5 i; E8 M8 \ 比如查看DAC: F# G: Y/ h% {( W3 m6 H; L1 }! } - k* E3 J# x+ f8 V: a6 x( ?# _ 7.4.3 全局变量的查看5 U! m" {' H% E; X 针对全局变量,IAR提供了专门提供了Watch1, Watch2,Watch3和Watch4窗口,每个窗口可以添加很多变量。从菜单View ->Watch进行添加:# b( q( o5 _# h# x+ F0 u" J1 n) G 比如定义了一个全局的32位变量count,用户可以直接在Watch1窗口里面输入此变量: 8 M: {3 U* y6 O& F( C" H! R 也可以在源文件里面,鼠标右击此变量进行添加。调试过程中,这些窗口里面添加的变量是会更新的。但是全速运行状态,这些变量就不会更新,为了解决这个问题,IAR有一个Live Watch可以在全速运行状态查看变化: ' A5 Y( e9 q4 h6 @) n. l 用户可以直接在Live Watch窗口里面输入变量查看,如果程序里面做了一个简单的加法计数,就可以在全速调试状态查看此变量的动态变化: 7.4.4 局部变量的查看: c( \, u \: F- n g( f 针对局部变量,IAR专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,IAR会自动添加。从菜单View ->Locals进行添加窗口:6 W, x4 s K" Z , w3 _1 Q8 c x% v: Z: S 局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请栈空间,函数退出后,栈空间就会被释放掉。比如main函数里面一个num局部变量 / Q+ _3 Y2 ^) ]3 n4 s 7.4.5 Flash区或者RAM区的查看 如果要查看Flash区或者RAM区的内容,IAR提供了4个Memory窗口。从菜单View ->Memory进行添加:9 o+ p' t, _" x / ~7 r4 k2 X/ ^8 P- A 比如要查看0x2000 0000地址开始的内容,直接输入即可,这个地址是STM32H7的DTCM首地址. q- E" U4 f L y3 E * m4 _ d7 o: f/ g9 Z: A 7.4.6 断点调试; Q8 g" m/ s/ w W, m" j; Z 断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加(注意,取消断点也是用的这个图标)。 8 T3 b' D! M8 H 比如想在79行添加断点。# ]$ M0 `+ U! g) R3 h 5 C2 d/ P0 D+ D/ R. r 用户仅需在那行使用鼠标左键点击一下,然后单击断点图标即可,断点设置好的效果如下:' J7 ^( I6 K7 Q8 F $ x4 \$ u% K/ w( K" ]1 V. } + k4 R, I; y- G5 F: w- Q 然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到绿色小箭头也显示在左侧了,说明程序执行到这个地方了(此时还没有执行该语句): {+ D" L M8 B, G! N 7.4.7 动态更新频率设置 IAR有个周期性更新频率设置选项,菜单Tools->Options:2 x5 d( f1 d% L5 J3 [% s; G. j: B : F ]3 T) \/ N# ^7 @6 _# {( Y 单位都是毫秒,最小1ms:; e8 ~. N2 e( S7 |; U& k6 {4 k 8 F0 A P3 X! R6 Y8 ^8 _# b0 } 7.5 总结 对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。% J, H2 o% D) w9 ] : t e( ^' P, ]# b) @ 7 } x8 Q7 R: P- p( L1 }5 ] |
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重定向实现方法及常见问题