stm32学习笔记(三)软件仿真

您所在的位置:网站首页 扎古ms图鉴 stm32学习笔记(三)软件仿真

stm32学习笔记(三)软件仿真

2024-01-12 01:53| 来源: 网络整理| 查看: 265

提前说说:

32还在慢慢的学习,前几天都在看软件环境的搭建,工程搭建等,这些东西也是很重要的,所以自己耐心下来,一步一步看完了。今天来说说软件的仿真。

自我感觉,软件仿真和C语言的调试比较像,就是一步一步看你代码的正确性。

4.1 STM32F1 软件仿真 MDK 的一个强大的功能就是提供软件仿真(注意:STM32F4 不支持软件仿真),通过软件 仿真,我们可以发现很多将要出现的问题,避免了下载到 STM32 里面来查这些错误,这样最 大的好处是能很方便的检查程序存在的问题,因为在 MDK 的仿真下面,你可以查看很多硬件 相关的寄存器,通过观察这些寄存器,你可以知道代码是不是真正有效。另外一个优点是不必 频繁的刷机,从而延长了 STM32 的 FLASH 寿命(STM32 的 FLASH 寿命≥1W 次)。当然,软 件仿真不是万能的,很多问题还是要到在线调试才能发现。废话不多说了,接下来我们开始进 行软件仿真。 上一章,我们创立了一个测试 STM32 串口 1 的工程,本节我们将教大家如何在 MDK5.14 的软件环境下仿真这个工程,以验证我们代码的正确性。 在开始软件仿真之前,先检查一下配置是不是正确,在 IDE 里面点击在这里插入图片描述 ,确定 Target 选 项卡内容如图 4.1.1 所示(主要检查芯片型号和晶振频率,其他的一般默认就可以): 在这里插入图片描述 图 4.1.1 Target 选项卡 确认了芯片以及外部晶振频率(8.0Mhz)之后,基本上就确定了 MDK5.14 软件仿真的硬 件环境了,接下来,我们再点击 Debug 选项卡,设置为如图 4.1.2 所示: 在这里插入图片描述 图 4.1.2 Debug 选项卡 在图 4.1.2 中,选择:Use Simulator,即使用软件仿真。选择:Run to main(),即跳过汇编 代码,直接跳转到 main 函数开始仿真。设置下方的:Dialog DLL 分别为:DARMSTM.DLL 和 TARMSTM.DLL,Parameter 均为:-pSTM32F103RC,用于设置支持 STM32F103RC 的软硬件 仿真(即可以通过 Peripherals 选择对应外设的对话框观察仿真结果)。最后点击 OK,完成设置。 接下来,我们点击 (开始/停止仿真按钮),开始仿真,出现如图 4.1.3 所示界面: 在这里插入图片描述 图 4.1.3 开始仿真 可以发现,多出了一个工具条,这就是 Debug 工具条,这个工具条在我们仿真的时候是非 常有用的,下面简单介绍一下 Debug 工具条相关按钮的功能。Debug 工具条部分按钮的功能如 图 4.1.4 所示: 在这里插入图片描述 复位:其功能等同于硬件上按复位按钮。相当于实现了一次硬复位。按下该按钮之后,代 码会重新从头开始执行。 执行到断点处:该按钮用来快速执行到断点处,有时候你并不需要观看每步是怎么执行的, 而是想快速的执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是你在查 看的地方设置了断点。 停止运行:此按钮在程序一直执行的时候会变为有效,通过按该按钮,就可以使程序停止 下来,进入到单步调试状态。 执行进去:该按钮用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同 于执行过去按钮的。 执行过去:在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个 函数单步执行。 执行出去:该按钮是在进入了函数单步调试的时候,有时候你可能不必再执行该函数的剩 余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数,回到函数被调用的位 置。 执行到光标处:该按钮可以迅速的使程序运行到光标处,其实是挺像执行到断点处按钮功 能,但是两者是有区别的,断点可以有多个,但是光标所在处只有一个。 汇编窗口:通过该按钮,就可以查看汇编代码,这对分析程序很有用。 堆栈局部变量窗口:通过该按钮,显示 Call Stack+Locals 窗口,显示当前函数的局部变量 及其值,方便查看。 观察窗口:MDK5 提供 2 个观察窗口(下拉选择),该按钮按下,会弹出一个显示变量的 窗口,输入你所想要观察的变量/表达式,即可查看其值,是很常用的一个调试窗口。 内存查看窗口:MDK5 提供 4 个内存查看窗口(下拉选择),该按钮按下,会弹出一个内 存查看窗口,可以在里面输入你要查看的内存地址,然后观察这一片内存的变化情况。是很常 用的一个调试窗口 串口打印窗口:MDK5 提供 4 个串口打印窗口(下拉选择),该按钮按下,会弹出一个类 似串口调试助手界面的窗口,用来显示从串口打印出来的内容。 逻辑分析窗口:该图标下面有 3 个选项(下拉选择),我们一般用第一个,也就是逻辑分析 窗口(Logic Analyzer),点击即可调出该窗口,通过 SETUP 按钮新建一些 IO 口,就可以观察这 些 IO 口的电平变化情况,以多种形式显示出来,比较直观。 系统查看窗口:该按钮可以提供各种外设寄存器的查看窗口(通过下拉选择),选择对应外 设,即可调出该外设的相关寄存器表,并显示这些寄存器的值,方便查看设置的是否正确。 Debug 工具条上的其他几个按钮用的比较少,我们这里就不介绍了。以上介绍的是比较常 用的,当然也不是每次都用得着这么多,具体看你程序调试的时候有没有必要观看这些东西,来决定要不要看。 这样,我们在上面的仿真界面里面选择:观察窗口 1(Watch1)、串口打印窗口(UART#1)。 然后调节一下这两个窗口的位置,然后将变量 t 加入 Watch1 窗口(方法:双击 Enter expression 添加/直接拖动变量 t 到 Watch1 窗口即可),如图 4.1.5 所示: 在这里插入图片描述 图 4.1.5 调出仿真串口打印窗口 我们把光标放到 test.c 的第 9 行左侧的灰色区域,然后按下鼠标左键,即可放置一个断点 (红色的实心点,也可以通过鼠标右键弹出菜单来加入),再次单击则取消。 然后点击 ,执 行到该断点处,如图 4.1.6 所示: 在这里插入图片描述 图 4.1.6 执行到断点处 我们现在先不忙着往下执行,点击菜单栏的 PeripheralsUSARTsUSART 1。可以看到, 有很多外设可以查看,这里我们查看的是串口 1 的情况。如图 4.1.7 所示: 在这里插入图片描述 图 4.1.7 查看串口 1 相关寄存器 单击 USART1 后会在 IDE 之外出现一个如图 4.1.8(a)所示的界面: 在这里插入图片描述 图 4.1.8 串口 1 各寄存器初始化前后对比 图 4.1.8(a)是 STM32 的串口 1 的默认设置状态,从中可以看到所有与串口相关的寄存器 全部在这上面表示出来了,而且有当前串口的波特率等信息的显示。我们接着单击一下 ,执 行完串口初始化函数,得到了如图 4.1.8(b)所示的串口信息。大家可以对比一下这两个图的 区别,就知道在 uart_init(72,9600);这个函数里面大概执行了哪些操作。 通过图 4.1.8(b),我们可以查看串口 1 的各个寄存器设置状态,从而判断我们写的代码是 否有问题,只有这里的设置正确了之后,才有可能在硬件上正确的执行。同样这样的方法也可 以适用于很多其他外设,这个读者慢慢体会吧!这一方法不论是在排错还是在编写代码的时候, 都是非常有用的。 然后我们继续单击 按钮,一步步执行,最后就会看到在USART #1中打印出相关的信息, 如图 4.1.9 所示: 在这里插入图片描述 图 4.1.9 串口 1 输出信息 图中黑色方框内的数据是串口 1 打印出来的,证明我们的仿真是通过的,代码运行时会在 串口 1 不停的输出 t 的值,每 0.5s 执行一次。软件仿真的时间可以在 IDE 的最下面(窗口最大 化后,右下角)观看到,如图 4.1.10 所示。并且 t 自增,与我们预期的一致。再次按下 结束仿真。 在这里插入图片描述 图 4.1.10 仿真持续时间 至此,我们软件仿真就结束了,通过软件仿真,我们在 MDK5.14 中验证了代码的正确性, 接下来我们下载代码到硬件上来真正验证一下我们的代码是否在硬件上也是可行的。

转载文章:《STM32不完全手册_寄存器版本_V3.1》



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3