Bootstrap

Keil软件仿真调试常用功能以及变量查询、引脚波形查询

目录

一 仿真调试简介

1.1 软件模拟调试

1.2 硬件调试

二 如何进入调试模式

2.1 点击Option for Target

2.2 设置debug选项卡

2.3 单击工具栏的Debug按钮

2.4 Debug界面如下

三 调试模式常用功能

3.1 RST

3.2 RUN

3.3 STOP

3.4 Step

3.5 Step Over 

3.6 Step Out

3.7 Run to Cursor Line

3.8 Show Next Statement 

3.9 断点 

四 变量观察

4.1 显示/隐藏变量观察窗口

4.2 添加变量至观察窗口 

4.3 运行程序

五 引脚波形查询

5.1 打开逻辑分析仪

5.2 添加引脚信息

5.3 观测引脚信号

六 总结


 

一 仿真调试简介

        Keil MAK-ARM同样提供了强大的软件模拟仿真功能,对于暂不具备硬件平台的学习者,也可以通过模拟仿真学习嵌入式开发。仿真器会返回单片机内部内存与时序等情况给计算机的辅助软件,这样 就可以在软件里看到真实的执行情况。不仅如此,还可以通过计算机断的软件实现单步、全速、运行到光标的常规调试手段。Keil仿真调试有两种模式:软件模拟调试和硬件调试。

1.1 软件模拟调试

        在KEIL软件中,模拟调试是一项非常重要的功能,它允许工程师在没有实际硬件的情况下,对嵌入式程序进行调试和测试。通过模拟调试,工程师可以检查代码的正确性、逻辑错误以及性能问题,从而确保嵌入式程序在实际硬件上能够正常运行。然而,模拟环境与实际硬件可能存在差异,因此模拟调试结果仅作为参考,最终需要在实际硬件上进行验证。

1.2 硬件调试

        计算机软件把编译好的程序通过串行口、并行口或者USB口传输到硬件调试设备中,如ST-LINK、DAP仿真器等。仿真器模拟全部的单片机资源(所有的单片机接口,并且有真实的引脚输出),仿真器可以接入实际的电路中,然后与单片机一样执行。

       不管是软件调试还硬件调试,都需要结合实际情况进行评估和选择,确保调试结果的准确性和可靠性。同时,在模拟调试的基础上,还需要结合实际硬件进行进一步的验证和测试,以确保嵌入式系统的稳定性和性能达到设计要求。

二 如何进入调试模式

2.1 点击Option for Target

fe6677fb9b2a4845a03f323069af40fd.png

2.2 设置debug选项卡

Dialog DLL后面的Parameter选择自己使用的芯片型号,设置完成点击OK。

8297440580854a85b024284387b467b0.png

2.3 单击工具栏的Debug按钮

8f3a28ba90614a49b53902333febd5b4.png

2.4 Debug界面如下

9fe08986691740a899b6b9313c7def48.png

三 调试模式常用功能

3.1 RST

将程序复位到主函数的最开始处,准备重新运行程序。

ecf13171365f4ea299b8a10bfaecc397.png

3.2 RUN

全速运行运行程序。

1889f690690245b6976868f7324ae31e.png

3.3 STOP

停止全速运行,全速运行程序时激活该按钮,用来停止正全速运行的程序。 

cf8851c2e8b94fc5b8ad3db1e9d4e75f.png

3.4 Step

每点一次按钮,程序运行一步(单步),遇到函数会跳进子函数内部。此按钮在程序停止运行时有效。

03da46adb0d24580b0e48b584655e053.png

3.5 Step Over 

单步执行代码,每点一次按钮,程序运行一行,它不会进入子函数内部,可直接跳过函数。此按钮在程序停止运行时有效。

6fd487bbce2f4a9ebd5928daa357badf.png

3.6 Step Out

跳出当前进入的函数,只有进入子函数内部该按钮才被激活。

650970ea064840ac8898c46e03e4155a.png

3.7 Run to Cursor Line

程序运行至当前光标所在行。

5f4e8ce988ec47f98aa97ac8ea994a17.png

3.8 Show Next Statement 

