32单片机——独立看门狗

1、IWDG的简介 

        IWDG:Independent watchdog,即独立看门狗

        独立看门狗本质上是一个定时器,该定时器是一个12位的递减计数器,当计数器的值减到0的时候,就会产生一个复位信号

        如果在计数没减到0之前,重置计数器的值的话,那么就不会产生复位信号,这个动作我们称为喂狗

(1)本质:能产生系统复位信号的计数器

(2)特性:12位的递减的计数器,时钟由独立的RC振荡器提供(可在待机和停止模式下运行),看门狗被激活后,当递减计数器计数到0x000时产生复位

(3)喂狗:在计数器计数到0之前,重装载计数器的值,防止复位

(4)作用:主要用于检测外界电磁干扰或硬件异常导致的程序跑飞问题,即检测异常 

什么是异常?

外界电磁干扰或者自身系统(硬件或软件)异常,造成程序跑飞,如:陷入某个不正常的死循环,打断正常的程序运行 

(5)应用:在一些需要高稳定性的产品中,并且对时间精度要求较低的场合

2、IWDG框图

简图如下所示:

3、IWDG溢出时间计算

T_{out}:看门狗溢出时间

f_{IWDG}:看门狗的时钟源频率(30~60Khz),一般以40Khz来计算

prer:IWDG_PR的值(000~111)

rlr:看门狗重装载值(0~4095) 

4、IWDG的配置步骤

(1)取消PR/RLR寄存器写保护,设置IWDG,预分频系数和重装载值,启动IWDG

HAL_IWDG_Init();

(2)及时喂狗,即写入0xAAAA到IWDG_KR

HAL_IWDG_Refresh();

IWDG配置:

IWDG_HandleTypeDef iwdg_handle;  //iwdg句柄
//初始化iwdg
void iwdg_init(uint8_t psc,uint16_t alr){
    iwdg_handle.Instance=IWDG;  //寄存器基地址
    iwdg_handle.Init.Prescaler=psc;  //预分频系数
    iwdg_handle.Init.Reload=alr;  //重装载值
    HAL_IWDG_Init(&iwdg_handle);  //取消写保护
}

//喂狗
void iwdg_refresh(void){
    HAL_IWDG_Refresh(&iwdg_handle);
}

HAL_IWDG_Init

功能:使能IWDG,设置预分频系数和重装载值等 

HAL_StatusTypeDef HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg) 

typedef struct{
  IWDG_TypeDef                 *Instance;  /*  寄存器基地址  */

  IWDG_InitTypeDef             Init;           /*  IWDG必需参数  */
} IWDG_HandleTypeDef;

typedef struct{
  uint32_t Prescaler;  /*  预分频系数  */

  uint32_t Reload;      /*  重装载值(0~0x0FFF)  */

} IWDG_InitTypeDef;

Prescaler预分频系数如下所示:

#define IWDG_PRESCALER_4      0x00000000U                                             /*  4  */
#define IWDG_PRESCALER_8      IWDG_PR_PR_0                                        /*  8   */
#define IWDG_PRESCALER_16     IWDG_PR_PR_1                                       /*  16  */
#define IWDG_PRESCALER_32     (IWDG_PR_PR_1 | IWDG_PR_PR_0)      /*  32  */
#define IWDG_PRESCALER_64     IWDG_PR_PR_2                                       /*  64  */
#define IWDG_PRESCALER_128    (IWDG_PR_PR_2 | IWDG_PR_PR_0)     /*  128 */
#define IWDG_PRESCALER_256    (IWDG_PR_PR_2 | IWDG_PR_PR_1)     /*  256 */ 

HAL_IWDG_Refresh 

功能:把重装载寄存器的值重载到计数器中,喂狗 

HAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg) 

5、实现喂狗操作

int main(void){
    uint8_t key;
    HAL_Init();
    sys_stm32_clock_init(RCC_PLL_MUL9);  //设置系统时钟
    delay_init(72);
    
    led_init();
    beep_init();
    key_init();
    usart_init(115200);  //串口
    HAL_Delay(100);
    
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);
    iwdg_init(IWDG_PRESCALER_64,625);  //初始化iwdg    设置预分频系数64     重装值625    溢出时间1s
    while (1){
        key=scan(0);
        if(key==4){        //当按下KEY_UP键时喂狗
            iwdg_refresh();
        }
  }
}
 

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

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

相关文章

[计算机网络]数据链路层

408考纲(数链层部分): 0 概论:数据链路层都干什么事,提供啥功能 比物理层再高一层就是数据链路层,咱们上一篇讲物理层,物理层直接接触传输介质,现在数据链路层是使用物理层的传输服务,然后实现更多的功能。…

OpenAI大变革!继续与微软等,以非营利模式冲击AGI

今天凌晨2点,OpenAI宣布,将继续由非营利组织控制;现有的营利性实体将转变为一家公共利益公司;非营利组织将控制该公共利益公司,并成为其重要的持股方。 这也就是说OpenAI曾在去年提到的由非营利性转变成营利性公司&am…

库存怎么管?怎样才能做到有效的库存管理?

说到库存管理,估计大多数老板和管理者都有过“烦心事”。一方面,库存过多,货物堆积如山,堆在仓库里也不动,结果占地方还占用资金;另一方面,又有可能遇到客户急着要货,可是库存却紧张…

Kotlin-空值和空类型

变量除了能引用一个具体的值之外,还有一种特殊的值,那就是 null, 它代表空值, 也就是不引用任何对象 在Kotlin中, 对空值的处理是非常严格的,正常情况下,我们的变量是不能直接赋值为 null 的,否则无法编译通过, 这直接在编译阶段就避免了空指针问题 Kotlin中所有的类型默认都是…

