STM32完全学习——独立看门狗和窗口看门狗

一、独立看门狗

首先独立看门口其实就是一种特殊情况下的窗口看门狗,使用HAL库,这个模块一共有两个函数,一个是初始化,另外一个就是我们的喂狗函数。所谓看门狗就是一个定时器,需要在他计时结束之前给他重新赋值即可,不然就会发生复位。独立看门狗遇到情况,就只能复位而没有其他的操作,但是独立看门狗的好处是他的时钟使用的是内部HSI时钟,这样的好处就是,就算系统的时钟有问题,他也可以完成复位的过程。程序也很好写,STM32CubMAX工具会帮我们生成代码我们只需要在主程序里面及时的喂狗就可以了。

cpp 复制代码
HAL_IWDG_Refresh(&hiwdg);

二、窗口看门狗

窗口看门狗比独立看门狗,复杂的一点就在于,他必须在特定的时间之内喂狗,喂的早了不行,喂的晚了也不行,一定要在我们设置的那个窗口中去喂狗。STM32F407这个芯片的窗口设置我们只能设置窗口的上限,而窗口的下限是被固定死的也就是计数器到63就会被复位。而且他的内部使用的是PLCK1的时钟,需要注意的是他这个计数器的计时个数是每4096个时钟会计数一次,这个很重要。他这个喂狗你如果实在主程序里面喂狗一定要注意喂狗时间的计算,一定要非常的准,不然就会产生复位,如果你觉得这样麻烦,那么你也可以在中断里面喂狗,窗口看门狗提供一个提前唤醒的中断,也就是计数器在减到63之前,会产生一个中断,然后在里面喂狗也是可以的,但是需要注意的是进入中断之后一定要先喂狗,你想要在中断里面处理的其他操作放到后面在处理,不然你的操作时间太长的话就复位。

至于STM32CubMAX工具如何配置和生成代码,我这里就不说了,网上有很多的文章都在将这个。我这里想说的的是关于窗口看门狗里面的用户自定义回调函数的使用。

cpp 复制代码
HAL_StatusTypeDef HAL_WWDG_RegisterCallback(WWDG_HandleTypeDef *hwwdg,HAL_WWDG_CallbackIDTypeDef CallbackID, pWWDG_CallbackTypeDef pCallback)
cpp 复制代码
 HAL_WWDG_RegisterCallback(&hwwdg, 0, MY_HAL_WWDG_EarlyWakeupCallback):

你需要自己定义一个函数函数名随意,但是传参和返回类型要一致。然后再主程序运行之前调用上面的那个函数就可以了。上面函数里面的0呢表示的就是,自定义的是早醒回调函数。

cpp 复制代码
void MY_HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
{
	HAL_WWDG_Refresh(hwwdg);
	printf("err4");
	
}
相关推荐
CCCC13101632 小时前
嵌入式学习(day 28)线程
jvm·学习
星星火柴9363 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
小狗爱吃黄桃罐头3 小时前
正点原子【第四期】Linux之驱动开发篇学习笔记-1.1 Linux驱动开发与裸机开发的区别
linux·驱动开发·学习
fengfuyao9853 小时前
STM32如何定位HardFault错误,一种实用方法
stm32·单片机·嵌入式硬件
爱学习的颖颖3 小时前
EXTI外部中断的执行逻辑|以对射式红外传感器计次为例
单片机·嵌入式硬件·exti中断
艾莉丝努力练剑4 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
keer_zu4 小时前
STM32L051 RTC闹钟配置详解
stm32·嵌入式硬件
武昌库里写JAVA5 小时前
JAVA面试汇总(四)JVM(一)
java·vue.js·spring boot·sql·学习
AI精钢5 小时前
H20芯片与中国的科技自立:一场隐形的博弈
人工智能·科技·stm32·单片机·物联网
杜子不疼.5 小时前
《Python学习之字典(一):基础操作与核心用法》
开发语言·python·学习