调试原理
- STM32F-10X使用M3内核,该内核支持复杂的同i傲视操作,硬件调试模块允许在取指令(指令单步运行)或访问数据(数据断电时)使得内核停止。在内核停止时,内核状态都可被查询,完成查询后内核和外设被复原
- 支持两种操作接口: 串行接口 JTAG调试接口
- 参考:https://www.cnblogs.com/neverguveip/p/9457261.html,https://www.cnblogs.com/neverguveip/p/9457262.html
JTAG
用的计算机的并口,JTAG也是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。但在满足该协议的实际硬件中,添加了电源接口或接地,一般是20引脚、14引脚和10引脚
SWD接口
串行调试(Serial Wire Debug),需要引脚少,与JTAG相比,SWD只需要两根线,分别为:SWCLK和SWDIO。SWDIO–串行数据线,用于数据的读出和写入;SWDCLK–串行时钟线,提供所需要的时钟信号;一般来说,大多数单片机的JTAG接口和SWDIO接口是复用的,SWD也是用J-Link工具来实现的。半导体的ST-Link也是支持SWD模式的
RDI接口:
远程调试接口(Remote Debug Interface),是ARM公司提出的标准调试接口
J-Link
是德国SEGGER公司推出基于JTAG的仿真器。简单地说,是给一个JTAG协议转换盒,即一个小型USB到JTAG的转换盒。JLINK是一个通用的开发工具,可以用于KEIL、IAR、ADS 等平台。速度,效率,功能都很好,据说是众多仿真器里最强悍的
ULINK
是ARM/KEIL公司推出的仿真器,目前网上可找到的是其升级版本,并且仅可以在Keil软件上使用,增加了串行调试(SWD)支持
ST-Link仿真器
是专门针对意法半导体STM8和STM32系列芯片的仿真器。ST-LINK /V2指定的SWIM标准接口和JTAG / SWD标准接口,其主要功能有: - 编程功能:可烧写FLASH ROM、EEPROM、AFR等;
- 仿真功能:支持全速运行、单步调试、断点调试等各种调试方法,可查看IO状态,变量数据等;
- 仿真性能:采用USB2.0接口进行仿真调试,单步调试,断点调试,反应速度快;
- 编程性能:采用USB2.0接口,进行SWIM / JTAG / SWD下载,下载速度快;
进入debug窗口
需要注意硬件连接,一定先使用ST-Link连接好硬件,设置好配置**
实时调试过程中的按钮作用
在线调试按钮功能讲解
按钮名称 | 功能 |
---|---|
复位 | 程序重新开始执行 |
执行到断点 | 执行到程序添加断点的地方 |
停止运行 | 使得程序和硬件同步停止,可以进入一步一步调试, |
执行进去,执行过去,执行出去 | 三个都是针对函数执行来说的 |
执行到光标处 | 有点儿像断点,但光标只能有一个 |
汇编窗口 | 显示汇编窗口 |
堆栈局部变量窗口 | 查看局部变量变化,方便分析 |
观察窗口 | 可单独搜索自己想要查看的变量 |
内存查看窗口 | 可以用来查看内存中某个地址中数值变化,对状态控制时查看情况很好用 |
串口打印窗口 | 出现一个类似串口打印的窗口,显示从串口打印的东西 |
逻辑分析窗口 | 查看IO的电平变化 |
系统查看窗口 | 各种外设寄存器查看窗口 |
一个查看GPIOB_PE5的例子
首先,连接好硬件,keil5的电源debug打开,
按照上图步骤打开GPIOE的监视窗口
从表中可以看出PE5的输出模式是0011,也就是50MHZ的推挽输出模式,ODR寄存器的读取也是1高电平。