Chinaunix首页 | 论坛 | 博客
  • 博客访问: 13696
  • 博文数量: 10
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2015-01-10 20:52
文章分类

全部博文(10)

文章存档

2015年(10)

我的朋友

分类: C/C++

2015-03-10 16:47:33


IWDG独立看门狗实验,本实验通过设置窗口看门狗IWDG间断时间来定期的检查是否出错,在SysTick_Handler中断函数中加入了流水灯用来测试是否运行了IDWG看门狗程序,用PD6-LED2通过闪烁验证程序可行性,编程工程大致和USART实验过程差不多,先是开启系统时钟,然后GPIO端口时钟,然后复用功能时钟AFIO,然后各个模块用的的时钟,,呵呵,之后进入各个模块初始化,设置,编写子程序,中断的话,要在中断函数中填写某模块的中断触发处理函数,重要的是在CONFG.H函数中开启模块的声明,差不多是这样的了。

以下为IWDG函数主要部分:

//IWDG窗口看门狗设置初始化
void IWDG_Config(void)

  //独立看门狗初始化
   IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//启动寄存器读写

   IWDG_SetPrescaler(IWDG_Prescaler_32);//40K时钟32分频

   IWDG_SetReload(349);                 //计数器数值

   IWDG_ReloadCounter();             //重启计数器

   IWDG_Enable();                       //启动看门狗
}
***********************************************************

注意事项:

i. 有狗平常没事情可以不理,但是千万别忘了喂它,否则死都不知道怎么死的!

ii. 初始化程序的调用一定要在systic的初始化之后。

iii. 独立看门狗需要systic中断来喂,但是systic做别的用处不能只做这件事,所以我写了如下几句代码,可以不影响systic的其他应用,其他systic周期代码也可参考:

第一步:在stm32f10x_it.c中定义变量

int Tic_IWDG;           //喂狗循环程序的频率判断变量

第二步:将SysTickHandler中喂狗代码改为下面:

Tic_IWDG++;          //变量递增

if(Tic_IWDG>=100)    //每100个systic周期喂狗

{   IWDG_ReloadCounter();//重启计数器(喂狗)

   Tic_IWDG=0;       //变量清零

}

完整代码为

void SysTick_Handler(void)
{
  Tic_Val++;           //精确延时变量递增

  Tic_IWDG++;          //独立看门狗变量递增

  if(Tic_IWDG>=100)    //每100个systic周期喂狗

  {  
    IWDG_ReloadCounter();//重启计数器(喂狗)
    Tic_IWDG=0;       //变量清零

 switch(IWDGFLAG)
 {
 case 0:
  GPIO_SetBits(GPIOD, GPIO_Pin_6);
     break;
 case 1:
  GPIO_ResetBits(GPIOD, GPIO_Pin_6);
     break;
 default:
     break;
 }
 IWDGFLAG=!IWDGFLAG;

  }
}

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