MCU学习笔记_WWDG窗口看门狗

MCU学习笔记

WWDG窗口看门狗

1. WWDG窗口看门狗概述
2. 寄存器和HAL库函数配置
3. 实例

1. IWDG独立看门狗概述

  • 用于检测由外部干扰或不可预见的逻辑条件件造成的应用程序背离正常的运行序列而产生的软件故障。

  • 喂狗时间有上下限的范围。下限固定,通过设定相关的寄存器,设定上限时间。喂狗的时间不能过早也不能过晚。
    在这里插入图片描述

  • 时钟来源于APB1总线时钟,经过预分频器产生时钟给递减计数器。在这里插入图片描述

  • 看门狗复位:

    1. 喂狗的时候,计数器的值 > 设定值W[6:0]
    2. 计数器的数值从0x40减到0x3F(下限)(T6位跳变为0)
      若启动了看门狗并且允许中断,当递减计数器 = 0x40,产生早起唤醒中断(EWI),它可以用于启动喂狗,以避免WWDG复位。
  • 窗口看门狗超时时间
    Twwdg=(40962^WDGTB(T[5:0]+1))/Fpclk1;
    Fpclk1: APB1的时钟频率(KHz)
    WDGTB:WWDG的预分频系数
    T[5:0]:窗口看门狗的计数器低6位

  • 注意

    1. 上限窗口值W[6:0]必须大于下限窗口值0x40。
    2. 窗口看门狗时钟来源PCLK1(APB1总线时钟)分频后。

2. 寄存器和HAL库函数配置

  • 寄存器

    1. 控制寄存器WWDG_CR在这里插入图片描述
    2. 配置寄存器 WWDG_CFR
      在这里插入图片描述
    3. 状态寄存器WWDG_SR在这里插入图片描述
  • 一般配置步骤

    1. 使能窗口看门狗时钟HAL_WWDG_Msplnit
    2. 初始化窗口看门狗:设置分频系数,窗口值,技术值等HAL_WWDG_Init,此函数还能使能窗口看门狗提前唤醒中断
    3. 设置提前唤醒中断优先级HAL_WWDG_MspInit
    4. 编写提前唤醒中断处理函数,喂狗;HAL_WWDG_EarlyWakeuoCallback(); HAL_WWDG_Refresh();
  • WWDG操作HAL库函数

HAL_StatusTypeDef HAL_WWDG_Init(WWDG_HandleTypeDef *hwwdg);//初始化函数,分频系数等
void HAL_WWDG_MspInit(WWDG_HandleTypeDef*hwwdg);//初始化回调函数
HAL_StatusTypeDef HAL_WWDG_Start(WWDG_HandleTypeDef*hwwdg);//启动看门狗
HAL_StatusTypeDef HAL_WWDG_Start_IT(WWDG_HandleTypeDef*hwwdg);//开启提前唤醒中断
HAL_StatusTypeDef HAL_WWDG_Refresh(WWDG_HandleTypeDef*hwwdg);//喂狗,配置CR寄存器
void HAL_WWDG_IRQHandler(WWDG_HandleTypeDef*hwwdg);//初始化回调函数,中断处理
void HAL_WWDG_EarlyWakeuoCallback(WWDG_HandleTypeDef*hwwdg);//初始化提前唤醒回调函数

3. 实例

#include "sys.h"
#include "lcd.h"
#include "delay.h"
#include "key.h"
#include "uart.h"
#include "wkup.h"



/***************************************
使能窗口看门狗时钟
***************************************/
void HAL_WWDG_MspInit(WWDG_HandleTypeDef*hwwdg)
{
	__HAL_RCC_WWDG_CLK_ENABLE();
	//设置中断优先级
	HAL_NVIC_EnableIRQ(WWDG_IRQn);
	HAL_NVIC_SetPriority(WWDG_IRQn,3,3);
}

WWDG_HandleTypeDef wwdg_handler;
/***************************************
中断服务函数
***************************************/
void HAL_WWDG_IRQHandler(void)
{
	HAL_WWDG_IRQHandler(wwdg_handler);
}
/***************************************
唤醒回调函数,喂狗
***************************************/
void HAL_WWDG_EarlyWakeuoCallback(WWDG_HandleTypeDef*hwwdg)
{
	HAL_StatusTypeDef HAL_WWDG_Refresh(&wwdg_handler, 0x7f);
	LED1=!LED1;
}

/***************************************
主函数
***************************************/
int main(void)
{
	HAL_Init();//初始化HAL库
	Stm32_CLock_Init(360,25,2,8);//设置时钟180MHz
	delay_init(180);//初始化延时函数
	uart_init(115200);//初始化USART
	LED_Init();//初始化LED
	KEY_Init();//初始化KEY
	LED0=0;//点亮LED0
	delay_ms(300);//初始化延时函数
/***************************************
1. 初始化看门狗
***************************************/
	wwdg_handler.Instance=WWDG;
	wwdg_handler.Init.Prescaler=WWDG_PRESCALER_8;
	wwdg_handler.Init.Window=0x5f;
	wwdg_handler.Init.Counter=0x7f;
	HAL_WWDG_Init(&wwdg_handler);

/***************************************
2. 使能窗口看门狗并且开启中断
***************************************/
	//HAL_IWDG_Start(&iwdg_handler);
	HAL_WWDG_Start_IT(&wwdg_handler);

	LED0=0;
	while(1)
	{
		LED0=1;
	}
}

参考资料:正点原子视频 Thanks^^

【注】:个人学习笔记,如有错误,望不吝赐教,这厢有礼了~~~


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值