独立看门狗
来源:互联网 发布:卖血哥玩的软件是什么 编辑:程序博客网 时间:2024/05/01 03:57
经常听到同事说起看门狗,当时心里就想,我见过狮子狗,哈巴狗,就从没见过看门狗,难道这世上居然还有这样一种狗,听得我一头雾水,还以为他们在聊宠物呢。现在终于知道这是只什么狗了,哈哈,和我想像中的差别有点大。
STM32 独立看门狗简介
STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟是一个内部 RC 时钟,所以并不是准确的 40Khz,而是在 30~60Khz 之间的一个可变化的时钟,只是我们在估算的时候,以 40Khz 的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。
原理
这个百度百科里面有很详细的解释。 我们总结一下:
单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环, 看门狗电路就是为了避免这种情况的发生。 看门狗的作用就是在一定时间内(通过定时计数器实现) 没有接收喂狗信号(表示 MCU 已经挂了),便实现处理器的自动复位重启(发送复位信号)。
实验内容
在看门狗开启后马山点亮 LED0( DS0),并进入死循环等待按键的输入,一旦 WK_UP 有按键,则喂狗,否则等待 IWDG 复位的到来。
实验步骤:
1、取消寄存器写保护:
IWDG_WriteAccessCmd();
2、设置独立看门狗的预分频系数,确定时钟:
IWDG_SetPrescaler();
3、 设置看门狗重装载值,确定溢出时间:
IWDG_SetReload();
4、使能看门狗
IWDG_Enable();
5、应用程序喂狗:
IWDG_ReloadCounter();
溢出时间计算:
Tout=((4×2^prer) ×rlr) /40 (M3)
代码:
main.c
#include "led.h"#include "key.h"#include "beep.h"#include "delay.h"#include "iwdg.h"int main(){ u8 key; delay_init(); LED_Init(); KEY_Init(); BEEP_Init(); delay_ms(200); LED0 = 0; IWDG_Init(4,625); // 最大喂狗时间; while(1) { key = KEY_Scan(0); if (key == WKUP_PRES) { IWDG_ReloadCounter(); } }}
iwdg.h
#ifndef __WGD_H#define __WGD_H#include "sys.h"void IWDG_Init(u8 prer,u16 rlr);#endif
iwdg.c
#include "iwdg.h"void IWDG_Init(u8 prer,u16 rlr){ IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //使能对寄存器写操作 IWDG_SetPrescaler(prer); //设置 IWDG 预分频值 IWDG_SetReload(rlr); //设置 IWDG 重装载值 IWDG_ReloadCounter(); //重装载 IWDG 计数器 IWDG_Enable(); //使能 IWDG}
- 独立看门狗
- 独立看门狗
- 独立看门狗
- 独立看门狗
- 独立看门狗
- 独立看门狗
- STM32的独立看门狗
- stm32 独立看门狗学习
- STM32独立看门狗
- stm32_独立看门狗
- 【记录】独立看门狗
- STM32F1学习-独立看门狗
- STM32 独立看门狗简介
- STM32独立看门狗
- 独立看门狗实验
- 独立看门狗实验
- 【stm32f407】独立看门狗 iwdog
- STM32F4独立看门狗IWDG
- oracle高级 列表分区 复合分区
- UVa1585 Score
- Zend Stuiod 快捷键
- BSOJ4854 -- 【NOIP2016模拟1】noip2016十连测round1 Divisors
- Python装饰器学习<转载>
- 独立看门狗
- UOJ 110 [APIO2015]Bali Sculptures
- VM安装的三种网络模式
- Ubuntu14.04安装NVIDIA驱动后之后无法进入图形界面
- 进程通信-----消息队列
- C++实现文件夹复制
- [剑指offer学习心得]之:在O(1)时间删除链表结点
- 【安卓-自定义布局】安卓App开发思路 一步一个脚印(十二)实现自定义左右滚动的信息块-仿蘑菇街
- 国内一线互联网公司面试题