STMCU小助手
发布时间:2022-3-25 13:56
|
01. 概述% g5 c( k% t' _+ M/ W* H 在实际的开发过程中,如果程序比较简单就不需要调试程序,但是对于比较复杂的程序,往往需要通过调试来解决bug。串口只能下载代码,并不能实时跟踪调试,而利用调试工具,比如 JLINK、ULINK、STLINK等就可以实时跟踪程序,从而找到你程序中的 bug,使你的开发事半功倍。 8 u4 n: ^ g: t. z+ w5 w STLINK 支持 JTAG 和 SWD,同时 STM32F4 也支持 JTAG 和 SWD。所以,我们有 2 种方式可以用来调试,JTAG 调试的时候,占用的 IO 线比较多,而 SWD 调试的时候占用的 IO 线很少,只需要两根即可。 1 }1 o5 r. y) n9 O 02. STLINK调试程序; } G7 V" q* U" h: X7 R t/ D 2.1 点击开始调试按钮) T3 K# Y, C; {8 U$ i3 z
编译一下工程。然后点击:(开始/停止仿真按钮),开始仿真(如果开发板的代码没被更新过,则会先更新代码(即下载代码),再仿真,你也可以通过按下载按钮,只下载代码,而不进入仿真。特别注意:开发板上的 B0和 B1 都要设置到 GND,否则代码下载后不会自动运行的!)( b8 q' X z& a2 |( r$ V0 }: \ c 2.2 跳转到主函数执行 $ ?6 f; i2 ?5 x& |5 ^- i# u1 f( I
2.3 Debug工具条介绍/ f0 U' u3 R' `" W; ? ) R6 Q' t k9 ^/ [. t5 ~1 \ 因为我们之前勾选了 Run to main()选项,所以,程序直接就运行到了 main 函数的入口处。另外,此时 MDK 多出了一个工具条,这就是 Debug 工具条,这个工具条在我们仿真的时候是非常有用的,下面简单介绍一下 Debug 工具条相关按钮的功能。
# y O/ q: ]+ J* w6 C 复位:其功能等同于硬件上按复位按钮。相当于实现了一次硬复位。按下该按钮之后,代码会重新从头开始执行。' D! {& k& j2 M) @ 执行到断点处:该按钮用来快速执行到断点处,有时候你并不需要观看每步是怎么执行的,而是想快速的执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是你在查看的地方设置了断点。 停止运行:此按钮在程序一直执行的时候会变为有效,通过按该按钮,就可以使程序停止下来,进入到单步调试状态。# Y9 k9 k+ h9 x1 u: K # R, t( A1 x# Z7 x9 F7 u i 执行进去:该按钮用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同于执行过去按钮的。 执行过去:在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个函数单步执行。 执行出去:该按钮是在进入了函数单步调试的时候,有时候你可能不必再执行该函数的剩余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数,回到函数被调用的位置。6 }; t ]0 @9 R5 V7 e' g# i5 M2 j $ \9 C6 x( t" M4 ?) D4 M 执行到光标处:该按钮可以迅速的使程序运行到光标处,其实是挺像执行到断点处按钮功能,但是两者是有区别的,断点可以有多个,但是光标所在处只有一个。 ( r8 d0 J8 }* F3 w 汇编窗口:通过该按钮,就可以查看汇编代码,这对分析程序很有用。 堆栈局部变量窗口:通过该按钮,显示 Call Stack+Locals 窗口,显示当前函数的局部变量及其值,方便查看。 3 v* z) f& i0 ?' P2 s 观察窗口:MDK5 提供 2 个观察窗口(下拉选择),该按钮按下,会弹出一个显示变量的窗口,输入你所想要观察的变量/表达式,即可查看其值,是很常用的一个调试窗口。' a1 @4 a8 L5 a, m$ s 内存查看窗口:MDK5 提供 4 个内存查看窗口(下拉选择),该按钮按下,会弹出一个内存查看窗口,可以在里面输入你要查看的内存地址,然后观察这一片内存的变化情况。是很常用的一个调试窗口, `0 }0 }' |8 J8 ~ 串口打印窗口:MDK5 提供 4 个串口打印窗口(下拉选择),该按钮按下,会弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容。* q! q6 }+ w1 S 逻辑分析窗口:该图标下面有 3 个选项(下拉选择),我们一般用第一个,也就是逻辑分析窗口(Logic Analyzer),点击即可调出该窗口,通过 SETUP 按钮新建一些 IO 口,就可以观察这些 IO 口的电平变化情况,以多种形式显示出来,比较直观。) \# |& p& Z, c0 d- O7 M3 n& w % E+ q% k! M! M 系统查看窗口:该按钮可以提供各种外设寄存器的查看窗口(通过下拉选择),选择对应外设,即可调出该外设的相关寄存器表,并显示这些寄存器的值,方便查看设置的是否正确。) B- z5 f) V: ?' [7 t& ?, a Debug 工具条上的其他几个按钮用的比较少,我们这里就不介绍了。以上介绍的是比较常用的,当然也不是每次都用得着这么多,具体看你程序调试的时候有没有必要观看这些东西,来决定要不要看。 5 k! D( s* B2 Y% y4 d' { 特别注意:串口打印窗口和逻辑分析窗口仅在软件仿真的时候可用,而 MDK5 对 STM32F4的软件仿真,基本上不支持(故本教程直接没有对软件仿真进行介绍了),所以,基本上这两个窗口用不着。但是对 STM32F1 的软件仿真,MDK5 是支持的,在 F1 开发的时候,可以用到。0 ~, ]' L f/ l5 ~3 Z1 G$ | 1 n. l4 R j7 n* U. C+ h 2.4 设置和取消断点. a% }: s2 [- Q0 m3 ? 我们把光标放到 test.c 的第22行左侧的灰色区域,然后按下鼠标左键,即可放置一个断点(红色的实心点,也可以通过鼠标右键弹出菜单来加入),再次单击则取消。4 k3 S; l% e# [9 o2 {9 M ( M3 b' X, Q l6 V2 g6 |- Y$ w1 M
& H4 ?, |6 f/ O/ Q" V' o 2.5 点击run执行到断点处4 t4 ~: e# K7 T1 d9 z 3 U: i# A* C2 _" Z; G) T 0 \- U3 W3 _, z1 E+ ~6 [% l' q, F- ` 1 e6 A5 d$ s$ _: X1 I3 l1 o 2.6 查看外设信息 点击菜单栏的 Peripherals→System Viewer→GPIO→GPIOF。可以看到,有很多外设可以查看,这里我们查看的是GPIOF 的情况。
9 A# l& M) G) S' ~ 单击 GPIOF后会在 IDE 右侧出现一个如图. `: b% \. {# Y+ b s$ W# y* D
+ a- }( s { H 2.7 执行完初始化) Z+ ~" T3 C. n, x: E
我们可以查看GPIOF 的各个寄存器设置状态,从而判断我们写的代码是否有问题,只有这里的设置正确了之后,才有可能在硬件上正确的执行。同样这样的方法也可以适用于很多其他外设,这个读者慢慢体会吧!这一方法不论是在排错还是在编写代码的时候,都是非常有用的。 2.8 查看栈信息* Y ~0 t* x+ i/ }# `
$ }( F5 {) E- c' \- L |
【经验分享】STM32语音识别的智能蓝牙音箱(源程序+原理图+PCB+设计说明书+PPT)
想找个ST芯片
[GPIO] 使用新型抽象开始C++嵌入式编程,从GPIO开始
技术手册stm32f1xx中的一个小问题
【经验分享】STM32 HAL库移植FreeModbus详细步骤
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
实战经验 | Keil工程使用NEAI库的异常问题
经验分享 | FDCAN数据段波特率增加后发送失败的问题分析
STM32几种流行开发环境的优缺点
好用软件推荐-TouchGFX Designer
微信公众号
手机版