|
1 程序调试方式 (1) 使用SEGGER J-Flash(J-Link)下载程序到闪存中运行。 (2) 使用串口ISP 来下载HEX 文件到CPU 中运行。 (3) J-Link + MDK 组合,来在线调试程序(可下载、单步调试)。 / t; R$ `( a* p8 P 下载:是将具体的文件如.axf或HEX下载到开发板的flash(SRAM)中去,在开发板启动之后就会运行所下载文件。根据运行结果再将修改的程序下至开发板中运行。
在线调试:通过调试器(如J-Link)将开发板和PC相连,既将程序下载到开发板中运行又能看见程序运行的结果(如变量的值)。 2 MDK-RAM-keil + J-Link在线调试(1) J-Link + 开发板连接PC Figure1:使用在线调试工具J-Link 4 c4 s- ?) @+ u- ?4 _2 y R* r) X3 q4 e. e) Z( B (2) 设置项目编译属性因为是使用J-Link在线调试程序,需要选择J-Link调试工具(建立工程的时候如果设置好了就不用再设置了)。如果J-Link连接开发板的接口为JTAG则PORT要选择”JTAG”。如下图:; Q' x: u/ K/ @% z4 M i Figure2:选择J-Link调试器 & B9 c/ ?6 v. r; N+ e/ \0 `如果“JTAG Device Chain”处有内容则说明检测到了设备。 $ W; y. ?( H' ]" Q R5 k" n ' [* S3 O! [+ U4 Z5 X5 b# _ 还需要在Utilities选项中做一些设置: Figure3:Utilities设置2 r, K% x i) D8 s/ U' _; h. h7 v 在”settings”中,点击”Add”按钮时选中开发板的控制芯片即可。然后点击OK保存。现在就可以进行在线调试了。 (3) 在线调试[1] 单步调试开始调试' u8 J9 k; S) V 程序经1编译通过后(第一个按钮表示只编译当前处在编辑界面的文件,第二个按钮表示编译整个工程中修改过或还未编译过的文件,最后一个按钮表示重新编译所有的文件)。确认J-Link连接完好,开发板已上电后,点击2中的按钮开始/结束在线调试。 Figure4:在线调试开始 ; A1 G: A# ]* H- j1:绿色图标表示光标所在的行,黄色图标处为要运行的下一条语句。在线调试开始时处在mian()入口处。: O4 |* V! a" ]. ^ 2:这是调试开始后弹出的窗口,watch窗口用来观察程序中各种变量的“值”及“类型”,可以在watch窗口中手动添加待观察变量。3 H' W; V% ]7 i! N6 r" p 3:程序中的tx_data为具11个元素的数组,从值可以看出来程序还未运行到175行处。7 d8 O0 F9 z5 A' a 5 L' W9 ^2 i- o0 C: o * N2 B- ~- G5 ?& d 单步调试按钮单步模式下可以点击以下图标让程序往下执行:& F' ` s. w5 B E3 I 以上几个图标对应的快捷键依次是:2 ]# W+ T. E& M+ f3 E- q7 |
按F11到176行时,经执行过得tx_data数组个元素的值就在watch窗口中显示出来。% n6 J) F; B0 f: l, Z- L & _. K$ M9 m, L2 ?+ L 工具栏窗口在“在线调试”状态下,许多“工具栏小窗口”会冒出来。 % C* G4 |. e- [) j: q
* W' Y+ u+ {' P/ z9 [1 \$ W 8 w$ _: h% ~1 v1 J; ~ 查看寄存器值
[2] 设置断点调试单步调试毕竟是单步或者跳过函数的执行。在程序十分庞大时,F系列的键或者鼠标都要被按坏,设置断点后,程序运行到断点处就停下了,然后就可以再用单步调试的方式进行调试。7 ^+ W, r- O7 W" T8 J / x; w6 ?9 I5 Q" I 开始在线调试点击调试按钮开始调试,如图Figure 5。% s6 J8 I5 h0 L* R( ]2 P9 K. x - A4 w9 c' q7 d! g 断点设置到想要运行的代码处设置一个断点。设置断点的方法:
使能/消除使能/移除断点的方法也是以上列举的3点。% \- d6 J9 X( Z& D' Q. G: I5 a% D ' u& A, O; f C $ `5 { Q5 y; W$ O# t 点击Run
# g! q. N" h7 m1 a {' ~ Figure6:断点处5 W+ s9 ~" ^5 G i$ L" D; \4 s ; w' V. p/ s1 S) n# v# q1 k X0 S3 C基本数据类型占内存大小查看将以下变量声明为全局变量后,在Watch窗口中观察的各变量的值。
Watch窗口中各变量的值:5 B- m+ o9 Q# j" R) h, O 4 \1 @& v5 A" L' ^* `7 C Figure7:Cortex-M3 C语言基本类型大小 在keil下的编译器+stm32f10xxx芯片下,char占一个字节,int占4个字节,long占4个字节,long long 占8个字节,float占4个字节,double占8个字节, long double 占8个字节。- D0 U" q8 B# H& ^) I$ r: ~; ~& s |
谢谢楼主 |
| 谢谢楼主分享 |
| 有想法 |
| 没有在RAM中调试吗? |
| 谢谢分享 |
| 入门不错。。。 |
| 好详细的图文教程,顶一个 |
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【福利三:雨露均沾·逢7狂欢】之五:STM32系统时钟PLL故障排除1例
【福利三:雨露均沾·逢7狂欢】之三:AI帮我查BUG
福利三:雨露均沾·逢7狂欢】之二:STM32F407VG串口通信乱码故障的排除
基于STM32F103的I2C主从机通信
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
TFT LCD 与 FSMC 的硬件连接大容量 STM32F10xxx FSMC 接口
单片机:初学者该了解的STM32F103基础知识
2025软件工具兔哥知道
STM32之继电器模块
微信公众号
手机版