热度 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 }