stm32——hal库学习笔记(IWDG)

一、IWDG简介(了解)

在这里插入图片描述
IWDG有什么作用?
在这里插入图片描述

二、IWDG工作原理(熟悉)在这里插入图片描述

三、IWDG框图(熟悉)

在这里插入图片描述

四、IWDG寄存器(熟悉)

键寄存器(IWDG_KR)
在这里插入图片描述
预分频器寄存器 (IWDG_PR)
在这里插入图片描述
重装载寄存器(IWDG_RLR)
在这里插入图片描述
状态寄存器(IWDG_SR)
在这里插入图片描述
寄存器配置操作步骤(了解)
在这里插入图片描述

五、IWDG溢出时间计算(掌握)

在这里插入图片描述
IWDG最短最长超时时间(F1)
在这里插入图片描述

六、IWDG配置步骤(掌握)

在这里插入图片描述

HAL_IWDG_Init()

在这里插入图片描述

HAL_IWDG_Refresh()

HAL库相关函数介绍
在这里插入图片描述

七、编程实战:验证不及时喂狗,系统将复位重启(掌握)

在这里插入图片描述
wdg.c

#include "./BSP/WDG/wdg.h"


IWDG_HandleTypeDef g_iwdg_handle;   /* 独立看门狗句柄 */

/**
 * @brief       初始化独立看门狗 
 * @param       prer: IWDG_PRESCALER_4~IWDG_PRESCALER_256,对应4~256分频
 *   @arg       分频因子 = 4 * 2^prer. 但最大值只能是256!
 * @param       rlr: 自动重装载值,0~0XFFF. 
 * @note        时间计算(大概):Tout=((4 * 2^prer) * rlr) / 40 (ms). 
 * @retval      无
 */
void iwdg_init(uint8_t prer, uint16_t rlr)
{
   
    g_iwdg_handle.Instance = IWDG;
    g_iwdg_handle.Init.Prescaler = prer; /* 设置IWDG分频系数 */
    g_iwdg_handle.Init.Reload = rlr;     /* 重装载值 */
    HAL_IWDG_Init(&g_iwdg_handle);       /* 初始化IWDG并启动 */
}

/**
 * @brief       喂独立看门狗
 * @param       无
 * @retval      无
 */
void iwdg_feed(void)
{
   
    HAL_IWDG_Refresh(&g_iwdg_handle); /* 重装载计数器 */
}

wdg.h

#ifndef __WDG_H
#define __WDG_H

#include "./SYSTEM/sys/sys.h"


void iwdg_init(uint8_t prer, uint16_t rlr);
void iwdg_feed(void);

#endif

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"
#include "./BSP/KEY/key.h"


int main(void)
{
   
    HAL_Init();                             /* 初始化HAL库 */
    sys_stm32_clock_init(RCC_PLL_MUL9);     /* 设置时钟, 72Mhz */
    delay_init(72);                         /* 延时初始化 */
	
    usart_init(115200);                     /* 串口初始化为115200 */
    led_init();                             /* 初始化LED */
    key_init();                             /* 初始化按键 */
    delay_ms(100);                          /* 延时100ms再初始化看门狗,LED0的变化"可见" */
    iwdg_init(IWDG_PRESCALER_64, 625);      /* 预分频数为64,重载值为625,溢出时间约为1s */
    LED0(0);                                /* 点亮LED0(红灯) */

    while (1)
    {
   
        if (key_scan(1) == WKUP_PRES)       /* 如果WK_UP按下,则喂狗 */
        {
   
            iwdg_feed();                    /* 喂狗 */
        }

        delay_ms(10);
    }
}

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-02-23 01:16:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-23 01:16:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-23 01:16:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-23 01:16:01       20 阅读

热门阅读

  1. Python学习笔记——类(基础知识)

    2024-02-23 01:16:01       21 阅读
  2. 随机森林模型、模型模拟技术和决策树模型简介

    2024-02-23 01:16:01       34 阅读
  3. 为什么是MC(Memcached)而不是Redis?

    2024-02-23 01:16:01       26 阅读
  4. LeetCode494. Target Sum——01背包

    2024-02-23 01:16:01       27 阅读
  5. Cookie和Session的区别

    2024-02-23 01:16:01       26 阅读
  6. SouthLeetCode-打卡24年02月第3周

    2024-02-23 01:16:01       34 阅读
  7. 【Docker】docker常用命令简介

    2024-02-23 01:16:01       28 阅读
  8. 如何在Python中执行Shell脚本?

    2024-02-23 01:16:01       33 阅读
  9. 深度学习算法工程师面试常见问题及解答

    2024-02-23 01:16:01       30 阅读
  10. P5729 【深基5.例7】工艺品制作

    2024-02-23 01:16:01       31 阅读
  11. 前端项目docker部署

    2024-02-23 01:16:01       31 阅读