加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

STM8S-独立看门狗的应用

(2010-11-25 09:46:07)
标签:

独立看门狗

stm8s

it

分类: STM8S

    在编写程序时有时会出现死机或程序跑飞的情况,这时对系统有一定的影响,怎样让程序可以自行重启呢,STM8S中的看门狗就是实现这一功能的,用看门狗检测程序的执行,在看门狗的复位时间内进行喂狗,如果程序在某个地方出现问题,那么就不能及时的进行喂狗,这时系统就会重新启动,达到检测的目的。通过观察小灯的闪烁快慢可以看出系统是否复位。

程序如下:

//软件环境:IAR FOR STM8 V1.0
//作者:Nicole

//功能:STM8的独立看门狗应用

//日期:2010.11.04

#include <iostm8s105c6.h>
#include <stdio.h>
unsigned int i;
//时钟配置
void CLK_Configuration(void)
{
  //CLK_ICKR   = 0x08; //打开低速时钟
  CLK_CKDIVR = 0x00;  
}

//延时函数
void Delay(unsigned int i)
{
  unsigned int j;
  while(i--)
  {
    for(j=1000;j>0;j--);
  }

}
//IO口配置,控制小灯
void GPIO_Init(void)
{
 unsigned int i;
 PD_DDR|=0x01;   //PD0输出,其余保持原功能
 PD_CR1|=0x01;   //对应位设置为推挽输出
 PD_CR2|=0x00;  //输出最大频率为2MHz

 //小灯闪烁的速度快(为了看的清晰循环4次)
  for(i=0;i<4;i++)  
     {
       PD_ODR=0xff;
       Delay(200);     
       PD_ODR=0xfe;
       Delay(200);     
     }
}


//看门狗配置

void IWDG_Init(void)
{
  IWDG_KR = 0xCC; //启动IWDG
  IWDG_KR = 0x55; //解除 PR 及 RLR 的写保护
  IWDG_RLR = 0xff; //看门狗计数器重装载数值       
  IWDG_PR = 0x06; //分频系数为256,最长超时时间为:1.02S
  IWDG_KR = 0xAA; //刷新IDDG,避免产生看门狗复位,同时恢复 PR 及 RLR 的写保护状态
void main(void)
{
   CLK_Configuration(); // 开启外部时钟
   GPIO_Init();         // 初始化端口
   IWDG_Init();         // 初始化外部看门狗
    while(1)  
   {
       PD_ODR = 0xff;   //PD0为输出1,LED灭 
       Delay(1000);     //延时长小灯闪烁慢些

       PD_ODR = 0xfe;   //PD0为输出0,LED亮  
       Delay(1000); 
      

 //程序中没有及时喂狗,所以观察到小灯先闪烁快些,然后闪烁慢些,达到看门狗的复位时间系统重启,循环上述过程
}

0

阅读 收藏 喜欢 打印举报/Report
前一篇:AT命令
后一篇:STM8S的ADC应用
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有