你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于硬件仿真的问题  

[复制链接]
netlhx 提问时间:2015-7-17 10:56 /
本帖最后由 netlhx 于 2015-7-17 11:14 编辑

看到很多人对硬件仿真的问题纠缠不清,发个贴子讨论一下。

首先,这里讨论的是MDK下的仿真问题,IAR没用过,不熟。

仿真有软仿真及硬件仿真之分。所谓软仿真,就是不需要硬件,纯粹纸上谈兵式的,这里也不讨论。

大多数人都是从STM32F1XX系列学习入门的,MDK对STM32F1XX提供了专门的仿真DLL,所以支持得很好。但后续的M4及M7的仿真,基本上转向了基于ITM及ETM的技术。ETM需要专用的外部调试器,如ULINK才可以支持,但ITM大部分开发板都支持,特别是官方自己的板子基本都支持ITM。

ITM是Instrumentation trace macrocell的缩写,用于指令跟踪及调试。实际上ITM是MCU内部提供的一种机制,外部使用这一技术的名词称为SWV/SWD。

其中一些常见的功能如断点、变量观察、内存观察、条件断点,都可以直接使用,不需要特殊的配置。但一些高级的功能,如实现printf函数、LA逻辑分析仪功能则需要相应的设置才可以完成。

下面举几个例子来说明一下。下面调试在F7 DISCO上面完成。

1. 实现逻辑分析仪的功能

GPIO配置代码如下

QQ截图20150717103946.png

打开ITM调试功能,这一步非常重要!!!

QQ截图20150717104147.png

其中4和5是最重要的,设置错误的话就可能不能实现ITM功能。4是打开跟踪功能,5是设置MCU的SYSCLK,以便产生正确的跟踪信息!

接下来进入调试并打开LA,如下图

QQ截图20150717104610.png

新建一个LA信号, 在本例中是GPIOI->ODR,然后结合MASK及SHIFT设置,如下图如示

QQ截图20150717104757.png

因为是GPIOI里面的PIN1,所以MASK及SHIFT的设置你应该能看懂。

开始全速运行,就会发现有波形出来了。如下

QQ截图20150717105012.png

这样就实现了简单的LA功能。

注意:ITM只能跟踪全局或静态变量,所以一些局部变量是不能跟踪和分析的。另外还有个缺陷,就是如果PIN上的信号是复用后的,那么也不能跟踪,比如你不能把它当成一台真正的LA来用,要不然MDK就亏大了!

为什么复用后的PIN不能跟踪呢,给一张GPIO的内部结构图

QQ截图20150717110011.png


从上图可以看出,复用后的电平信号根本就没有通过GPIO->ODR,当然就不能啦!

再补充一点,如果你的LA信号不出来,先检查是不是设置问题,如果都没有问题,把板子的电拔了,再来一次,就没有问题了。





2. 实现PRINTF功能

这个功能已有坛友实现了,这里就不再讨论,给个链接

https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=602205&highlight=%E8%B0%83%E8%AF%95

欢迎大家讨论,挖掘ITM的其它高级功能。




收藏 6 评论22 发布时间:2015-7-17 10:56

举报

22个回答
myfocus-2048857 回答时间:2016-11-23 09:49:31
请问版主,STM32F042支持 硬件仿真吗 ?

根据你的帖子,设置见附图一

可是,点击debug后,提示错误,见附图二

请教:
这是 怎么回事呢 ?

谢谢 !

附图一
无标题.png

附图二
无标题1.png
wjandsq 回答时间:2015-7-19 17:15:33
creep 发表于 2015-7-17 11:54
感谢版主分享。
查看GPIOI的Pin1的状态可以直接输入

STM32F103的TIM1,可以软件仿真,引脚也是复用输出。
直接输入GPIOA_IDR.8
追梦者11号 回答时间:2016-1-26 20:22:49
不懂为什么我软件仿真的时候是可以正常输出的,但是在硬件仿真中就不可以了。也按照你说的去做了可是就是不可以输出,请大神支援下下
shanji 回答时间:2015-7-17 11:16:09
这是F1还是F4的?F4怎么也弄不出波形
netlhx 回答时间:2015-7-17 11:16:42
shanji 发表于 2015-7-17 11:16
这是F1还是F4的?F4怎么也弄不出波形

F7上面实现的,都是可以的
shanji 回答时间:2015-7-17 11:45:11
netlhx 发表于 2015-7-17 11:16
F7上面实现的,都是可以的

按你的方法,在F4上试了一下,不行,不知道哪里的原因
creep 回答时间:2015-7-17 11:54:38
感谢版主分享。
查看GPIOI的Pin1的状态可以直接输入
  1. GPIOI->ODR.1
复制代码
moyanming2013 回答时间:2015-7-17 12:36:13
学习了。。。
stary666 回答时间:2015-7-17 13:58:47
学习了,,,,,,,,,,
埃斯提爱慕 回答时间:2015-7-17 22:54:54
提示: 作者被禁止或删除 内容自动屏蔽
风子 回答时间:2015-7-18 21:11:58
谢谢分享
你好我好大家好! 回答时间:2015-7-19 19:41:23
感谢分享
yanhaijian 回答时间:2015-7-19 23:22:53
受教了。
╮倾壹伳柔情 回答时间:2015-7-20 08:55:20
学习了。。。
lkl0305 回答时间:2015-7-20 23:23:53
详细!!!
小小超 回答时间:2015-7-21 08:15:21
学习一下。
12下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版