STM32F4 | 独立看门狗(IWDG)实验

本文介绍了STM32F4独立看门狗IWDG的工作原理,包括寄存器配置、预分频器和重装载值设置。通过STM32CubeMX配置IWDG,并提供了喂狗函数和初始化函数的代码示例。实验中,通过LED灯的状态变化验证了IWDG的功能,实现了按键喂狗避免程序复位。
摘要由CSDN通过智能技术生成


  这一章介绍如何使用 STM32F429 的独立看门狗(以下简称 IWDG)。

一、STM32F4 独立看门狗简介

  STM32F4 的独立看门狗由内部专门的 32Khz 低速时钟(LSI)驱动,即使主时钟发生故障,
它也仍然有效。这里需要注意独立看门狗的时钟是一个内部 RC时钟,所以并不是准确的 32Khz,而是在 15~47Khz 之间的一个可变化的时钟,只是我们在估算的时候,以 32Khz 的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。
  下面介绍独立看门狗的几个寄存器

  • 关键字寄存器IWDG_KR
      寄存器的各位描述如下:
    在这里插入图片描述
    在关键字寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值 0xFFF 递减计数。当计数器计数到末尾 0x000 时,会产生一个复位信号(IWDG_RESET)。无论何时,只要关键字寄存器IWDG_KR 中被写入 0xAAAAIWDG_RLR 中的值就会被重新加载到计数器中从而避免产生看门狗复位 。
      IWDG_PRIWDG_RLR 寄存器具有写保护功能。要修改这两个寄存器的值,必须先向IWDG_KR 寄存器中写入 0x5555。将其他值写入这个寄存器将会打乱操作顺序,寄存器将重新被保护。重装载操作(即写入 0xAAAA)也会启动写保护功能。

  • 预分频寄存器IWDG_PR
      该寄存器用来设置看门狗时钟的分频系数,最低为 4,最高位 256,该寄存器是一个 32 位的寄存器,但是我们只用了最低 3 位,其他都是保留位。预分频寄存器各位定义如图所示:
    在这里插入图片描述

  • 重装载寄存器 IWDG_RLR
      该寄存器用来保存重装载到计数器中的值。该寄存器也是一个 32 位寄存器,但是只有低 12 位是有效的,该寄存器的各位描述如图所示:
    在这里插入图片描述

  只要对以上三个寄存器进行相应的设置,我们就可以启动 STM32F4 的独立看门狗。独立看门狗相关的HAL库操作函数在文件 stm32f4xx_hal_iwdg.c 和头文件 stm32f4xx_hal_iwdg.h中。接下来我们讲解一下通过 HAL 库配置独立看门狗的步骤:

  1. 取消寄存器写保护,设置看门狗预分频系数和重装载值
      首先我们必须取消 IWDG_PRIWDG_RLR 寄存器的写保护,这样才可以设置寄存器IWDG_PRIWDG_RLR 的值。取消写保护和设置预分频系数以及重装载值在 HAL 库中是通过函数 HAL_IWDG_Init 实现的。该函数声明为:

    HAL_StatusTypeDef HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg);
    

      该函数只有一个入口参数 hiwdg,该参数是 IWDG_HandleTypeDef 结构体指针类型。接下来我们看看结构体 IWDG_HandleTypeDef 定义:

    typedef struct
    {
         
    	IWDG_TypeDef *Instance;
    	IWDG_InitTypeDef Init; 
    	HAL_LockTypeDef Lock;
    	__IO HAL_IWDG_StateTypeDef State; 
    }IWDG_HandleTypeDef;
    
    • 成员变量 Instance 用来设置看门狗寄存器基地址,实际上在 HAL 库中已经通过标识符定义了,这里对于独立看门狗直接设置为标识符 IWDG 即可。
    • 成员变量 Init 是一个 IWDG_InitTypeDef 结构体类型,该结构体只有 2 个成员变量,分别用来设置独立看门狗的预分频系数和重装载值,定义如下:
      typedef struct
      {
             
      	 uint32_t Prescaler;
      	 uint32_t Reload; 
      }IWDG_InitTypeDef;
      
    • 成员变量 Lock 是一个锁存变量,该变量在 HAL 库中当操作配置 IWDG 之前设置为锁住LOCK,当配置操作完成之后设置为 UNLOCK,实际上是一个操作状态标识符
    • 成员变量 State 也是 HAL 定义的一个过程标识符,用来记录 IWDG 处理状态

    HAL_IWDG_Init 函数使用的一般方法为:

    IWDG_HandleTypeDef IWDG_Handler; //独立看门狗句柄
    IWDG_Handler.Instance=IWDG; //独立看门狗
    IWDG_Handler.Init.Prescaler=IWDG_PRESCALER_64; //设置 IWDG 分频系数
    IWDG_Handler.Init.Reload=500; //重装载值
    HAL_IWDG_Init(&IWDG_Handler);
    
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值