本帖最后由 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配置代码如下 打开ITM调试功能,这一步非常重要!!! 其中4和5是最重要的,设置错误的话就可能不能实现ITM功能。4是打开跟踪功能,5是设置MCU的SYSCLK,以便产生正确的跟踪信息! 接下来进入调试并打开LA,如下图 新建一个LA信号, 在本例中是GPIOI->ODR,然后结合MASK及SHIFT设置,如下图如示 因为是GPIOI里面的PIN1,所以MASK及SHIFT的设置你应该能看懂。 开始全速运行,就会发现有波形出来了。如下 这样就实现了简单的LA功能。 注意:ITM只能跟踪全局或静态变量,所以一些局部变量是不能跟踪和分析的。另外还有个缺陷,就是如果PIN上的信号是复用后的,那么也不能跟踪,比如你不能把它当成一台真正的LA来用,要不然MDK就亏大了! 为什么复用后的PIN不能跟踪呢,给一张GPIO的内部结构图 从上图可以看出,复用后的电平信号根本就没有通过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的其它高级功能。 |
根据你的帖子,设置见附图一
可是,点击debug后,提示错误,见附图二
请教:
这是 怎么回事呢 ?
谢谢 !
附图一
附图二
STM32F103的TIM1,可以软件仿真,引脚也是复用输出。
直接输入GPIOA_IDR.8
F7上面实现的,都是可以的
按你的方法,在F4上试了一下,不行,不知道哪里的原因
查看GPIOI的Pin1的状态可以直接输入