看门狗:用于检测单片机程序状态的模块或芯片 在程序跑飞的情况下,系统复位,程序重新执行
stm32有两个看门狗:
1、独立看门狗IWDG 使用于看门狗独立作为主程序之外的能够独立的工作,并且对事件精度要求低的场合 是专用低速时钟LSI,当主时钟故障时仍工作
2、窗口看门狗 由APB1时钟分频够得到时钟驱动,可配置时间窗口来检测程序非正常的过迟或过早的操作
启动独IWDG:在键值寄存器IWDG_KR中写入0xCCCC, 此时计数器从复位值0xFFF递减到000时产生一个IWDG_RESET复位信号。
喂狗:任何时候在键值寄存器IWDG_KR中写入0xAAAA, 自动重装计数器IWDG_RLR值会重新加到计数器。避免到000
程序异常时,不能写入0xAAAA,从而系统复位。
独立看门狗框图:
注:预分频寄存器IWDG_PR 重装载寄存器IWDG_RLR 都具有写保护功能, 要操作前必须取消写保护
方法:向键值寄存器IWDG_KR的0~15位 写入0x5555
超时时间计算:Tout = ( ( 4 * 2^prer ) * rlr ) / 40 (ms)
prer(用的是十进制):分频数 十进制0~7 ---> 16进制 000~111 即IWDG_PR中的[2:0]位
rlr重装寄存器值:低11位有效
库函数:
void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);//取消写保护:0x5555使能
void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);//设置预分频系数:写PR
void IWDG_SetReload(uint16_t Reload);//设置重装载值:写RLR
void IWDG_ReloadCounter(void);//喂狗:写0xAAAA到KR
void IWDG_Enable(void);//使能看门狗:写0xCCCC到KR
FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG);//状态:重装载/预分频 更新
操作步骤:
1、取消写保护: IWDG_WriteAccessCmd()
2、设置分频系数 :IWDG_SetPrescler()
3、设置重装值:IWDG_SetReloat()
4、使能:IWDG_Enable()
5、应用程序喂狗:IWDG_ReloadCounter()