完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
a) 目的:
了解两种看门狗(我叫它:系统运行故障探测器和独立系统故障探测器,新手往往被这个并不形象的象形名称搞糊涂)之间的区别和基本用法。 b) 相同: 都是用来探测系统故障,通过编写代码定时发送故障清零信号(高手们都管这个代码叫做“喂狗”),告诉它系统运行正常。一旦系统故障,程序清零代码(“喂狗”)无法执行,其计数器就会计数不止,直到记到零并发生故障中断(狗饿了开始叫唤),控制CPU重启整个系统(不行啦,开始咬人了,快跑……)。 c) 区别: 独立看门狗Iwdg——我的理解是独立于系统之外,因为有独立时钟,所以不受系统影响的系统故障探测器。(这条狗是借来的,见谁偷懒它都咬!)主要用于监视硬件错误。 窗口看门狗wwdg——我的理解是系统内部的故障探测器,时钟与系统相同。如果系统时钟不走了,这个狗也就失去作用了。(这条狗是老板娘养的,老板不干活儿他不管!)主要用于监视软件错误。 d) 初始化函数定义: 鉴于两只狗作用差不多,使用过程也差不多初始化函数栓一起了,用的时候根据情况删减。 void WDG_Configuration(void); e) 初始化函数调用: WDG_Configuration(); f) 初始化函数
g) RCC初始化:只有软件看门狗需要时钟初始化,独立看门狗有自己的时钟不需要但是需要systic工作相关设置。 RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); h) 独立看门狗使用systic的中断来喂狗,所以添加systic的中断打开代码就行了。 软件看门狗需要在NVIC打开中断添加如下代码:
i) 中断程序,软件看门狗在自己的中断中喂狗,独立看门狗需要使用systic的定时中断来喂狗。以下两个程序都在STM32f10x_it.c文件中。 void WWDG_IRQHandler(void) { WWDG_SetCounter(0x7F); //更新计数值 WWDG_ClearFlag(); //清除标志位 } void SysTickHandler(void) { IWDG_ReloadCounter(); //重启计数器(喂狗) } j) 注意事项: i. 有狗平常没事情可以不理,但是千万别忘了喂它,否则死都不知道怎么死的! ii. 初始化程序的调用一定要在systic的初始化之后。 iii. 独立看门狗需要systic中断来喂,但是systic做别的用处不能只做这件事,所以我写了如下几句代码,可以不影响systic的其他应用,其他systic周期代码也可参考: 第一步:在stm32f10x_it.c中定义变量 int Tic_IWDG; //喂狗循环程序的频率判断变量 第二步:将SysTickHandler中喂狗代码改为下面: Tic_IWDG++; //变量递增 if(Tic_IWDG>=100) //每100个systic周期喂狗 { IWDG_ReloadCounter();//重启计数器(喂狗) Tic_IWDG=0; //变量清零 } 相关链接: stm32学习教程16:题外话,自己做块工程板 |
|
相关推荐
2 个讨论
|
|
690 浏览 0 评论
735 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
624 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1099 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1092 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11793 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 02:12 , Processed in 0.637659 second(s), Total 38, Slave 31 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号