目标:

没按下KEY1(没喂狗):LED反复点亮熄灭

按下KEY1(喂狗):一直进复位, LED不亮

一.原理分析

1.看门狗:IWDG(独立看门狗), WWDG(窗口看门狗)

2.

电脑死机—>强制关机并重启

仪器仪表的CPU—>遇到强电场和大功率设备->处理器跑飞->程序中的pt指针跳到另一个地方执行或者不能运行->仪表死机->复位仪表->独立看门狗实现

3.STM32寄存器手册(3个)

键寄存器(IWDG_KR):喂狗值(复位):写0xAAAA, 允许访问寄存器:写0x5555, 启动看门狗:写0xCCCC

预分频寄存器(IWDG_PR):分频倍数为0、1、2、3......(我选择4倍频)(IWDG工频40KHZ)

40KHZ/4*2^4 = 625HZ(重装载值设置为625)

重装载寄存器(IWDG_RLR):决定复位时间(我设置的4倍频+重装载值设为625, 一秒一个复位(喂狗时间))

寄存器知道怎么设置了, 那库函数中有给IWDG封装好的函数吗?

4.库函数手册

1.LED要亮灭, 所以初始化LED

void Led_Configuration(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);}

套路:

1.定义结构体对象, 对象赋值, 调用xxxx_Init函数。

2.开启GPIOA外设挂载在APB2上的时钟

2.用到延时函数, 初始化SysTick

中断处理函数:

void SysTick_Handler(void)
{if(TimingDelay != 0)TimingDelay--;
}

初始化SysTick函数:

void SysTick_Configuration(void)
{while(SysTick_Config(72));SysTick->CTRL &= ~(1<<0);}

利用中断实现延时函数:

void Delay_us(unsigned int i)
{TimingDelay = i;SysTick->CTRL |= (1<<0);while(TimingDelay); SysTick->CTRL &= ~(1<<0);
}

3.初始化IWDG

void IWDG_Configuration(void)
{IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);IWDG_SetPrescaler(IWDG_Prescaler_64);IWDG_SetReload(625);IWDG_ReloadCounter();IWDG_Enable();
}

注意:

1.使能对PR和RLR的写操作, 分频, 重装载值, 重装载值放在IWDG定时器中,使能IWDG

2.复位时间为一秒:工频/分频率*传入参数(例:1000000)

4.PA0配置成喂狗(复位)操作

1.初始化KEY1

void Key_Configuration(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOA, &GPIO_InitStructure);}

注意:

1.结构体对象, 对象赋值, Init函数,开启GPIOA挂载在APB2上的时钟

2.KAY1在PA0上

2.喂狗操作的配置

给KR(键寄存器)写0xAAAA, 复位(喂狗)。

void IWDG_EeedDog(void)
{IWDG_ReloadCounter();
}

注意:

1.IWDG_ReloadCounter();(重装载计数器函数)

这个函数默认值为0xAAAA, 也就是参数,给KR寄存器写0xAAAA,实现复位 。所以直接调用此函数就实现了喂狗(复位)功能。

5.main函数写法

int main(void)
{SysTick_Configuration();Led_Configuration();¯IWDG_Configuration(); Key_Configuration();LED_TOGGLE;Delay_us(100000);LED_TOGGLE;Delay_us(100000);while(1){if(Key_Scan(GPIOA, GPIO_Pin_0) == KEY_ON)IWDG_EeedDog();Delay_us(10);}
}

说明:

1.分别是各个函数的调用。

2.没按下按键之前, LED闪烁;按下按键后(喂狗复位后), LED熄灭。

6.效果展示

https://www.bilibili.com/video/BV1Qa411e7UN?spm_id_from=333.999.0.0https://www.bilibili.com/video/BV1Qa411e7UN?spm_id_from=333.999.0.0

