HAL库STM32独立开门狗(IWDG)使用详解
看门狗介绍
介绍:看门狗其实就是一个定时器,给他设置一个定时值,它会逐渐递减,递减到0后就会进行芯片复位,在看门狗定时器还没到达0时重新给他赋值的这个操作就叫喂狗。其实不管是单片机这样,大多数带看门狗的芯片实现都是这样的。
作用:防止程序发生死循环,或者程序跑飞。
STM32看门狗介绍
STM32包含两种开门狗:
- 窗口看门狗(WWDG)
- 独立开门狗(IWDG)
两者区别是窗口开门狗如果超时没有喂狗是触发中断,而独立开门狗是直接进行芯片复位。
时钟来源:
独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。
窗口看门狗(WWDG)由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。
使用场合:
IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。
WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。
IWDG功能描述:
在键寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗,此时计数器开始从其复位值
0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。 无论何时,只要在键寄存器IWDG_KR中写入0xAAAA,IWDG_RLR中的值就会被重新加载到计数器,从而避免产生看门狗复位。
IWDG_PR和IWDG_RLR寄存器具有写保护功能。要修改这两个寄存器的值,必须先向IWDG_KR寄存器中写入0x5555。以不同的值写入这个寄存器将会打乱操作顺序,寄存器将重新被保护。重装载操作(即写入0xAAAA)也会启动写保护功能。 状态寄存器指示预分频值和递减计数器是否正在被更新。
IWDG超时时间:
F1系列:
F4系列:
由表可知,F1系列LSI给看门狗的时钟频率是40KHz,F4系列是32KHz。
超时时间计算公式:
超时时间Tout = 4 * 2^PR * (重载值 + 1) / LSI
重载值取值范围:0~4095
以F1为例,4分频时所对应的PR位为0,重载值为0时是最短的超时时间,套用公式后:
4 * 2 ^ 0 * (0 + 1) / 40000HZ = 0.0001s = 0.1ms
当重载值为4095时是最大超时时间,套用公式:
4 * 2 ^ 0 (4095 + 1) / 40000HZ = 0.4096s = 409.6ms
STM32Cube配置设置
以F1为例,开启看门狗:
配置时钟:
然后生成代码就可以了。
注意: 生成的IWDG初始化函数MX_IWDG_Init
已经将看门狗启动了,如果不想这么早启动看门狗,可以将MX_IWDG_Init
往后放。
喂狗函数:HAL_IWDG_Refresh(&hiwdg);
END…