打印

关于仿真时看门狗复位问题

[复制链接]
3393|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我刚刚得到了一个仿真器,JLINK
用来仿真stm32f101c8这款片子~我发现了点问题~我跟踪的时候发现,全速运行没有问题。只要我设置断点,程序运行到断点处停下来后,什么也不操作等1秒左右程序就自动复位。单步运行,几段代码后,系统也复位。我先以为是我仿真器的问题,但是后来发现:不是仿真器的时,是看门狗的问题。我在程序运行的时候,如果没有进入设置看门狗这段程序,等多久也不复位,但是如果看门狗初始化完了,不管那段程序,只要停下来,也就是说没有及时喂狗(推测),系统就复位,这是什么原因呀?
为什么设置断点停下来后,看门狗的定时器,没有停下来呀?
不知道是我程序设置的问题还是软件设置的问题,我用的是keil
看门狗程序附上:
void dog_init(uint16 interval)
{
volatile uint16 wait=0;

//内部低速振荡器开启
RCC->CSR|=(1<<0);
while(!(RCC->CSR&(1<<1)));


while(IWDG->SR);//等待可以写入
//设置看门狗间隔
IWDG->KR=0x5555;//解锁
if(interval==5)IWDG->PR=5;//分频器
else if(interval==30)IWDG->PR=7;//分频器
IWDG->KR=0x5555;//解锁
if(interval==5)IWDG->RLR=0x200;//计数器预装载
else if(interval==30)IWDG->RLR=0xFFF;//计数器预装载
for(wait=0;wait<100;wait++);
//启动看门狗
IWDG->KR=0xCCCC;
//喂狗
IWDG->KR=0xAAAA;
}
沙发
yixin1937|  楼主 | 2010-5-27 12:17 | 只看该作者
我看到资料上说 stm32 分调试状态和非调试状态~
在调试状态下DBGMCU_CR设置

使用特权

评论回复
板凳
香水城| | 2010-5-27 12:24 | 只看该作者
在STM32中,如果要求设置断点停下来后,暂停看门狗的定时器,需要设置DBGMCU_CR中的对应位。

使用特权

评论回复
地板
yixin1937|  楼主 | 2010-5-27 15:48 | 只看该作者
3# 香水城 DBGMCU_CR里面包括了四种计数器的开关~
如果是仿真状态下,是不是应该都设置为停止?

QQ截图未命名.jpg (72.97 KB )

QQ截图未命名.jpg

使用特权

评论回复
5
香水城| | 2010-5-27 16:34 | 只看该作者
芯片提供了这种机制,你可以根据需要自己选择设置哪一个,或设置所有;我不知道你的具体需求,无法告诉你具体怎么用。

使用特权

评论回复
6
火箭球迷| | 2010-5-27 18:14 | 只看该作者
具体需求要具体分析

使用特权

评论回复
7
mcuisp| | 2010-5-28 00:35 | 只看该作者
这个寄存器应该是由仿真软件来设置的。
不应该由用户程序来处理。

使用特权

评论回复
8
香水城| | 2010-5-28 09:37 | 只看该作者
这个寄存器应该是由仿真软件来设置的。
不应该由用户程序来处理。
mcuisp 发表于 2010-5-28 00:35


这个寄存器是由开发者设置,但不一定是通过用户程序来处理。

如果开发者希望调试停止时,看门狗的计数器依然工作,则可以通过仿真软件来清除相应的寄存器位;如果开发者希望调试停止时,看门狗的计数器停止工作,则可以通过仿真软件来设置相应的寄存器位;当然这个清除或设置的操作,也可以使用临时的调试程序,即用户程序来处理。

STM32中提供这个寄存器位,就是把调试的选择权交给开发者,你爱怎么用就怎么用,让开发者有充分发挥的余地。

使用特权

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

本版积分规则

个人签名:用我的一生!来追求人生的高峰!

24

主题

185

帖子

0

粉丝