STM32入门教程,第10课(下),Keil调试模式

目录

一、Keil调试模式

[1. 仿真方式](#1. 仿真方式)

[2. 编译](#2. 编译)

[3. 调试](#3. 调试)

[3.1 控制程序运行](#3.1 控制程序运行)

[3.2 窗口](#3.2 窗口)

[3.3 菜单栏](#3.3 菜单栏)

[3.4 其他](#3.4 其他)


一、Keil调试模式

大家之后遇到一些复杂的问题,可以考虑一下这个Keil调试模式,说不定就能很方便的解决你的问题。

换一个【3-1 LED闪烁】的工程作为例子。

右键main.c关闭其余窗口。

1. 仿真方式

点击工程选项。

Debug这里可以对调试选项进行配置。这里默认是选择右边ST-Link这一项,这个是在硬件上在线仿真。需要我们把ST-Link和STM32都连接好。

如果你不想连接硬件,也可以选择左边的使用仿真器这个选项。这样就是电脑模拟STM32的运行了。

在此,我们选择右边的硬件在线仿真。然后点击OK。

2. 编译

首先在进入调试模式之前,需要先连接好STM32,之后编译一下,确保工程没有问题。

编译。

编译是没有问题的。

插上ST-LINK。

3. 调试

然后点击这里的放大镜里面带一个d的图标,进入调试模式。

在这个界面里,主窗口就是我们的c语言程序。

上面这个窗口就是c语言翻译成的汇编程序。感兴趣的话,可以对照这里看一下每句c语言实际上都执行了哪些操作。

左边窗口是寄存器组和状态标志位等信息。这个是单片机硬件底层很重要的东西。如果用汇编编程的话,这些东西都是必须要非常清楚的。但如果用的是c语言,那这些东西就不用管了。

3.1 控制程序运行

左上角这部分是控制程序运行的。

第一个是复位。

第二个是全速运行。

第三个是停止全速运行。

第四个单步运行。

第五个跳过当前行单步运行。

第六个跳出当前函数单步运行。

第七个跳到光标指定行单步运行。

我们可以试一下,这个黄色箭头指示的就是下一句将要执行的代码。当前的程序就是从main函数开始的。

我们点一下:单步运行。

那它就执行到了下一行代码。

再点击:单步运行。

就进到了RCC这个函数里面来了。

点击:跳出函数。

就可以跳到函数外面来了。

点击这一行(第27行)。

再点击:运行到光标指定行。

程序就运行到第27行这个位置了。

点击程序左边这里深灰色的区域,设置断点。

然后点击:全速运行,程序就会一直运行,直到断点停下。

消掉断点,再点击:全速运行,程序就不会自动停下。需要点击停止按钮,程序就会停下来了。

目前程序停在了Delay_us函数里面。

点击RST复位。程序就会回到最开始的地方。

现在程序是在启动文件的复位中断函数里,说明复位后,程序是从这里开始执行的。

点击:单步运行。

再次点击:单步运行。

首先程序会跳到SystemInit函数里。

再次点击:单步运行。

点击:跳出函数。

点击:单步运行。

点击:单步运行。

应该就会执行main函数。

但它突然停不下来了。

点击:停止。

点击:复位。

指定的main函数。

点击:直接运行到当前行。

程序执行到了这一行,然后停下来了。

这就是调试模式下控制程序运行的方法。这个方法可以精确追踪我们的程序是如何运行的,如果你不清楚程序是如何一步步运行的,那在这个调试模式里单步运行探索一下,相信你对程序的运行逻辑就会有更深的理解。

当然这只是调试模式下的一小部分功能,调试模式还有更强大的功能。

3.2 窗口

接着我们来看一下上面的这一堆功能。

第一个是命令窗口,点击它可以打开和关闭命令窗口。(最下面)

第二个是反汇编窗口,也是可以打开和关闭的。(最上面)

第三个是符号窗口,在这里我们可以实时查看程序中所有变量的值。(最右边)

把符号窗口拉开。

比如我想看一下这个GPIO_InitStructure结构体的值,那就可以在这个符号窗口里找一下。main函数这里就可以看到这个GPIO_InitStructure结构体变量,里面可以看到结构体的三个成员。

如果想看一下GPIO_InitStructure结构体值的变化,可以在GPIO_InitStructure上右键,添加到Watch 1窗口。

右下角出现Watch 1窗口。

拉开Watch 1窗口,在这里就能看到结构体的值了。

点击:跳过当前行单步运行。

就能看到这个变量值的变化了。

点击:跳过当前行单步运行。

点击:跳过当前行单步运行。

点击:跳过当前行单步运行。

点击:跳过当前行单步运行。

串口显示、逻辑分析仪等等。这些工具的功能也都是非常强大的,大家可以自行了解一下。

3.3 菜单栏

点击菜单栏中的外设------系统资源查看。这里就可以看到所有的外设寄存器。

比如我们选择GPIOA。

右边会显示GPIOA外设的所有寄存器。

程序是固定交替设置 PA0 为低电平(亮灯)和高电平(灭灯)。

我们就可以看一下ODR寄存器,选择ODR0,这个就是PA0 的输出数据寄存器。

点击:全速运行。

可以看到,这个ODR0是实时显示输出寄存器的变化的。一闪一闪的。

我们在面包板上插上一个LED。观察LED灯珠的内部电极,较小的一端通常是正极。LED正极与电源正极相连,LED负极与PA0相连。

可以看到STM32也是在实时执行程序的。

STM32实时执行程序

我们点停止。

STM32的程序停止运行。

点击:全速运行。

STM32程序继续执行。虽说实时变化会有一些延迟,但这个在线调试的功能还是非常强大的。

STM32实时执行程序,Keil软件实时显示外设寄存器状态,还能随时控制程序的开始、停止、单步运行。所以以后遇到一个比较难调的程序,比如不清楚程序是如何执行的,或者想要看一大堆变量却不方便显示的,或者想看一下计算器是不是配置正确了,都可以考虑一下使用这个Keil软件自带的调试模式。

最后再说明一下,如果你想修改程序的话,是不能直接在这个调试模式下修改的。修改程序得先退出调试模式。点击调试按钮,退出调试模式,修改程序。

重新编译,再进入调试模式。

3.4 其他

这个软件更多的功能还得需要大家自己慢慢探索了。探索的方法:

(1)浏览器搜索一下各个功能是怎么用的;

(2)点菜单栏的Help的第一项。

这里可以打开Keil软件的官方帮助文档,这个帮助文档里有对这整个软件最权威最细致的介绍。

如果你对某个功能不熟悉的话,可以在这里找一找。

相关推荐
SmartRadio15 小时前
进一步优化CH585M的低功耗模式
c语言·开发语言·单片机·嵌入式硬件·物联网
XjtDZ15 小时前
CS5715E异步升压DC-DC控制器
单片机·嵌入式硬件·智能音箱
Jason_zhao_MR15 小时前
V2G 实战:SECC GreenPHY 通信开发方案
嵌入式硬件·物联网·嵌入式·边缘计算
清风66666616 小时前
基于单片机的智能一体化自动咖啡机设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
安生生申17 小时前
STM32 软件IIC ADS1115 的使用
单片机·嵌入式硬件
Y1rong18 小时前
STM32之中断
stm32·单片机·嵌入式硬件
三佛科技-1341638421218 小时前
PL3327CE/PL3327CD/CS/CF原边调节恒流/恒压控制离线反激式开关电源芯片 典型应用电路
单片机·嵌入式硬件·物联网·智能家居
brave and determined18 小时前
工程设计类学习(DAY4):硬件可靠性测试全攻略:标准到实战
人工智能·嵌入式硬件·测试·硬件设计·可靠性测试·嵌入式设计·可靠性方法
先知后行。19 小时前
STM32F103的启动过程
stm32·单片机·嵌入式硬件