完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
前几天学习STM32的两条狗,先学习了宠物狗(IWDG),和其它MCU差不多,不多说了。学到警犬(WWDG)的时候,问题来了,没有IWDG那么好理解了,看了半天没有搞懂是怎么回事,计数器值、窗口值、在什么时候喂狗、什么时候产生中断等等,一头雾水。
经过两天的推敲,个人理解如下: 1、有个7位递减计数器(WWDG->CR),就这个计数器和窗口计数器(WWDG->CFR)决定什么时候喂狗。 狗喂早了,复位——“早”体现在 计数器值(tr)>窗口值(wr),也就是计数器值还没有减到窗口值以下; 2、当 0x40 < 计数器值(tr) < 窗口值(wr) 时,这时候最适合喂狗了,也只有在这时候喂狗才合适; 3、当 计数器的值 从0x40变到0x3F的时候,将产生看门狗复位;当然在要产生复位的前一段时间,如果开启了提前唤醒中断,那么就会进入中断,在中断函数里,我们需要及时喂狗,否则会产生复位; 4、据网上资料介绍,在这个中断里面一般不进行喂狗,一般是系统去世前的“遗嘱”,比如存储重要的数据等。这个就需要根据个人需要设计。 下面择取部分程序,可以根据程序说明,计算出喂狗的时间,大家注意推敲,欢迎交流! /* 保存WWDG计数器的设置值,默认为最大值 */ u8 WWDG_CNT = 0x7F; /* * 初始化窗口看门狗 * tr : T[6:0], 计数器值 * wr : W[6:0], 窗口值 * fprer : 分频系数(WDGTB), 仅最低2位有效 * Fwwdg = PCLK1 / (4096*2^fprer) */ void WWDG_Init(u8 tr, u8 wr, u32 fprer) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG时钟使能 WWDG_CNT = tr & WWDG_CNT; // 初始化WWDG_CNT /* 看门狗节拍=(36MHz(PCLK1)/4096)/8 = 1098Hz */ /* 也就是说1秒钟计数器减1098下 */ /* 周期 T=1/1098 s = 0.91ms */ WWDG_SetPrescaler(fprer); // 设置IWDG预分频值 /* 窗口值用wr , 就是说计数器满是0x7F, 在减到wr之前喂狗了就算喂早了--会复位 */ /* wr值一定要大于0x40, 否则窗口值就不存在了, 因为计数器从 0x40减到0x3F会产生看门狗复位 */ WWDG_SetWindowValue(wr); // 设置窗口值 /* 看门狗使能, 并初始化定时器为0x7F 计数器减到0x3F时(T6位清零), 则产生一个复位*/ WWDG_Enable(WWDG_CNT); // 使能看门狗, 设置 counter WWDG_ClearFlag(); // 清除提前唤醒中断标志位 WWDG_NVIC_Init(); // 初始化窗口看门狗 NVIC /* 使能EW interrupt 这个在计数器减到0x40的时候产生一个"死前"中断, * 当然也可以在这个中断里赶紧喂狗, 省得狗咬你(复位) */ WWDG_EnableIT(); // 开启窗口看门狗中断 } /* WWDG 中断服务函数 */ /* * 一般来说,这个"死前"中断里面不应该喂狗的, * 而是应该做系统临死前的一些工作, 例如保存重要数据之类的 */ void WWDG_IRQHandler(void) { WWDG_ClearFlag(); // 清除提前唤醒中断标志位 LED1 = !LED1; // LED1 状态翻转 printf("进入中断!rn"); } int main(void) { u8 tr, wr; delay_init(); NVIC_Configuration(); // 设置NVIC中断分组2:2位抢占优先级, 2位响应优先级 LED_Init(); KEY_Init(); uart_init(9600); LED0 = 0; delay_ms(300); WWDG_Init(0x7F, 0x5F, WWDG_Prescaler_8); // 计数器值为7f, 窗口寄存器值为5f, 分频数为8 while(1) { LED0 = 1; wr=WWDG->CFR&0X7F; // 窗口值 tr=WWDG->CR&0X7F; // 计数器值 /* 注意tr和wr的比较,确定喂狗时间 */ if(tr WWDG_SetCounter(WWDG_CNT); printf("正在喂狗!rn"); } } } 实践出真知! 试验现象:DS0(红灯)先亮,再灭,DS1无变化。 试验现象说明:在规定的时间段及时的喂狗了,程序没有进入中断函数。 |
|
相关推荐
6 个讨论
|
|
【瑞萨RA6E2】瑞萨E2S软件安装过程,等待过程玩下97_e2 studio_ZGZZ
140 浏览 0 评论
483 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
815 浏览 0 评论
1346 浏览 2 评论
804 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16903 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 17:20 , Processed in 0.742493 second(s), Total 62, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3319