STM32-看门狗

1、看门狗是什么:就是一个向下定时器,定时时间一到,就会触发一个向下的复位的中断,使单片机开始工作

2、作用:MCU微控制器构成的微型计算机系统中,由于微控制器的工作常常会受到来自外界电磁场的干 扰,造成各种寄存器和内存的数据混乱,从而导致程序指针错误、不在程序区、取出错误的程序指令 等,都有可能会导致程序执行陷入死循环,程序的正常运行被打断,由微控制器控制的系统无法继续 正常工作,导致整个系统的陷入停滞状态,发生不可预料的后果。为了解决以上的问题,在微控制继承了一个定时器复位电路,即看门狗。

3、分类:

3.1独立看门狗(IWDG)

自由运行的递减计数器

时钟由独立的RC振荡器提供(可在停止和待机模式下工作)

看门狗被激活后,则在计数器计数至0x000时产生复位

3.1.1主要功能

由专用的低速时钟(Lst)驱动,即使主时钟发生故障,也能够继续有效工作的场合。

独立看门狗适用于需要看门狗作为一个在主程序之外能够完全独立工作,并且对时间精度要求低

3.1.2主要框架

1、时钟
由LSI提供时钟,时钟频率40KHz,经过预分频器分频后的时钟,提供给12bit递减计数
器,作为向下技术的频率。
预分频器的分频系数由IWDG_PR预分频寄存器设置:地址偏移:0x04 复位值:0x0000
0000
2、键寄存器
地址偏移:0x00
复位值:0x0000 0000 (在待机模式复位)
IWDG_PR和IWDG_RLR寄存器具有写保护功能。要修改这两个寄存器的值,必须先向
IWDG_KR寄存器中写入0x5555。重装载操作(即写入0xAAAA)也会启动写保护功能。
3、重装载寄存器
地址偏移:0x08
复位值:0x0000 0FFF(待机模式时复位)
3.1.3、功能总结
在键寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其复
位值
0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。
无论何时,只要在键寄存器IWDG_KR中写入0xAAAA, IWDG_RLR中的值就会被重新
加载到
计数器,从而避免产生看门狗复位 。

3.1.4、相关固件库函数

写使能
 //Enables or disables write access to IWDG_PR and IWDG_RLR registers

 #define IWDG_WriteAccess_Enable ((uint16_t)0x5555)
 #define IWDG_WriteAccess_Disable ((uint16_t)0x0000)
 参数:
 @arg IWDG_WriteAccess_Enable
 @arg IWDG_WriteAccess_Disable
 void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess)
设置预分频寄存器:
 /**
 * @brief Sets IWDG Prescaler value.
 * @param IWDG_Prescaler: specifies the IWDG Prescaler value.
 * This parameter can be one of the following values:
 * @arg IWDG_Prescaler_4: IWDG prescaler set to 4
 * @arg IWDG_Prescaler_8: IWDG prescaler set to 8
 * @arg IWDG_Prescaler_16: IWDG prescaler set to 16
 * @arg IWDG_Prescaler_32: IWDG prescaler set to 32
 * @arg IWDG_Prescaler_64: IWDG prescaler set to 64
 * @arg IWDG_Prescaler_128: IWDG prescaler set to 128
 * @arg IWDG_Prescaler_256: IWDG prescaler set to 256
 * @retval None
 */
 void IWDG_SetPrescaler(uint8_t IWDG_Prescaler)
 /**
 * @brief Sets IWDG Reload value.
 * @param Reload: specifies the IWDG Reload value.
 * This parameter must be a number between 0 and 0x0FFF.
 * @retval None
 */
 void IWDG_SetReload(uint16_t Reload)
按照 IWDG 重装载寄存器的值重装载 IWDG 计数器,设置重装载计数器
 //#define KR_KEY_Reload ((uint16_t)0xAAAA)
 void IWDG_ReloadCounter(void)
 {
 IWDG‐>KR = KR_KEY_Reload;
 }
使能看门狗定时器:开启看门狗
//#define KR_KEY_Enable ((uint16_t)0xCCCC)
void IWDG_Enable(void)
{
IWDG‐>KR = KR_KEY_Enable;
}

看门狗实验

模拟延时每次0.9秒去喂一次狗

RCC_LSICMD:内部使能一个低速时钟等待低速时钟使能成功开启预分频和重装载寄存器设置预分频值

设置重装载值定时分频值减去1,40*1000/32这是分频后的时频率,从1250-1到0的时间正好是一秒

进行喂狗,将重装载数据写入到计数器中

使能独立看门狗,从1250-1开始计数将1250-1的数装载到计数器中

初始化看门狗程序后,开始计数,当计数到900毫秒的时候,就会去喂狗,在1秒能喂狗就是程序能继续执行,不会产生一个复位

3.2窗口看门狗

窗口看门狗( wwdg)
通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序
列而产生的软件故障。
由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来监测应用程序非正常
的过迟或过早操作。窗口看门狗最合适那些要求看门狗在精确计时窗口起作用的程序。
WWDG框架图
产生复位的两种情况:
第一种:
1和2经过与门后,产生复位。即:WDGA位为1,T6为0(取反后为1,经过或门电路后路
径2为1),也就是WWDG_CR寄存器递减到0x40后,再减1,编程0x3F的时候,T6位,由
1变为0。
第二种:
WDGA位为1时,当T6:0 > W6:0 且写入WWDG_CR(即刷新计数值)产生复位中断
WWDG时序:
配置寄存器(WWDG_CFR) 中包含窗口的上限值:要避免产生复位,递减计数器必须在其值
小于窗口寄存器的数值并且大于0x3F时被重新装载
1.时钟
WWDG时钟来自于PCLK1(36MHz),由窗口看门狗WDGTB预分频器分频后,提供
给6bit递减计数器作为向下计数得频率。
配置寄存器(WWDG_CFR) 2.控制寄存器(WWDG_CR) 配置寄存器(WWDG_CFR)
相关固件库函数
回复WWDG默认配置
  void WWDG_DeInit ( void )
