stm32的看门狗初始化配置步骤:
1. 先把IWDG_PR 和IWDG_RLR 两个寄存器写操作使能。
2. 配置IWDG预分频值,4到256,最大为256。
3. 设置IWDG重装载寄存器的重装载初值,0x00到0xFFF。
4. 按照IWDG重装载寄存器的值重装载IWDG计数器。
5. 使能IWDG,即打开看门狗。
例如,初始化独立看门狗,并且配置喂狗时间大约3S左右:
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable) ; //使能或者失能对寄存器IWDG_PR 和IWDG_RLR 的写操作
IWDG_SetPrescaler(IWDG_Prescaler_64); //设置IWDG 预分频值,取值范围:4,8,16,32,64,128,256,最大为256
while(IWDG_GetFlagStatus(IWDG_FLAG_PVU) == RESET) ; //预分频器更新中
IWDG_SetReload(0x753); //设置IWDG 重装载值 取值范围:0x00~0x0FFF
IWDG_ReloadCounter(); //按照IWDG 重装载寄存器的值重装载IWDG 计数器
while(IWDG_GetFlagStatus(IWDG_FLAG_RVU) == RESET) ; //重装载值更新进行中
IWDG_Enable(); //使能IWDG
//喂狗时间计算公式,Tout=((4*2^prer)*rlr)/40 单位ms(因为内部RC振荡不稳定,所以计算出来的喂狗时间也是个大概时间,不精确) Tout:益出时间也就是至少多长时间喂狗一次 prer:分频系数0~7(低3位有效) rlr:重装载寄存器值(低12位有效)
//(4*2^prer)是分频系数值,即预分频值
//如果配置预分频值为64,且3000ms左右喂狗一次,则可以计算出重装载寄存器值:3000=((4*2^4)*rlr)/40=64*rlr/40由此公式可以算出来寄存器值rlr=1875,换算成16进制为0x753
|