概述
由于单片机在运行的过程经常会受到外部电磁场的干扰,就可能会出现程序“跑飞”,比如出现数据的缺失、导致寄存器中的数据发生变化、程序指针PC指向非法地址........
为了提高程序的可靠性,就提供了看门狗外设,在程序出现由软件或者硬件导致的未知问题,利用看门狗外设对芯片进行复位,相当于重新运行程序。
如果程序运行没有任何问题,则可以按时喂狗,就不会让芯片复位,一旦程序出现问题导致无法喂狗,则看门狗会自动复位程序。
使用看门狗的目的:为了提供程序的可靠性,防止由软件或者硬件造成的问题的出现。如果想要了解看门狗的资源和特点,可以参考STM32F4中文参考手册。
STM32F4系列的芯片提供的两个看门狗,一个叫做独立看门狗,一个叫做窗口看门狗。两个看门狗的使用流程差不多,但是相比于独立看门狗,窗口看门狗比较难伺候。
独立看门狗
如果系统复位,那么如何判断是用户手动复位的还是由看门狗复位的?
函数原型
FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG)
函数参数
参数一:RCC_FLAG 指的是需要检测的标志 如 RCC_FLAG_IWDGRST
返回值 SET(发生) or RESET(没发生)
独立看门狗的使用流程
可以参考stm32f4xx_iwdg.c的开头注释,代码编写流程如下图所示
提示:喂狗操作应该放在定时器中断进行,并且定时器的中断抢占优先级必须是最高的。
窗口看门狗
注意:WWDG外设没有独立的时钟源,而是挂载在APB1总线下,APB1总线外设时钟为42MHZ。
WWDG外设的使用流程
可以参考stm32f4xx_wwdg.c的开头注释,具体流程如下图所示
注意:WWDG看门狗是具有提前中断唤醒功能的,可以利用中断服务函数在该中断里面进行数据的保存,或者在某些情况下利用中断服务函数进行喂狗操作,防止芯片复位。