[特殊字符]算法次元突破:螺旋矩阵的“能量解码术” vs 超立方体的“维度折叠指南”

🔍 引言 如果科幻电影中的能量矩阵是算法的考题,你会用螺旋指针破解它的DNA吗? 如果《星际穿越》的五维空间变成编程题,你敢用动态规划丈量时间的褶皱吗? 今天,我们将化身算法世界的能量解…

高光谱相机赋能烟叶分选:精准、高效与智能化的新突破

烟草产业作为中国重要的经济支柱,烟叶分选的质量与效率直接影响行业效益。传统人工分选存在效率低、主观性强、标准难以统一等问题,而机器视觉技术受限于可见光波段,难以捕捉烟叶深层特征。深圳中达瑞和科技有限公司推出的高光谱相机解决方案…

矩阵求导常用公式解析:标量、向量与矩阵的导数计算

矩阵求导常用公式解析:标量、向量与矩阵的导数计算 矩阵求导常用公式解析:标量、向量与矩阵的导数计算矩阵求导的布局问题1. 分子布局 vs 分母布局对比表2. 布局冲突的典型场景分析3. 混合布局的兼容性处理 一、标量对向量求导1. 线性函数求导2. 二次型函…

NocoDB:开源的 Airtable 替代方案

NocoDB:开源的 Airtable 替代方案 什么是 NocoDB?NocoDB 的主要特点丰富的电子表格界面工作流自动化应用商店程序化访问NocoDB 的应用场景使用 Docker 部署 NocoDB1. 创建数据目录2. 运行 Docker 容器3. 访问 NocoDB注意事项总结什么是 NocoDB? NocoDB 是一款功能强大的开源…

全格式文档转 Markdown 工具,Docker 一键部署,支持 API 调用

以下是简要介绍: 这是一款可以快速将任意文档文件转markdown格式内容的工具,提供API转换接口,方便集成与应用原理就是利用libreoffice、pandoc文件转换工具,把所有文档类型的文件逐步转化,最终转成markdown格式的内容…

MATLAB绘制饼图(二维/三维)

在数据分析与展示领域,饼图是一种直观且高效的可视化工具,能够在瞬间传递各部分与整体的比例关系。今天,我将分享一段 MATLAB 绘制二维及三维饼图的代码,助你轻松将数据以饼图形式呈现于众人眼前。 无论是二维饼图的简洁明了&…

AI笔记-1

Halide Perovskites (HPs) 卤化物钙钛矿 卤化物钙钛矿(HPs)已被 公认为 光伏和发光器件 中最有前途的材料之一 在本观点中,我们将探讨钙钛矿的定义,主要聚焦于由 较重卤素(Cl、Br和I)组成的钙钛矿亚群&…

excel表数据导入数据库

前两天,有个两DB之间的数据导出导入的需求。对方提供的是excel表,我这边是mysql数据库,excel表第一行是字段名,之后的行是记录的值。 其实没有多复杂,我先将exel转成csv,结果mysql导入csv,第一行…

智能机器人在物流行业的应用:效率提升与未来展望

随着全球电子商务的蓬勃发展,物流行业正面临着前所未有的挑战和机遇。传统的物流模式已经难以满足日益增长的市场需求,尤其是在效率、成本控制和精准配送方面。智能机器人技术的出现,为物流行业的转型升级提供了强大的动力。本文将探讨智能机…

如何对 Redis 进行水平扩展和垂直扩展以应对微服务流量的增长?

核心概念: 垂直扩展 (Scale Up): 提升单个节点的性能。简单来说就是给现有的 Redis 服务器增加更多的 CPU 、内存、更快的存储(SSD)或更高的网络带宽。水平扩展 (Scale Out): 增加更多节点来分担负载。这意味着部署多个 Redis 实例&#xff…

Elasticsearch知识汇总之ElasticSearch与OpenSearch比较

四 ElasticSearch与OpenSearch比较 OpenSearch项目分为 OpenSearch(源自 Elasticsearch 7.10.2)与 OpenSearch Dashboards(源自 Kibana 7.10.2)两部分。此外,OpenSearch 项目也将成为之前发布的 Elasticsearch 发行版&…

《OmniMeetProTrack 全维会议链智能追录系统 软件设计文档》

撰稿人:wjz 一、引言 1.1 目的 本软件设计文档详细描述了 OmniMeetProTrack 全维会议链智能追录系统的架构、组件、模块设计及实现细节,旨在为开发人员、利益相关者和维护人员提供系统的全面设计蓝图。本文档基于需求定义文档,确保系统实现…

LeetCode 196. 删除重复的电子邮箱

原题题目 表: Person ---------------------- | Column Name | Type | ---------------------- | id | int | | email | varchar | ---------------------- id 是该表的主键列(具有唯一值的列)。 该表的每一行包含一封电子邮件。电子邮件将不包含大写字母…

基于WebUI的深度学习模型部署与应用实践

引言 随着深度学习技术的快速发展,如何将训练好的模型快速部署并提供友好的用户交互界面成为许多AI项目落地的关键。WebUI(Web User Interface)作为一种轻量级、跨平台的解决方案,正被广泛应用于各类AI模型的部署场景。本文将详细介绍基于Python生态构建WebUI的技术方案,包…

Spring AI Alibaba-03- Spring AI + DeepSeek-R1 + ES/Milvus + RAG 智能对话应用开发全流程

Spring AI Alibaba-03- Spring AI DeepSeek-R1 ES/Milvus RAG 智能对话应用开发全流程 在[人工智能](AI)应用中,模型通常需要访问外部资源或执行特定操作,例如数据库查询、调用外部API或执行计算任务。Spring AI,作…

某团小程序mtgsig,_token 生成逻辑分析

前言 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 太久不更新 重新找回号 …