【STM32】基于IWDG实现复位(手动喂狗)功能相关推荐

  1. STM32的复位方式:硬件复位、软件复位(看门狗复位和系统复位)

    STM32的复位方式:硬件复位.软件复位(看门狗复位和系统复位). 1.硬件复位: 硬件复位通过给NRST引脚输入低电平复位单片机. 2.看门狗复位: 独立看门狗和窗口看门狗. (1)独立看门狗 ST ...

  2. stm32增加IWDG(看门狗)功能

    现有工程是通过stm32CubeMX生成,并且新增很多逻辑.当前需求是需要增加看门狗功能,如果还是用stm32CubeMX生成,还需要将之前的逻辑再移植一遍,很麻烦. 1. 先新建一个stm32Cub ...

  3. 正点原子STM32(基于HAL库)3

    目录 高级定时器实验 高级定时器简介 高级定时器输出指定个数PWM 实验 高级定时器输出指定个数PWM原理 TIM1/TIM8 寄存器 硬件设计 课堂源码(输出指定个数PWM灯就闪几次) 程序设计 下 ...

  4. STM32学习心得十七:窗口看门狗(WWDG)实验及旧知识点复习

    记录一下,方便以后翻阅~ 主要内容: 1) 窗口看门狗概述: 2) 常用寄存器和库函数配置: 3) 窗口看门狗实验. 窗口看门狗实验内容: 为了对之前的知识进行总结复习,本人在教学案例的基础上又&qu ...

  5. STM32F10xx中独立看门狗(IWDG)和窗口看门狗(WWDG)介绍

    本文大部分内容只用到了键盘的3个按键-你懂的 . 简单总结,Markdown了解一下,推荐. 1.看门狗电路介绍 看门狗电路(watchdog timer),又称监控电路.百度百科解释的很详细: 在由 ...

  6. 正点原子STM32(基于HAL库)0

    目录 开发环境搭建与使用 常用开发工具简介 MDK 安装 仿真器驱动安装 CH340 USB 虚拟串口驱动安装 使用MDK5 编译例程 使用串口下载程序 使用DAP 下载与调试程序 使用DAP 下载程 ...

  7. 基于51单片机的手动数字时钟

    具体实现功能 实现功能: (1)利用数码管显示时分秒,显示格式为"时-分-秒": (2)利用6个按键控制时.分.秒: (3)设置秒复位按键,可实现秒钟复位. 单片机介绍 51单片是 ...

  8. 正点原子STM32(基于HAL库)5

    目录 SRAM 实验 存储器简介 SRAM 方案简介 硬件设计 程序设计 程序流程图 程序解析 下载验证 内存管理实验 内存管理简介 硬件设计 程序设计 程序流程图 程序解析 下载验证 SD 卡实验 ...

  9. STM32实战总结:HAL之看门狗

    在由单片机构成的微型计算机系统中,单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环:或者因为用户配置代码出现BUG,导致芯片无法正常工作.出于对单片机运行状态进行实时监测的考虑 ...

最新文章

  1. LeetCode 94. Binary Tree Inorder Traversal--二叉树中序遍历--递归,迭代--C++,Python解法
  2. HBase性能优化方法总结(四):数据计算
  3. 二、python基础(列表、元组、字符串、集合、字典、文件操作,函数基本语法及特性)...
  4. linux线程并不真正并行,Linux系统编程学习札记(十二)线程1
  5. js导入导出总结与实践
  6. 取KindEditor中的textarea的值区不到的解决方案,固定kindEditor的高度
  7. 燃!Java全球标准中国人参与制定,阿里成首个受邀中国公司
  8. 面试官:Redis的事务满足原子性吗?
  9. 2019年的第三场LiveVideoStackCon有何不同?
  10. 战斗机各种世界之最,涨知识了。。。
  11. ubuntu安装python3.8_Ubuntu 16.04 安装 python3.8
  12. Docker Desktop 向大公司宣告收费,网友大呼:是时候弃用了!
  13. Node.js Path 模块
  14. ubuntu 16.04下安装mysql
  15. 常用公差配合表图_常用的机械测量工具竟然这么多?你知道几个?
  16. 哪里获取计算机新闻比较好,学新闻的用什么电脑比较好
  17. 【阿里巴巴Java编程规范学习 三】Java异常日志规约
  18. reg、wire与logic的区别
  19. 让连续的英文或数字自动换行
  20. 如何利用python准确预测双色球开奖结果

热门文章

  1. Coffee Chicken
  2. ppi协议源码 c语言,S7-200 PLC的PPI协议及其开发实例
  3. spread运算符_JavaScript中的Spread运算符有什么用?
  4. 编程之美之一摞烙饼的排序1
  5. 【K8S 三】部署 metrics-server 插件
  6. [经验] PROTEUS仿真学习笔记05 (SPI 协议 外设)——2014_7_15
  7. 网易我的世界java进不去_网易我的世界端游怎么进不去
  8. MongoDB之查询文档
  9. 计算机设计核心思想,科学网—计算机设计的两种理念,颠覆os的计算机 - 姜咏江的博文...
  10. 使用LumaQQ来开发QQ机器人