stm32_独立看门狗IWDG
stm32_独立看门狗IWDG
STM32F10xxx内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。
独立看门狗IWDG由内部低速时钟LSI驱动(STM32F10xxx的LSI时钟是40KHz),即使主时钟发生故障,独立看门狗也仍然有效。IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。
IWDG主要性能
- 自由运行的12位递减计数器
- 时钟由独立的RC振荡器提供(可在停止和待机模式下工作)
- 看门狗被激活后,则在计数器计数至0x000时产生系统复位
IWDG功能描述
下图为独立看门狗的功能框图,参考“STM32F10xxx参考手册”
1.启动独立看门狗:在键寄存器(IWDG_KR)中写入0xCCCC
此时计数器开始从其复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。
2.无论何时,只要在键寄存器IWDG_KR中写入0xAAAA, IWDG_RLR中的值就会被重新加载到计数器,从而避免产生看门狗复位 。
IWDG寄存器描述
可以用半字(16位)或字(32位)的方式操作这些外设寄存器
- 键寄存器(IWDG_KR)
- 预分频寄存器(IWDG_PR)
- 重装载寄存器(IWDG_RLR)
- 状态寄存器(IWDG_SR)
IWDG代码示例
1 //初始化独立看门狗,LSI时钟频率为40KHz 2 //prer:分频数:0~7(只有低3位有效!) 3 //分频因子=4*2^prer.但最大值只能是256! 4 //rlr:重装载寄存器值:低11位有效. 5 //时间计算(大概):Tout=((4*2^prer)*rlr)/40 (ms). 6 void IWDG_Init(unsigned char prer, unsigned short rlr) 7 { 8 IWDG->KR=0x5555;//使能对IWDG->PR和IWDG->RLR的写 9 IWDG->PR=prer; //设置分频系数 10 IWDG->RLR=rlr; //从加载寄存器 IWDG->RLR 11 IWDG->KR=0xAAAA;//reload 12 IWDG->KR=0xCCCC;//使能看门狗 13 } 14 //喂独立看门狗 15 void IWDG_Feed(void) 16 { 17 IWDG->KR=0xAAAA;//reload 18 }