stm32f103c8t6外设——WWDG窗口看门狗

本文详细介绍了STM32中窗口看门狗(WWDG)的工作原理,包括其特性(如递减计数器、窗口期和中断)、配置步骤、超时时间计算以及与IWDG的对比。还提供了相关C语言代码示例,展示了如何初始化和使用WWDG实现定时和中断功能。
摘要由CSDN通过智能技术生成

一、WWDG特性

  1. 递减的计数器。
  2. 复位条件(满足任一条件即复位):(1)计数器减至0x3F即产生复位;(2)大于W值(用户自行设定,必须大于0x3F,否则无窗口期)喂狗可复位。
  3. 提前唤醒中断(需要使能):减至0x40产生中断。

注意:需要在窗口期内进行“喂狗”操作,才不会复位。W[6:0]≥窗口期>0x3F

二、WWDG配置步骤及相关代码

1、wdg.c

#include "./BSP/WDG/wdg.h"
#include "./BSP/LED/led.h"
#include "./SYSTEM/delay/delay.h"

WWDG_HandleTypeDef g_wwdg_handle;

/* 窗口看门狗初始化函数 */
void wwdg_init(uint8_t tr, uint8_t wr, uint32_t fprer)
{
    g_wwdg_handle.Instance = WWDG;
    g_wwdg_handle.Init.Counter = tr;
    g_wwdg_handle.Init.Window = wr;
    g_wwdg_handle.Init.Prescaler = fprer;
    g_wwdg_handle.Init.EWIMode = WWDG_EWI_ENABLE;           /* 计数器达到0x40即产生中断 */
    HAL_WWDG_Init(&g_wwdg_handle);

    
}

/* WWDG MSP回调函数 */
void HAL_WWDG_MspInit(WWDG_HandleTypeDef *hwwdg)
{
    __HAL_RCC_WWDG_CLK_ENABLE();
    
    HAL_NVIC_SetPriority(WWDG_IRQn, 2, 3);
    HAL_NVIC_EnableIRQ(WWDG_IRQn);
}

/* WWDG中断服务函数 */
void WWDG_IRQHandler(void)
{
    HAL_WWDG_IRQHandler(&g_wwdg_handle);            /* 调用回调函数 */
}

/* WWDG提前唤醒回调函数 */
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
{
    //delay_ms(1);
    HAL_WWDG_Refresh(&g_wwdg_handle);                   /* 喂狗 */
    LED1_TOGGLE();
}

2、main.c

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/WDG/wdg.h"

int main(void)
{
    HAL_Init();                                             /* 初始化HAL库 */
    sys_stm32_clock_init(RCC_PLL_MUL9);                     /* 设置时钟, 72Mhz */
    delay_init(72);                                         /* 延时初始化 */
    usart_init(115200);                                     /* 初始化串口 */
    led_init();
    
    if(__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST) != RESET)       /* RCC_FLAG_WWDGRST=1时,表明窗口看门狗复位 */
    {
        printf("窗口看门狗复位!\r\n");
        __HAL_RCC_CLEAR_RESET_FLAGS();                      /* 清零标志位 */
    }
    else
    {
        printf("外部复位!\r\n");
    }
    delay_ms(500);
    printf("请在窗口期内喂狗!\r\n");
    wwdg_init(0x7f, 0x5f, WWDG_PRESCALER_8);                /* WWDG初始化,超时时间约等于29ms */
    
    
    while(1)
    { 
       delay_ms(85);                                       /* 在非窗口期内喂狗才会复位 */
       HAL_WWDG_Refresh(&g_wwdg_handle);                   /* 喂狗 */
       LED0_TOGGLE();

    }
}

 if判断APB1 外设复位寄存器 (RCC_APB1RSTR)中的WWDGRST位来判断是否为窗口看门狗复位。

三、WWDG超时时间计算

 四、WWDG与IWDG的对比

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成为不掉头发的工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值