tag 标签: 独立看门狗

相关博文
  • 热度 19
    2013-7-9 20:08
    904 次阅读|
    1 个评论
     STM32F10x系列内置有两个看门狗:独立看门狗(IWDG)和窗口看门狗(WWDG)。    独立看门狗由内部专门的40Khz低速时钟驱动,即使主时钟发生故障,它也仍然有效。但是,独立看门狗的时钟并不是准确的40Khz,而是在30~60Khz之间变化的一个时钟。     使用独立看门狗我们需要用到几个寄存器:     1)键寄存器(IWDG_KR),在键寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从复位值0xFFF递减计数。当计数器计数到末尾0x00时,会产生一个复位信号(IWDG_RESET)。无论何时,只要键寄存器IWDG_KR总被写入0xAAAA,IWDG_RLR中的值就会被重新加载到计数器中从而避免产生看门狗复位。     2)预分频寄存器(IWDG_PR),低3位有效,具有写保护功能。要改变预分频因子,I状态寄存器(WDG_SR)的PVU位必须为0.     3)重装载寄存器(IWDG_RLR)低12位有效,具有写保护功能。每当向键寄存器(IWDG_KR)写入0xAAAA时,重装载值会被传送到计数器中,随后计数器从这个值开始递减计数。      启动独立看门狗需要进行一下操作:     1)向键寄存器(IWDG_KR)写入0x5555,通过写入值取消预分频寄存器(IWDG_PR)和重装载寄存器(IWDG_RLR)的写保护。喂狗时间:Tout=40Khz/(4*2^prer)*rlr)     2)向键寄存器(IWDG_KR)写入0xAAAA,是STM32重新加载IWDG_RLR的值到看门狗计数器里面。     3)向键寄存器(IWDG_KR)写入0xCCCC,启动STM32的看门狗。 参考程序: /*************************************************************************************** **************************************************************************************** * FILE : IWDG.c * Description : Init Independent watchdog  *  prer:Prescaler : 0~7   (the last 3 bit are effective) *  Division factor=4*2^prer. =256 *  rlr::IWGD_RLR: low 12 bit are effective *  Time calculate:  Tout=40K/((4*2^prer)*rlr)   *   * Study STM32 record. *  * History:           LED0             PB.0           KEY01           PB.5           KEY00           PB.4  KEY10           PC.10 * Version Name       Date Description        1.0                  Penny        2013/6/18         **************************************************************************************** ****************************************************************************************/    #include "ms5.h"   void IWDG_Init(u8 prer, u16 rlr) { IWDG-KR=0x5555;       //使能预分频寄存器IWDG-PR 和重装载寄存器IWDG-RLR写功能   IWDG-PR=prer;         //设置预分频值: LSI/32=40Khz/4*2^pre IWDG-RLR=rlr;          //设置重加载值: 重加载寄存器IWDG-RLR IWDG-KR=0xAAAA;    //按照IWDG重装载寄存器的值重装载IWDG计数器 IWDG-KR=0xCCCC;    //使能看门狗 }     //喂独立看门狗 void IWDG_Feed(void) { IWDG-KR=0xAAAA;      //reload }  
相关资源