跳转到暂停行,点击该按钮,跳转到程序暂停所在行,可以用于寻找程序指针。此按钮在程序停止运行时有效。

d372e51dd757431fa801c0ba90bcca31.png

3.9 断点 

       程序调试时,一些程序行必须满足一定的条件才能被执行到,这些条件往往是异步发生或难以预先设定的,这类问题使用单步执行的方法是很难调试的,这时就要使用到程序调试中的另一种非常重要的方法——断点。断点设置的方法有多种,常用的是在某一程序行设置断点,设置好断点后可以全速运行程序,一旦执行到该程序行即停止,可在此观察有关变量值,以确定问题所在。

下图中四个按钮从左到右依次是:插入/移除断点、 使能/失能断点、 失能所有断点、 取消所有断点

0737645369314e40bd78ec8bf0dd9225.png

插入/移除断点:鼠标点击想要插入断点的所在行 ,然后点击插入/移除断点,就可以设置断点。或者用鼠标在代码所在行前面点击一次,也可以实现同样的效果,如下图。其中红色的就是断点,青色的是光标。

cea94116e6554464bc28da2701d08b4d.png

使能/失能断点:失能断点的意思是使断点失效,但是保留断点。调试时不起作用。

失能所有断点:失能断点是失能指定的单个断点,失能所有断点是将程序中所有的断点全部失效。

取消所有断点:取消断点不同于失能断点,失能断点还是会保留断点,而取消断点则是直接删除断点,不留痕迹。此按钮会将程序中所有的断点全部删除。

四 变量观察

4.1 显示/隐藏变量观察窗口

在这个窗口可以查看各个变量值的变化状态。

8e514e17ffff4933894110896762fe91.png

4.2 添加变量至观察窗口 

选中想要观察的变量 -> 点击右键 -> Add ‘xxx’ to ... ->Watch1,此时自动会弹出要加入的窗口:

66d325b5416a4f1799f88d7b8af4011c.png

4.3 运行程序

全速运行程序,就可以观察变量的变化。

1576e355fb7c4b638781b3b1293e96b8.png

五 引脚波形查询

5.1 打开逻辑分析仪

单击工具栏中的Logic Analyzer按钮。

95b627fd7e244a74b1771208cde8cd27.png

逻辑分析仪如下:

ae9dcf8bfc9048b69802963413dc9243.png

5.2 添加引脚信息

单击逻辑分析仪的Setup按钮,打开Setup Logic Analyzer 对话框。

c669a0e104614cfaa88413cd1af4d4c4.png

单击右上角的New按钮,在空白框中输入PORTB.8新增一个观测信号。

826269d7af3e4d1dab40714e12ffa456.png

在Display Type下拉列表框中选择 Bit,颜色为绿色,单击Close按钮退出。这样,就在Logic Analyzer窗口中添加了一个观测信号PB8。在程序软件仿真运行过程中,可通过观察该信号的波形图得到STM32F103微控制器的引脚PB8上输入或输出的变化情况。

47f3e9722c0d47f381c1d2ce251492e6.png

5.3 观测引脚信号

引脚添加完成之后,选择菜单Debug→Run命令或者单击工具栏中的Run按钮,开始仿真。让程序运行一段时间后,再选择菜单Debug→Stop命令或者单击工具栏中的Stop按钮,暂停仿真。

 如果波形太密可以点击Zoom中的All按钮。

f3d97d511e9a4c6f9d25de7f106d17f7.png

我的程序PB8输出了占空比50%的PWM波,颜色为绿色;我还添加了一个占空比25%的PWM引脚PB9用于对照,颜色为红色。下面是运行结果。

f8018138981c46d7899289ada0395746.png

可以看到设置的引脚输出的波形。 

六 总结

       Keil MDK-ARM模拟仿真的观测信号范围十分广泛,包括I/O端口、逻辑数值、寄存器、存储器等,还可以设定外设的工作状态,包括GPIO、ADC、DMA、TIMER等,还经常被用于时序分析,调试输出等典型应用,功能十分强大。用好模拟仿真调试,可以提前发现错误,是硬件运行调试的有益补充。

 

 

;