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中写入0xAAAAIWDG_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 }

 

posted @ 2019-06-04 14:12  Will_CKH  阅读(1006)  评论(0编辑  收藏  举报