初级会员

- 积分
- 61
- 金钱
- 61
- 注册时间
- 2015-5-12
- 在线时间
- 1 小时
|
5金钱
原子哥的战舰STM32是在中断喂狗,我搜集了下论坛的,有个帖子中,说窗口看门狗的中断,一般不喂狗,而是在MCU要挂掉的时候,保存重要数据或者做系统刹车等。 我把代码修改 没使用中断, 在主函数里面 喂狗。
int main(void)
{
u8 tr,wr;
delay_init();
LED_Init();
// NVIC_Configuration();
LED0=0;
delay_ms(500);
WWDG_Init(0x7F,0x5F,WWDG_Prescaler_8);
while(1)
{
tr=WWDG->CFR&0x7f;
wr=WWDG->CR&0x7f;
if(tr<wr)
{
WWDG_SetCounter(WWDG_MAX);
LED1=!LED1;
}
LED0=1;
}
}
u8 WWDG_MAX = 0x7f;
void WWDG_Init(u8 tr,u8 wr,u32 fprer)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);
WWDG_MAX = tr & WWDG_MAX;
WWDG_SetPrescaler(fprer); // 分频值
WWDG_SetWindowValue(wr); // 窗口值
WWDG_Enable(tr); //使能 WWDG 并且 装载计数值
WWDG_ClearFlag(); // 清除中断标志位
// WWDG_NVIC_Init();
// WWDG_EnableIT(); // CFR寄存器 开启提前中断位
}
用JTAG调试的时候 。复位以后 程序指针 不是执行定义变量第一句,而是指向 LED_Init();
还一个问题就是 我设置断点到 while(1) 循环里面 全速进去就会出现 JTAG的错误。 原子哥,帮忙解释下好么。
|
最佳答案
查看完整内容[请看2#楼]
窗口看门狗不能过早喂狗,也不能过晚喂狗,既然你不用中断,那就查询看门狗 的计数器值,再来喂狗吧。
你的上面这些个问题,估计就是复位了导致的。
慢慢研究这个代码。
|