目录
一 仿真调试简介
Keil MAK-ARM同样提供了强大的软件模拟仿真功能,对于暂不具备硬件平台的学习者,也可以通过模拟仿真学习嵌入式开发。仿真器会返回单片机内部内存与时序等情况给计算机的辅助软件,这样 就可以在软件里看到真实的执行情况。不仅如此,还可以通过计算机断的软件实现单步、全速、运行到光标的常规调试手段。Keil仿真调试有两种模式:软件模拟调试和硬件调试。
1.1 软件模拟调试
在KEIL软件中,模拟调试是一项非常重要的功能,它允许工程师在没有实际硬件的情况下,对嵌入式程序进行调试和测试。通过模拟调试,工程师可以检查代码的正确性、逻辑错误以及性能问题,从而确保嵌入式程序在实际硬件上能够正常运行。然而,模拟环境与实际硬件可能存在差异,因此模拟调试结果仅作为参考,最终需要在实际硬件上进行验证。
1.2 硬件调试
计算机软件把编译好的程序通过串行口、并行口或者USB口传输到硬件调试设备中,如ST-LINK、DAP仿真器等。仿真器模拟全部的单片机资源(所有的单片机接口,并且有真实的引脚输出),仿真器可以接入实际的电路中,然后与单片机一样执行。
不管是软件调试还硬件调试,都需要结合实际情况进行评估和选择,确保调试结果的准确性和可靠性。同时,在模拟调试的基础上,还需要结合实际硬件进行进一步的验证和测试,以确保嵌入式系统的稳定性和性能达到设计要求。
二 如何进入调试模式
2.1 点击Option for Target
2.2 设置debug选项卡
Dialog DLL后面的Parameter选择自己使用的芯片型号,设置完成点击OK。
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 添加变量至观察窗口
选中想要观察的变量 -> 点击右键 -> Add ‘xxx’ to ... ->Watch1,此时自动会弹出要加入的窗口:
4.3 运行程序
全速运行程序,就可以观察变量的变化。
五 引脚波形查询
5.1 打开逻辑分析仪
单击工具栏中的Logic Analyzer按钮。
逻辑分析仪如下:
5.2 添加引脚信息
单击逻辑分析仪的Setup按钮,打开Setup Logic Analyzer 对话框。
单击右上角的New按钮,在空白框中输入PORTB.8新增一个观测信号。
在Display Type下拉列表框中选择 Bit,颜色为绿色,单击Close按钮退出。这样,就在Logic Analyzer窗口中添加了一个观测信号PB8。在程序软件仿真运行过程中,可通过观察该信号的波形图得到STM32F103微控制器的引脚PB8上输入或输出的变化情况。
5.3 观测引脚信号
引脚添加完成之后,选择菜单Debug→Run命令或者单击工具栏中的Run按钮,开始仿真。让程序运行一段时间后,再选择菜单Debug→Stop命令或者单击工具栏中的Stop按钮,暂停仿真。
如果波形太密可以点击Zoom中的All按钮。
我的程序PB8输出了占空比50%的PWM波,颜色为绿色;我还添加了一个占空比25%的PWM引脚PB9用于对照,颜色为红色。下面是运行结果。
可以看到设置的引脚输出的波形。
六 总结
Keil MDK-ARM模拟仿真的观测信号范围十分广泛,包括I/O端口、逻辑数值、寄存器、存储器等,还可以设定外设的工作状态,包括GPIO、ADC、DMA、TIMER等,还经常被用于时序分析,调试输出等典型应用,功能十分强大。用好模拟仿真调试,可以提前发现错误,是硬件运行调试的有益补充。