一、独立看门狗
STM32的独立看门狗有内部的40kHz低速时钟驱动,即使主时钟发生故障,他也仍然有效。需要注意:独立看门狗的时钟是一个内部RC时钟,所以并不是准确的40kHz,而是在30kHz~60kHz之间变化的时钟,所以独立看门狗的时间并不精确。
在键值寄存器(IWDG_KR)中写入0xCCCC,开始启动独立看门狗;此时计数器开始从复位值0xFFF递减计数;当计数到末尾0x000时,会产生一个信号(IWDG_RESET)。无论何时只要键值寄存器(IWDG_KR)中写入0xAAAA,IWDG_RLR中的值就会被重新加载到计数器中去,从而避免产生看门狗复位。
独立看门狗时钟来自内部低速时钟LSI,需使能 RCC_LSICmd(ENABLE);
A、取消寄存器写保护(向IWDG_KR写入0x5555)
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
B、设置独立看门狗的预分频系数和重装载值
IWDG_SetPrescaler(uint8_t IWDG_Prescaler);
IWDG_SetReload(uint16_t Reload);
看门狗溢出时间:
Tout=((4*2^IWDG_Prescaler)*Reload)/40 ms
C、重载计数值喂狗(向IWDG_KR写入0xAAAA)
IWDG_ReloadCounter();
D、启动看门狗(向IWDG_KR写入0xCCCC)
IWDG_Enable();
注意:IWDG一旦启用,就不能再被关闭!想要关闭只能重启,并且重启之后不能打开IWDG。
二、窗口看门狗
除非递减计数器的值在WWDG_CR的第六位变成0前刷新,窗口看门狗在达到预置的时间周期时会产生一个MCU复位。递减计数器达到窗口配置寄存器(WWDG_CFR)数值之前,如果7位的递减计数器的数值被刷新,那么也将产生一个MCU复位。
WWDG_CFR的低7位是窗口看门狗的上窗口,是由用户根据需要设定的,要确保上窗口值大于0x40;下窗口值是固定的0x40;WWDG_CR的低7位是窗口看门狗的计数值。窗口看门狗只有在上下窗口之间被刷新才不会产生复位。
超时公式:
Twwdg=(4096*2^WDGTB*(计数值+1))/Fpclkl ms
注:Fpclkl是APB1的时钟频率(kHz)
WDGTB是WWDG的预分频系数
A、使能WWDG时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);
B、设置窗口值和分频数
void WWDG_SetWindowValue(uint8_t WindowValue); //设置窗口值
void WWDG_SetPrescaler(uint32_t WWDG_Prescaler);//设置分频数
C、开启WWDG中断并分组
WWDG_EnableIT();
D、设置计数器初始值并使能看门狗
void WWDG_Enable(uint8_t Counter);
E、编写中断服务函数
WWDG中断初始化WWDG_IRQn;在中断服务函数WWDG_IRQHandler中调用WWDG_ClearFlag(),清除提前唤醒中断标志位。
上一篇:STM32 JTAG引脚做普通I/O口用
下一篇:stm32f429三通道ADC配置
推荐阅读最新更新时间:2024-03-16 16:16