1.Introduction
stm32 有两个嵌入式看门狗外设,一个是independent watch dog,一个是window watch dog 。IWDG 是由stm32内部LSI提供的低速时钟,即使主时钟发生故障也不会影响IWDG。WWDG clocked from APB1 ,而且至于WWDG能触发中断。
LSI(40KH)
2.IWDG main features
• Free-running downcounter
• clocked from an independent RC oscillator (can operate in Standby and Stop modes)
• Reset (if watchdog activated) when the downcounter value of 0x000 is reached
3.Function description
IWDG有四个寄存器分别是IWDG_KR,IWDG_RLR,IWDG_SR,IWDG_PR.
IWDG_PR和IWDG_RLR的write access是未使能的。我们可以通过向IWDG_KR写入0x5555使能write。
IWDG_PR设置IWDG的分频系数。
IWDG_SR更新IWDG_RLR和IWDG_PR的工作状态
向IWDG_KR写入0xCCCC,启动独立看门狗,看门狗计数器从0xFFF开始以设置的分频后的频率递减到0x000时,产生一个复位信号。如果在此之前向IWDG_KR写入0xAAAA,计数器将把IWDG_RLR中的值加载到计数器中,因此计数器不会递减到0x000,即不会产生复位信号。
溢出时间:
Tout=((4×2^prer) ×rlr) /40
prer : 预分频系数 乘以4是因为s't'm32f1中定义000是4分频
rlr:是重装载值
4.Register
1.Key register (IWDG_KR)
必须以一定的间隔向IWDG_KR写0xAAAA,否则会Reset
写0x5555 使能寄存器IWDG_PR,IWDG_RLR
写0xCCCC start watch dog(除非使能了硬件看门狗)
2.Prescaler register (IWDG_PR)
IWDG_PR 后三位是设置其分频系数,如下:
3.Reload register(IWDG_RLR)
独立看门狗计数器重载值
4.Status register(IWDG_SR)
判断RLR和PR寄存器是否在工作
溢出时间
Tout = (4*2^PR[2:0])/40 单位s
附上IWDG初始化程序:
//start IWDG
WRITE_REG(hiwdg->Instance->KR,0x0000CCCC);
//write access
WRITE_REG(hiwdg->Instance->KR,0x00005555);
//set PR RLR
hiwdg->Instance->PR = Prescaler;//数,你设置的值
hiwdg->Instance->RLR= Reload;//常数,你设置的值
//上面是初始化
//refresh counter
WRITE_REG(hiwdg->Instance->KR,0x0000AAAA);