打印

STM32 学习笔记之独立看门狗

[复制链接]
1128|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huangfeng33|  楼主 | 2014-8-10 18:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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
}

评分
参与人数 1威望 +1 收起 理由
FAQ + 1 赞一个!
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

506

主题

2446

帖子

8

粉丝