打印
[开发工具]

IAR下用JLINK调试STM32定时中断有问题。请香版看看(已解决)

[复制链接]
4788|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
e_hui0000|  楼主 | 2009-5-22 17:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在用仿真器调试程序有个现象。我的程序是用定时器来亮灯,一秒闪一下,当程序运行时,定时中断是正常的,灯是一秒闪一次。但一旦我按下IAR的暂停按钮(break)停止运行后,什么都不做,然后再按全速运行按钮(go),灯就会停在那里很久,很久之后才会恢复成一秒闪一次。

只要不按暂停,会一直正常闪,只要按暂停,会停很久,然后才正常。

请问这是什么原因呢?难道暂停之后的第一次定时中断会延长那么多的时间吗?
沙发
byeyear| | 2009-5-24 14:37 | 只看该作者

貌似定时器溢出了……

定时器溢出,没有自动重载,于是只能等它计到0xFFFFFF了。可以暂停-运行-暂停,然后看定时器值。

使用特权

评论回复
板凳
e_hui0000|  楼主 | 2009-5-25 13:27 | 只看该作者

已解决。

很奇怪的解决方法。

原来我是用4M内部时钟,设成定时器10ms中断一次。
我把prescale设成4000,则定时器每计10次中断一次。

TIM_TimeBaseStructure.TIM_Prescaler = 3999;
TIM2_CCR1_Val = 10;

这会出现上面说的问题。当仿真时时暂停后,再运行会出现长时间的停顿。

但是我改成以下这样:
把prescale设成4,则定时器每计10000次中断一次。

TIM_TimeBaseStructure.TIM_Prescaler = 3;
TIM2_CCR1_Val = 10000;
则不会有上面的问题了。

谁能解释?

使用特权

评论回复
地板
香水城| | 2009-5-25 13:30 | 只看该作者

2楼分析的情况是一种可能性

楼主能否排除这种可能性?

使用特权

评论回复
5
e_hui0000|  楼主 | 2009-5-25 13:40 | 只看该作者

应该可以排除啊。

应该可以排除啊。
因为我暂停后什么都不做,只是再继续运行。

我在3楼给出了解决的方法。只是前后的倍数调换了一下。

原来用prescale设成4000,定时器的计时时钟只有1Khz.计10次产生中断一次。
要改成prescale设成4,定时器的计时时钟就有1M了。计10000次产生中断一次。这样就正常了。确实奇怪。

使用特权

评论回复
6
香水城| | 2009-5-25 13:58 | 只看该作者

调试暂停时定时器的计数器并不一定也暂停了

请看STM32参考手册的13.3.16节中有关的说明,还有26.15.2节。


13.3.16 调试模式
当微控制器进入调试模式(Cortex-M3核心停止),根据DBG模块中DBG_TIMx_STOP的设置,TIMx计数器或者继续正常操作,或者停止。详见随后调试模块章节。

使用特权

评论回复
7
e_hui0000|  楼主 | 2009-5-25 14:16 | 只看该作者

谢谢告知。

请问DBG_TIMx_STOP如何改呢?是在程序中直接设置DBGMCU_CR寄存器?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

39

帖子

0

粉丝