一、独立看门狗概述:
独立看门狗其实就是一个独立于主时钟的定时复位狗。一旦开启独立看门狗,它就会根据自己设定的时间不断倒数,倒数到0后就开始复位。
二、关于喂狗:
喂狗就是让狗去吃东西,分心后,这只狗就得重新倒数。
三、stm32看门狗示例程序:
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
void IWDG_Init(u8 prer,u16 rlr)
{
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //使能对寄存器IWDG_PR和IWDG_RLR的写操作
IWDG_SetPrescaler(prer); //设置IWDG预分频值:设置IWDG预分频值为64
IWDG_SetReload(rlr); //设置IWDG重装载值
IWDG_ReloadCounter(); //按照IWDG重装载寄存器的值重装载IWDG计数器
IWDG_Enable(); //使能IWDG
}
int main(void)
{
//延时函数初始化
delay_init()
//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
//初始化与LED连接的硬件接口
LED_Init();
//按键初始化
KEY_Init();
delay_ms(500);
//与分频数为64,重载值为625,溢出时间为1s
IWDG_Init(4,625);
//点亮LED0
LED0=0;
while(1)
{
if(KEY_Scan(0)==WKUP_PRES)
{
IWDG_ReloadCounter(); //如果WK_UP按下,则喂狗
}
}
}
从主程序main的第一行开始运行到下面的代码时,开启看门狗
//与分频数为64,重载值为625,溢出时间为1s
IWDG_Init(4,625);
此时,键值寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值 0xFFF 递减计数。当计数器计数到末尾 0x000 时,会产生一个复位信号(IWDG_RESET)。
所以我们会看到等一亮一灭。
此时,如果检测到按键按下,那么就会运行喂狗程序:
if(KEY_Scan(0)==WKUP_PRES)
{
IWDG_ReloadCounter(); //如果WK_UP按下,则喂狗
}
喂狗后, 键寄存器 IWDG_KR 中被写入 0xAAAA, IWDG_RLR 中的值就会被重新加载到计数器,也就是对应到初始化设置的计数值,我们设置的1S,那么计数器就将重1s处开始递减,如果我们持续按按键,那么计数器就会持续保持在那个值,不会倒数到0,也就不会产生复位,那么灯就会始终保持亮的状态。
从而验证了看门狗和喂狗的功能。
上一篇:实现蓝牙与手机的双向通信 学习笔记
下一篇:STM32 DMA 学习笔记(一)
推荐阅读最新更新时间:2024-11-14 10:39
设计资源 培训 开发板 精华推荐
- 【物联网】智能WIFI开关+4239541A
- 基于stc15的数字时钟
- 基于涂鸦ZTU zigbee模组设计的无线调光旋钮
- TS-GEVB:触摸开关扩展板评估板
- DER-538 - 使用 InnoSwitch3-CE 的 25 W 高功率充电器
- TG-5021CG_CC1125,用于无线应用的 CC1125 低功耗射频收发器的外部振荡电路
- AM1G-0512DZ ±12V 1 瓦 DC/DC 转换器的典型应用
- 数字小键盘 可5元打样 不带HUB
- DC2329A,基于 LTC7124 17 VIN、具有超低静态电流的双通道 3.5A 同步降压稳压器的演示板
- LT1124 的典型应用 - 双路低噪声、高速精密运算放大器