当前位置:小冬's Blog > 电子编程 > 正文

作者:阿冬

手机扫码查看

标签:

STM8S独立看门狗

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
//软件环境:IAR FOR STM8V1.0
//作者:Nicole
//功能:STM8的独立看门狗应用
//日期:2010.11.04

#include
#include
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);
}
//程序中没有及时喂狗,所以观察到小灯先闪烁快些,然后闪烁慢些,达到看门狗的复位时间系统重启,循环上述过程
}
未经允许不得转载:

作者:阿冬, 转载或复制请以 超链接形式 并注明出处 小冬's Blog
原文地址:《STM8S独立看门狗》 发布于2012-12-08

分享到:
赞(0) 打赏

评论 抢沙发

5 + 4 =


STM8S独立看门狗

长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题

专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

了解一下

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录