Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5787348
  • 博文数量: 409
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 8273
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-23 19:15
个人简介

qq:78080458 学习交流群:150633458

文章分类

全部博文(409)

文章存档

2019年(127)

2018年(130)

2016年(20)

2015年(60)

2014年(41)

2013年(31)

分类: 嵌入式

2016-07-08 22:36:44

●看门狗的意义

1、  c语言的执行过程

 在单片机中,c程序从地址0开始按照规律一直向下执行,其中PC指针指示当前代码执行的地址。以STM32F407来说,代码在向下执行的过程中,PC指针一直顺着内存地址移动。在执行到main函数的最后一句时,如果没有特殊情况,PC指针还是会持续移动,直到4GB-1Z地址处,最终PC指针又回到0地址循环移动。因此你会看到很多代码的main函数最后一句时一个while死循环!!!PC指针最终停留在你的死循环位置,这样代码就不会从头开始循环执行,也就不会产生复位!


2、  看门狗

 狗这种东西就是在有特殊情况的时候狂叫不止,产生报警行为。在单片机中看门狗的功能类似,不过这种狗只会在它饿的时候产生报警(这里的报警一般是复位)。看门狗实质是一个倒数的计数器,如果它数到0,那么就会产生复位!我们在初始化看门狗的时候可以给它一个初始的计数值,使能看门狗之后它就开始倒数,至于什么时候会数到零和你的初始化有关系。例如我们配置一个看门狗3s之后会数到零,那么为了不让它复位,你必须在比3s短的时间内喂狗(重新给它一个计数值就可以了,它会按你给的计数值重新倒数)。

 到此可以知道看门狗的工作原理就是:初始化一个技术值,在它归零之前进行喂狗。既然看门狗一直在工作,那么你就必须一直喂它(就是家里的狗,一日三餐,少一顿它就开始卖萌了^_^)。

 假设我们配置看门狗3s就会计数到零,我们做一个死循环每隔2s喂一次,那这条狗就不会饿了。但是单片机在执行的时候可能会程序跑飞,也就是说代码不按照你写的规矩走,那么你的喂狗程序也就不能执行了,这时3s一过狗就饿了,也就会产生复位操作。由此可以知道看门狗的功能了,只要你配置正确,按时喂狗,那么它只有在程序跑飞的时候才会产生复位。一般大型的项目都会用到看门狗,一旦机器本身出了问题,那么就可以立马复位,而不会造成死机。

 


●从手册到流程

1、  STM32看门狗

1)  功能描述



2)  寄存器





2、  初始化流程

1)  RCC打开定时器时钟

2)  向关键字寄存器写入0X5555,解除保护

3)  设置预分频值

4)  设置重载计数值

5)  向关键字寄存器写入0xcccc,开启看门狗



●从流程到代码

1)初始化


2)喂狗




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