●看门狗的意义
1、 c语言的执行过程
在单片机中,c程序从地址0开始按照规律一直向下执行,其中PC指针指示当前代码执行的地址。以STM32F407来说,代码在向下执行的过程中,PC指针一直顺着内存地址移动。在执行到main函数的最后一句时,如果没有特殊情况,PC指针还是会持续移动,直到4GB-1Z地址处,最终PC指针又回到0地址循环移动。因此你会看到很多代码的main函数最后一句时一个while死循环!!!PC指针最终停留在你的死循环位置,这样代码就不会从头开始循环执行,也就不会产生复位!
2、 看门狗
狗这种东西就是在有特殊情况的时候狂叫不止,产生报警行为。在单片机中看门狗的功能类似,不过这种狗只会在它饿的时候产生报警(这里的报警一般是复位)。看门狗实质是一个倒数的计数器,如果它数到0,那么就会产生复位!我们在初始化看门狗的时候可以给它一个初始的计数值,使能看门狗之后它就开始倒数,至于什么时候会数到零和你的初始化有关系。例如我们配置一个看门狗3s之后会数到零,那么为了不让它复位,你必须在比3s短的时间内喂狗(重新给它一个计数值就可以了,它会按你给的计数值重新倒数)。
到此可以知道看门狗的工作原理就是:初始化一个技术值,在它归零之前进行喂狗。既然看门狗一直在工作,那么你就必须一直喂它(就是家里的狗,一日三餐,少一顿它就开始卖萌了^_^)。
假设我们配置看门狗3s就会计数到零,我们做一个死循环每隔2s喂一次,那这条狗就不会饿了。但是单片机在执行的时候可能会程序跑飞,也就是说代码不按照你写的规矩走,那么你的喂狗程序也就不能执行了,这时3s一过狗就饿了,也就会产生复位操作。由此可以知道看门狗的功能了,只要你配置正确,按时喂狗,那么它只有在程序跑飞的时候才会产生复位。一般大型的项目都会用到看门狗,一旦机器本身出了问题,那么就可以立马复位,而不会造成死机。
●从手册到流程
1、 STM32看门狗
1) 功能描述
2) 寄存器
2、 初始化流程
1) 从RCC打开定时器时钟
2) 向关键字寄存器写入0X5555,解除保护
3) 设置预分频值
4) 设置重载计数值
5) 向关键字寄存器写入0xcccc,开启看门狗
●从流程到代码
1)初始化
2)喂狗