物联网ARM开发-8STM32独立看门狗

本文详细介绍了STM32的独立看门狗IWDG的工作原理、配置方法及程序设计。通过开启IWDG,设置喂狗机制,实现系统在程序异常时自动复位,确保设备稳定运行。文中还提供了CubMX配置步骤和编程思路,以及实际项目中的应用展示。
摘要由CSDN通过智能技术生成

前言:独立看门狗是用于判断程序是否跑飞的功能,我们可能会遇到程序陷入死循环的情况,在这种情况下监测到异常并复位能很好预防死机的情况。

目录

一、看门狗简介

1、看门狗概述:

2、看门狗简介:

二、独立看门狗剖析

1、独立看门狗IWDG工作原理框图

2、功能说明:

3、寄存器配置:

三、程序设计

1、程序思路

2、cubmx配置

3、编程思路

4、项目展示


一、看门狗简介

1、看门狗概述:

看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数器,一般给看门狗一个数字,程序开始运行后看门狗开始倒计数。如果程序运行正常,过一段时间CPU应发出指令让看门狗复位,重新开始倒计数。如果看门狗减到0就认为程序没有正常工作,强制整个系统复位。

2、看门狗简介:

STM32 结合安全度、计时精确度和易用性提供了IWDG和WWDG两种看门狗       

  • 监测软件跑飞,或未按预想地运行的情况      
  • 触发系统复位或产生中断(中断仅针对窗口看门狗)

(1)独立看门狗IWDG      

  • 专用时钟LSI      
  • 低功耗模式仍可运行      
  • 对定时的控制比较松

(2)窗口看门狗WWDG     

  • 总线时钟APB1     
  • 对定时控制比较严     
  • 要求主应用程序在规定时间窗口内喂狗

二、独立看门狗剖析

1、独立看门狗IWDG工作原理框图

状态寄存器是SR

 

2、功能说明:

当通过对关键字寄存器 (IWDG_KR) 写入值 0xCCCC 启动独立看门狗时,计数器开始从复位
0xFFF 递减计数。当计数器计数到终值 (0x000) 时会产生一个复位信号( IWDG 复位)。
任何时候将关键字 0xAAAA 写到 IWWDG_KR 寄存器中, IWDG_RLR 的值就会被重载到计
数器,从而避免产生看门狗复位。

3、寄存器配置:

IWDG_PR 和 IWDG_RLR 寄存器具有写保护功能。要修改这两个寄存器的值,必须先向
IWDG_KR 寄存器中写入 0x5555。

 

只要对以上三个寄存器进行相应的设置,我们就可以启动 STM32F4 的独立看门狗。独立
看 门 狗 相 关 的 库 函 数 操 作 函 数 在 文 件 stm32f4xx_hal_iwdg.c 和 对 应 的 头 文 件
stm32f4xx_hal_iwdg.h 中。

三、程序设计

1、程序思路

开启STM32的独立看门狗,按键按下即喂狗,如果超时未喂狗,则看门狗复位系统,用指示灯指示系统复位。分别演示喂狗和不喂狗的两种状态。


2、cubmx配置

(1)开启rcc时钟,串口通信配置、独立开门狗配置、一个按键PA0、一个led等PF9

 (2)独立开门狗配置

rc时钟源是32khz左右,这样设置相当于3秒。

3、编程思路

初始化进入while(1)之前,设置一个led的亮灭并打印一行信息代表复位

while循环内按键代表喂狗,使用函数HAL_IWDG_Refresh(&hiwdg); 

int fputc(int ch ,FILE *p)
{
	while(!(USART1->SR & (1<<7)));
	USART1->DR = (uint8_t)ch;
	return ch;
}
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  *
  * @retval None
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_IWDG_Init();
  /* USER CODE BEGIN 2 */
	printf("this is IWDG\r\n");
	HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_RESET);
	HAL_Delay(1000);
	HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_SET);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
			if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_SET) 
			{
					HAL_Delay(20);
					if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_SET) //按键判断
					{
							HAL_IWDG_Refresh(&hiwdg); //看门狗喂狗操作
					
					}
			}
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}

4、项目展示

独立看门狗实验演示

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

4IOT

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

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

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

打赏作者

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

抵扣说明:

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

余额充值