Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4463257
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: 嵌入式

2011-06-23 16:39:30

参考书籍: 《stm32参考手册》

    独立看门狗IWDG Independece WAtchGog 有专用的低速时钟LSI驱动(内部RC振荡器产生,40KHZ频率)驱动,即使主时钟发生故障它也仍然有效。窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。
    独立看门狗IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。
   
IWDG主要性能:
    1. 自由运行的递减计数器
    2. 时钟由独立的RC振荡器提供 (可在停止和待机模式下工作)
    3. 看门狗被激活后,则在计数器计数至0x000时产生复位

功能描述:
    
    在 键寄存器IWDG_KR中写入0xCCCC,开始启动独立看门狗;此时计数器开始从其复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号IWDG_RESET。无论何时,只要在 键寄存器IWDG_KR中写入0xAAAA,IWDG_RLR中的值就会被重新加载到计数器中,从而避免产生看门狗复位。

整个工程代码: 看门狗程序.rar   

  1. 功能描述:main()函数中,喂狗程序屏蔽,指示灯闪烁,表明系统出现发生
  2.           喂狗程序不屏蔽,指示灯亮1秒左右再灭并维持灭的状态。
  3.          我们可以尝试改变IWDG_Configuration()中4095这个数值,看灯灭的
  4.          时间有没有改变。这个时间是看门狗定时器溢出时间。
  5.         
  6. add me :
  7.           独立看门狗使用 40khz 的时钟,预分频16 = 2500hz ,也就是说
  8.          1s钟时间,产生了2500 个脉冲。
  9.          如果我们在 reload重载寄存器(12bit最大4096)中写入2500,那么
  10.          1s时间到后,会看门狗复位
  11.          如果写入4095,那么复位时间是 x = 4095 / 2500 = 1.638秒
  12.         
  13.           1秒时间 ~   2500
  14.             x    ~   4095
  15. ********************************************************************/

void IWDG_Configuration(void)
{
    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);     //允许设置
    IWDG_SetPrescaler(IWDG_Prescaler_16);//内部低速时钟16分频
                                       //40khz / 16 = 2500 1s时间2500个脉冲数          
    IWDG_SetReload(4095); //1s复位 //写入值
    IWDG_ReloadCounter(); //0xaaaa  计数器中写入新值
    IWDG_Enable();     //使能 0xcccc
}

/**********************************************************************
* 名    称:main()
* 功    能:主函数
* 入口参数:
* 出口参数:
-----------------------------------------------------------------------
* 说明:
***********************************************************************/
int main (void)
{

    RCC_Configuration();  //配置时钟                     
    GPIO_Configuration(); //配置IO口
    IWDG_Configuration(); //配置看门狗     IWDG_ReloadCounter();
    Delay(500);           //系统初始化后灯亮并延时一段时间
    while(1)
    {
   
        GPIO_WriteBit(GPIOA, GPIO_Pin_8,(BitAction)1); //写1 ,led灭
//        IWDG_ReloadCounter();       //喂狗程序
    }
}





阅读(849) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~