STM32F10xxx内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。
独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。
IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。
在键寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。 无论何时,只要在键寄存器IWDG_KR中写入0xAAAA, IWDG_RLR中的值就会被重新加载到计数器,从而避免产生看门狗复位 。
独立看门狗框图
键寄存器:本质就是个控制寄存器,在可能存在干扰的情况下,一般通过在整个键寄存器写入特定值来代替控制寄存器写入一位的功能,以降低硬件电路受到干扰的概率。
写入键寄存器的值 |
作用 |
0xCCCC |
启用独立看门狗 |
0xAAAA |
IWDG_RLR中的值重新加载到计数器(喂狗) |
0x5555 |
解除IWDG_PR和IWDG_RLR的写保护 |
0x5555之外的其他值 |
启用IWDG_PR和IWDG_RLR的写保护 |
这些时间是按照40kHz时钟给出。实际上,MCU内部的RC频率会在30kHz到60kHz之间变化。此外,即使RC振荡器的频率是精确的,确切的时序仍然依赖于APB接口时钟与RC振荡器时钟之间的相位差,因此总会有一个完整的RC周期是不确定的。
计算公式:
不用开启时钟
但是需要解除写保护
0x5555 |
解除IWDG_PR和IWDG_RLR的写保护 |
0x5555之外的其他值 |
启用IWDG_PR和IWDG_RLR的写保护 |
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //独立看门狗写使能
根据步骤再设置预分频值以及重装载值,最后使能即可。
IWDG_SetPrescaler(IWDG_Prescaler_16); //设置预分频为16
IWDG_SetReload(2499); //设置重装值为2499,独立看门狗的超时时间为1000ms
IWDG_ReloadCounter(); //重装计数器,喂狗
窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个MCU复位。在递减计数器达到窗口寄存器数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新, 那么也将产生一个MCU复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。
窗口看门狗是可编程的自由运行递减计数器 。
条件复位 ─ 当递减计数器的值小于0x40,(若看门狗被启动)则产生复位。 ─ 当递减计数器在窗口外被重新装载,(若看门狗被启动)则产生复位。 如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断(EWI),它可以被用于重装载计数器以避免WWDG复位。
电路逻辑门图形符号汇总_八种逻辑门电路符号-CSDN博客https://blog.csdn.net/rwrsgg/article/details/106849011
如果看门狗被启动(WWDG_CR寄存器中的WDGA位被置’1’), 并且当7位(T[6:0])递减计数器从0x40翻转到0x3F(T6位清零)时(意思就是从1000000--64--0x40变成了0111111 -- 63 --0x3F),
则产生一个复位。如果软件在计数器值大于窗口寄存器中的数值时重新装载计数器,将产生一个复位。
WDGA位置1,与门的另外一路,只有输入1才能产生复位,故之后的或门入口必须有一位是1,当T6位从1变成0,那么对其取反就是1,那么该或门就会输出1,发生复位。因为是或门,所以任意一路输入1都可以复位。
递减计数器T[6:0]的值小于0x40时,WWDG产生复位;
递减计数器T[6:0]在窗口W[6:0]外被重新装载时,WWDG产生复位;
递减计数器T[6:0]等于0x40时可以产生早期唤醒中断(EWI),用于重装载计数器以避免WWDG复位;
定期写入WWDG_CR寄存器(喂狗)以避免WWDG复位,因为是与门,只要写入0就不会进入复位。;
TWWDG = TPCLK1 × 4096 × WDGTB预分频系数 × (T[5:0] + 1)
1/36*4096*1 = 113us -- 1/36*4096*64 = 7.28ms
TWIN = TPCLK1 × 4096 × WDGTB预分频系数 × (T[5:0] - W[5:0])
IWDG独立看门狗 |
WWDG窗口看门狗 |
|
复位 |
计数器减到0后 |
计数器T[5:0]减到0后、过早重装计数器 |
中断 |
无 |
早期唤醒中断 |
时钟源 |
LSI(40KHz) |
PCLK1(36MHz) |
预分频系数 |
4、8、32、64、128、256 |
1、2、4、8 |
计数器 |
12位 |
6位(有效计数) |
超时时间 |
0.1ms~26214.4ms |
113us~58.25ms |
喂狗方式 |
写入键寄存器,重装固定值RLR |
直接写入计数器,写多少重装多少 |
防误操作 |
键寄存器和写保护 |
无 |
用途 |
独立工作,对时间精度要求较低 |
要求看门狗在精确计时窗口起作用 |