设置预分频
  @arg WWDG_Prescaler_1 : WWDG counter clock = ( PCLK1 / 4096 ) / 1
  @arg WWDG_Prescaler_2 : WWDG counter clock = ( PCLK1 / 4096 ) / 2
@arg WWDG_Prescaler_4 : WWDG counter clock = ( PCLK1 / 4096 ) / 4
  @arg WWDG_Prescaler_8 : WWDG counter clock = ( PCLK1 / 4096 ) / 8
  void WWDG_SetPrescaler ( uint32_t WWDG_Prescaler )
设置窗口值(即设置WWDG_CFR寄存器值)
//This parameter value must be lower than 0x80
void WWDG_SetWindowValue ( uint8_t WindowValue )
设置计数值(即设置WWDG_CR寄存器值)
//This parameter must be a number between 0x40 and 0x7F
void WWDG_SetCounter ( uint8_t Counter )
使能 WWDG 并装入计数器值
  //This parameter must be a number between 0x40 and 0x7F
void WWDG_Enable ( uint8_t Counter )
使能中断
  void WWDG_EnableIT ( void );

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/601046.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记一次渗透测试(2)

内网渗透 centos上线msf 这里因为是linux的原因,就不使用cs上线的打法了,先生成一个linux的payload上线到msf use exploit/multi/script/web_delivery set lhost 192.168.1.10 set lport 4444 set target 7 run 运行之后会给出一个payload use expl…

【面试题】如何在亿级别用户中检查用户名是否存在?

前言 不知道大家有没有留意过,在使用一些app或者网站注册的时候,提示你用户名已经被占用了,比如我们熟知的《英雄联盟》有些人不知道取啥名字,干脆就叫“不知道取啥名”。 但是有这样困惑的可不止他一个,于是就出现了“…

TypeScript系列之-理解TypeScript类型系统画图讲解

TypeScript的输入输出 如果我们把 Typescript 编译器看成一个黑盒的话。其输入则是使用 TypeScript 语法书写的文本或者文本集合。 输出是编译之后的 JS 文件 和 .d.ts 的声明文件 其中 JS 是将来需要运行的文件(里面是没有ts语法,有一个类型擦除的操作)&#xff0…

openGauss学习笔记-258 openGauss性能调优-使用Plan Hint进行调优-指定子查询不展开的Hint

文章目录 openGauss学习笔记-258 openGauss性能调优-使用Plan Hint进行调优-指定子查询不展开的Hint258.1 功能描述258.2 语法格式258.3 示例 openGauss学习笔记-258 openGauss性能调优-使用Plan Hint进行调优-指定子查询不展开的Hint 258.1 功能描述 数据库在对查询进行逻辑…

使用Code开发Django_模版和CSS

转到定义 和 查看定义 在使用Django或任何其他库的过程中,我们可能需要检查这些库中的代码。VS Code提供了两个方便的命令,可以直接导航到任何代码中的类和其他对象的定义: 转到定义 在Python开发环境中,我们可以轻松地对函数、类…

【LeetCode热题100】32. 最长有效括号(动态规划)

一.题目要求 给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 二.题目难度 困难 三.输入样例 示例 1: 输入:s “(()” 输出:2 解释:最长有效括号子…

物联网行业趋势——青创智通

工业物联网解决方案-工业IOT-青创智通 随着科技的不断进步和应用场景的日益扩大,物联网行业呈现出迅猛发展的势头。作为当今世界最具前瞻性和战略意义的领域之一,物联网行业的趋势和未来发展值得深入探讨。 ​一、物联网行业正逐渐实现全面普及。随着物…

泡泡写作怎么用 #经验分享#微信

泡泡写作是一款非常好用的论文写作工具,它可以帮助用户检测论文的相似度并进行降重,减少抄袭和重复引用的问题,是学生和研究人员们写作过程中的得力助手。 使用泡泡写作非常简便方便。用户只需要将待检测的论文文本复制粘贴到工具中&#xff…

Qt/C++项目 学生成绩管理系统

直观的 QT 图形界面:采用 QT 构建的用户友好界面,提供清晰的菜单选项,确保用户轻松导航和访问各项功能。 数据库驱动的数据存储:系统使用数据库技术安全高效地存储学生信息,保障数据的完整性和可靠性。 全面的基本功…

017——DS18B20驱动开发(基于I.MX6uLL)

目录 一、 模块介绍 1.1 简介 1.2 主要特点 1.3 存储器介绍 1.4 时序 1.5 命令 1.5.1 命令大全 1.5.2 命令使用 1.5.3 使用示例 1.6 原理图 二、 驱动程序 三、 应用程序 四、 测试 一、 模块介绍 1.1 简介 DS18B20 温度传感器具有线路简单、体积小的特点&…

MagicHut 工具分享

设计师必备工具 与全球一流设计师交流,分享在全世界的一流设计网站上展示作品,寻找灵感 免费拥有超过 20,000 TB 的设计师素材 免费下载行业设计工具,软件 其实是可以让你拥有魔法,免费使用,每天签到就行,…

2024/4/1—力扣—BiNode

代码实现: /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/void convertBiNode_pro(struct TreeNode *root, struct TreeNode **p) {if (root) {convertBiNode_pro(roo…