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

[复制链接]
4232|7
 楼主| yixin1937 发表于 2010-5-27 11:38 | 显示全部楼层 |阅读模式
我刚刚得到了一个仿真器,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
香水城 发表于 2010-5-27 16:34 | 显示全部楼层
芯片提供了这种机制,你可以根据需要自己选择设置哪一个,或设置所有;我不知道你的具体需求,无法告诉你具体怎么用。
火箭球迷 发表于 2010-5-27 18:14 | 显示全部楼层
具体需求要具体分析
mcuisp 发表于 2010-5-28 00:35 | 显示全部楼层
这个寄存器应该是由仿真软件来设置的。
不应该由用户程序来处理。
香水城 发表于 2010-5-28 09:37 | 显示全部楼层
这个寄存器应该是由仿真软件来设置的。
不应该由用户程序来处理。
mcuisp 发表于 2010-5-28 00:35


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

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

STM32中提供这个寄存器位,就是把调试的选择权交给开发者,你爱怎么用就怎么用,让开发者有充分发挥的余地。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

24

主题

185

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部