stm32_独立看门狗

看门狗:用于检测单片机程序状态的模块或芯片   在程序跑飞的情况下,系统复位,程序重新执行

stm32有两个看门狗:

   1、独立看门狗IWDG    使用于看门狗独立作为主程序之外的能够独立的工作,并且对事件精度要求低的场合     是专用低速时钟LSI,当主时钟故障时仍工作

2、窗口看门狗     由APB1时钟分频够得到时钟驱动,可配置时间窗口来检测程序非正常的过迟或过早的操作

启动独IWDG:在键值寄存器IWDG_KR中写入0xCCCC,     此时计数器从复位值0xFFF递减到000时产生一个IWDG_RESET复位信号。

喂狗:任何时候在键值寄存器IWDG_KR中写入0xAAAA,     自动重装计数器IWDG_RLR值会重新加到计数器。避免到000

程序异常时,不能写入0xAAAA,从而系统复位。

独立看门狗框图:

stm32_独立看门狗_第1张图片

注:预分频寄存器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()


你可能感兴趣的:(stm32)