STM32 之 外部开门狗(iwdg)
即使主时钟发生故障它也仍然有效。
窗口看门狗由从APB1时钟分频后得到的时钟驱动,
通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。
IWDG最适合应用于那些需要看门狗作为一个在主程序之外,
能够完全独立工作,并且对时间精度要求较低的场合。
WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序
IWDG主要性能
●自由运行的递减计数器
●时钟由独立的RC振荡器提供(可在停止和待机模式下工作)
●看门狗被激活后,则在计数器计数至0x000时产生复位
下面是使用代码:
C语言:Codee#18865
voidLSI_RCC_Configuration(void)
{
RCC_LSICmd(ENABLE);//打开LSI
while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY)==RESET);//等待直到LSI稳定
}
=================================================================================
voidIWDG_Configuration(void)
{
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);// 打开使能,因为iwdg的寄存器有写保护,必须先写入0x5555,才能操作寄存器
IWDG_SetPrescaler(IWDG_Prescaler_256);// 独立看门狗使用内部低速振荡器LSI,对LSI进行256分频
IWDG_SetReload(2500);// 设定独立看门狗计数器的计数值(0x000~0xFFF;0~4095),复位时间为16s
IWDG_ReloadCounter();// 重载独立看门狗计数器,向寄存器写入0xAAAA,或者更新计数值
IWDG_Enable();// 开启看门狗,向寄存器写入0xCCCC即可
}
喂狗程序直接使用IWDG_ReloadCounter();函数。
其中 LSI_RCC_Configuration(); // 内部低速时钟配置 该函数可以不用,但是等低速内部时钟稳定后再开外部看门狗比较好。
现在说说如何计算外部看门狗计数器复位的时间。
先给出datasheet上的预分频和对应的时间范围:
我们来举个例子:
比如上面的代码所示,预分频256,然后计数值是2500次,则外部看门狗计数器复位时间为16秒。
首先LSI是40KHz,这里不考虑其上下浮动的情况。
- 40000Hz / 256 = 156.25Hz 这里40KHz就是40000Hz进行256分频后,计数器的频率为156.25Hz;
- 1 / 156.25Hz = 0.0064s156.25Hz换算成时间就是0.0064秒,即为每次计数用时0.0064秒;
- 0.0064s * 2500 = 16s 则2500次计数用时16秒,16秒后计数初值被减到零,触发复位,被狗咬到。
如何测试:
stm32 的速率比较高,如果用LED作测试可能无法看到他的复位效果。
所以还是用仿真器比较好用,下面是一个示意:
STM32外部开门狗iwd 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)