STM32f10x--->bsp(IWDG)
IWDG(independent watch dog)
- 大纲
- 作用
- 时钟图
- 功能框图
- 程序
注意点:不要用仿真器进行单步调试,因为看门狗一直在计时。
作用:独立看门狗一般用来检测和解决由程序引起的故障
现象:如果在规定时间内检测的程序没有被喂狗,软件就会复位。即时这个程序运行在while中,她是独立于循环的,可以自己检测。(违反程序的逻辑)
特别的,如果你用单步调式,独立看门狗会复位,因为你设置的时间太短了,它在背后运行着。全速运行就可以喂狗。
时钟图
由上图可知她是用RC震荡器引出的,独立于系统的,即时系统时钟死了也没事。
IWDG 功能框图
相关参数
分频器:确定计数一次所需要的时间 prv
重装载寄存器:每次计数的数量,rlv
相关程序
#include "bsp_iwdg.h"
/*
* 设置 IWDG 的超时时间
* Tout = prv/40 * rlv (s)
* prv可以是[4,8,16,32,64,128,256]
* prv:预分频器值,取值如下:
* @arg IWDG_Prescaler_4: IWDG prescaler set to 4
* @arg IWDG_Prescaler_8: IWDG prescaler set to 8
* @arg IWDG_Prescaler_16: IWDG prescaler set to 16
* @arg IWDG_Prescaler_32: IWDG prescaler set to 32
* @arg IWDG_Prescaler_64: IWDG prescaler set to 64
* @arg IWDG_Prescaler_128: IWDG prescaler set to 128
* @arg IWDG_Prescaler_256: IWDG prescaler set to 256
*
* rlv:预分频器值,取值范围为:0-0XFFF
* 函数调用举例:
* IWDG_Config(IWDG_Prescaler_64 ,625); // IWDG 1s 超时溢出
*/
void IWDG_Config(uint8_t prv ,uint16_t rlv)
{
// 使能 预分频寄存器PR和重装载寄存器RLR可写
IWDG_WriteAccessCmd( IWDG_WriteAccess_Enable );
// 设置预分频器值
IWDG_SetPrescaler( prv );
// 设置重装载寄存器值
IWDG_SetReload( rlv );
// 把重装载寄存器的值放到计数器中
IWDG_ReloadCounter();
// 使能 IWDG
IWDG_Enable();
}
// 喂狗
void IWDG_Feed(void)
{
// 把重装载寄存器的值放到计数器中,喂狗,防止IWDG复位
// 当计数器的值减到0的时候会产生系统复位
IWDG_ReloadCounter();
}