深入解析:STM32H743-ARM例程9-IWDG看门狗

news/2025/9/30 14:23:50/文章来源:https://www.cnblogs.com/slgkaifa/p/19121040

深入解析:STM32H743-ARM例程9-IWDG看门狗

目录

  • 实验平台
  • 实验介绍
  • 看门狗
  • IWDG
    • IWDG框图
    • IWDG寄存器
      • 键值寄存器 IWDG_KR
      • 预分频寄存器(IWDG_PR)
      • 重装载寄存器(IWDG_RLR)
  • STM32CubeMX生成工程
  • 实验程序
  • 实验现象

实验平台

硬件:银杏科技GT7000双核心开发板-ARM-STM32H743XIH6,银杏科技iToolXE仿真器
软件:最新版本STM32CubeH7固件库,STM32CubeMX v6.10.0,开发板环境MDK v5.35,串口工具putty

实验介绍

  本章我们介绍,如何使用串口向STM32H743发送指令,来完成看门狗喂狗操作。

看门狗

  在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界磁场的干扰,造成各种寄存器和内存的数据混乱,会导致程序指针错误,不在程序区,取出错误的程序指令等,都会陷入死循环。程序的正常运行被打断,由单片机控制的系统无法继续正常工作,会造成整个系统陷入停滞状态,发生不可预料的后果。看门狗就是定期的查看芯片内部的情况,一旦发生错误就向芯片发出重启的电路。看门狗命令在程序的中断中拥有最高的优先级。

IWDG

  独立看门狗(IWDG)用通俗一点的话来解释就是一个12位的递减计数器,当计数器的值从某个值一直减到0的时候,系统就会产生一个复位信号,即IWDG_RESET。 果在计数没减到0之前,刷新了计数器的值的话,那么就不会产生复位信号,这个动作就是我们经常说的喂狗。看门狗功能由 VDD 电压域供电, 在停止模式和待机模式下仍能工作。

IWDG框图

在这里插入图片描述
  从框图我们可以看到,IWDG的12位递减计数器得到一个8位预分频处理器处理后的lsi_ck信号,满足一定条件后,输出复位信号iwdg_out。
在这里插入图片描述
  STM32H7的独立看门狗由内部专门的32Khz低速时钟(LSI)驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟是一个内部RC时钟,所以并不是准确的32Khz,而是在17~47Khz之间的一个可变化的时钟,只是我们在估算的时候,以32Khz的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。

IWDG寄存器

键值寄存器 IWDG_KR

该寄存器的各位描述如图:
在这里插入图片描述

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

预分频寄存器(IWDG_PR)

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

重装载寄存器(IWDG_RLR)

  该寄存器用来保存重装载到计数器中的值。该寄存器也是一个32位寄存器,但是只有低12位是有效的,该寄存器的各位描述如图:
在这里插入图片描述
只要对以上三个寄存器进行相应的设置,我们就可以启动STM32H7的独立看门狗。
喂狗计算公式为::Tout = ((4×2^pre) × rlr) /32 (ms)
若设置pre=4(64分频),rlr=500时,即Tout=(64×500)/32=1秒,此时必须在一秒内至少喂狗一次,我们可以设置每800ms喂狗一次。

STM32CubeMX生成工程

我们参考前面章节STM32H743-结合CubeMX新建HAL库MDK工程,打开CubeMX软件,重复步骤不再展示,我们来看配置IWDG部分如下图所示:
在这里插入图片描述

实验程序

1. 主函数

int main(void)
{
char buffer[UART_BUFFER_SIZE];
int i;
int n=0;
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_IWDG1_Init();
MX_USART6_UART_Init();
uart6.initialize(115200);
uart6.printf(".  输入 test 并敲回车进行测试  .\r\n");
while (1)
{
// 独立看门狗设置"喂狗"时间为1s,如果超过1s没有"喂狗",则"被狗咬",即STM32
复位
if(uart6.receive_ok_flag == 1)
{
uart6.receive_ok_flag = 0;
memset(buffer,0,20);
memcpy(buffer,uart6.receive_buffer,20);
for(i = 0;i < 20;i ++)
{
buffer[i] = tolower(buffer[i]);
}
if(memcmp(buffer,"test",strlen("test")) == 0)
{
n=1;
}
else
{
uart6.printf("\r\n\033[1;31;40mBad Command!\r\n");
}
}
while(n==1)                           //输入test不再喂狗,STM32将复位
HAL_IWDG_Refresh(&hiwdg1);         //每800ms喂狗一次,防止被狗咬
HAL_Delay(800);
LED_ON;
}
}

2. IWDG1初始化函数

void MX_IWDG1_Init(void)
{
hiwdg1.Instance = IWDG1;
hiwdg1.Init.Prescaler = IWDG_PRESCALER_64;
hiwdg1.Init.Window = 4095;
hiwdg1.Init.Reload = 500;
if (HAL_IWDG_Init(&hiwdg1) != HAL_OK)
{
Error_Handler();
}
}

3. 喂狗函数
在HAL中重载计数值的函数是HAL_IWDG_Refresh,它的作用是把值0xAAAA写入到IWDG_KR寄存器,从而触发计数器重载,即实现独立看门狗的喂狗操作。该函数声明为:

HAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg)
{
__HAL_IWDG_RELOAD_COUNTER(hiwdg);
return HAL_OK;
}

实验现象

GT7000双核心板LED常亮,当向终端发送“test”后,程序不再喂狗,看门狗复位arm后可在串口接收到“输入 test 并敲回车进行测试”,并且led短暂熄灭后重新常亮。
在这里插入图片描述

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

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

相关文章

高效做PPT!5个亲测模板网站,10分钟出专业演示 !

“明天就要交汇报 PPT,现在还没动笔”“花 3 小时找的模板,打开全是水印”“数据图表调了半天,还是歪歪扭扭”—— 这是不是你的职场日常?作为每天和 PPT 打交道的运营人,我曾因一套季度总结 PPT 熬到凌晨两点,直…

网站最新程序策划书推荐个好看的网站

目录 0 专栏介绍1 时序差分强化学习2 策略评估原理3 策略改进原理3.1 SARSA算法3.2 Q-Learning算法 0 专栏介绍 本专栏重点介绍强化学习技术的数学原理&#xff0c;并且采用Pytorch框架对常见的强化学习算法、案例进行实现&#xff0c;帮助读者理解并快速上手开发。同时&#…

【WCH蓝牙系列芯片】-基于CH592开发板——HID_Keyboard中添加读、写、通知的服务属性

【WCH蓝牙系列芯片】-基于CH592开发板——HID_Keyboard中添加读、写、通知的服务属性--------------------------------------------------------------------------------------------------------------------------…

2025 年 AI 健康管理厂商最新推荐榜单:覆盖多场景需求,深护智康等优质品牌助力行业升级

随着 “AI + 健康管理” 模式在医疗、公卫、药店、母婴等多场景的深度渗透,市场对专业厂商的需求愈发迫切。当前行业面临传统系统定制成本高、服务效率低、细分场景支持不足等痛点,众多机构难以快速找到适配自身需求…

虚幻5.6插件添加自定义shader

主要是对官方文档的一个补充:虚幻引擎插件中的 Shader | 虚幻引擎 5.6 文档 | Epic Developer Community 添加虚拟源文件路径查看代码 void FYKComputeModule::StartupModule() {// 查找插件TSharedPtr<IPlugin>…

建设银行网站电脑版wordpress discuz

题目描述&#xff1a;给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 题目链接&#xff1a;LeetCode-47-全排列Ⅱ 解题思路&#xff1a;注意题目中给的是包含重复数字&#xff0c;所以需要去重操作&#xff1b; 这道题不需要 startIndex&…

勒索软件速度危机:AI驱动下的网络安全新挑战

勒索软件攻击速度已从2019年的9天缩短至2025年的25分钟,增长100倍。AI技术正被用于网络犯罪,82.6%的网络钓鱼邮件采用AI技术。防御需依赖AI检测、自动化响应和XDR平台构建速度兼容的防御体系。勒索软件速度危机 当网…

在线考试小程序管理系统:一站式智能考试解决方案,助力多场景高效考核

在数字化学习与培训需求日益增长的当下,传统考试模式面临组织成本高、灵活性不足、数据统计难等痛点。由广西南宁诚客网络科技有限公司研发的在线考试小程序,依托微擎系统实现便捷部署,覆盖微信小程序端,整合丰富题…

快微商城小程序管理系统:助力商家搭建高效便捷的新零售平台

在互联网科技飞速发展的当下,传统租赁柜台与纯电商逐渐偏离零售服务核心,而小程序商城系统凭借便捷、低成本的优势成为零售行业新选择。快微商城作为专注于小程序开发的解决方案,涵盖微信小程序与抖音小程序定制开发…

2025最新布袋包装厂家推荐排行榜:布袋包装,布袋,手提袋,帆布袋定制,无纺布袋,布袋生产,云南布袋包装,茶叶布袋生产商优选指南

在 “双碳” 目标与 “限塑令” 深化的双重催化下,布袋包装市场规模年增速突破 28%,但行业乱象同步加剧:38% 的企业曾因厂商材料掺假遭遇售后纠纷,45% 的定制订单因产能不足延期交付,同质化产品占比更是高达 62%。…

KTV 娱乐小程序管理系统:数字化运营新选择,助力行业高效经营

在数字化浪潮席卷各行业的当下,KTV 行业也迎来了转型升级的契机。这款专为 KTV 娱乐行业打造的小程序,依托微信生态,整合了包厢预订、在线消费、会员管理等多项核心功能,通过微擎系统交付,为 KTV 商家提供了一站式…

城市电商小程序管理系统:助力商家搭建全渠道数字化经营体系

在数字化浪潮席卷各行各业的当下,线上线下融合的经营模式已成为零售及服务行业的必然趋势。多商家双版本城市电商小程序,作为一款功能全面、适配性强的电商解决方案,依托微擎系统交付优势,为商家提供微信公众号与微…

2025沈阳标识标牌厂家推荐排行榜:聚焦行业产能与技术实力,精选沈阳标识标牌优质企业供订做参考

当前标识标牌行业需求持续增长且愈发多样化,从商业综合体的导视系统到景区的标识建设,从医疗场所的智慧标识到交通领域的规范标牌,不同场景对产品的设计、材质、工艺要求差异显著。同时,行业内企业数量众多,部分企…

L05_新建springboot项目与新建helloword(菜鸟版)

这是一个操作演示,原理我也不知道,我值知道操作步骤,还是抄的。 简要介绍一下我的环境,IDEA2024专业版。 (看不懂英文的我下好了Chinese汉化插件,全部从Pycharm导过来的) 1.先新建一个文件夹,我命名为SpringBo…

Implicit Neural Representations with Periodic Activation Functions

[NIPS20] sin激活函数在INR中的应用Implicit Neural Representations with Periodic Activation Functions SIREN:讨论sin激活函数在INR中的应用 代码仓库 注:本文涉及了一些笔者不了解的领域,仅摘取笔者自身比较熟…

网站架构优化 ampwordpress解析图片调用的方法

1.什么是Rancher Rancher是一套容器管理平台&#xff0c;专门用于部署和管理容器化应用。以下是关于Rancher的详细介绍&#xff1a; 容器编排与管理&#xff1a;Rancher是一个开源的企业级容器管理平台&#xff0c;它支持Kubernetes作为其容器编排引擎。Rancher可以帮助用户在…

Oracle故障分析:数据库不能open下查看undo段的名字

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。Oracle故障分…

实用指南:智慧外贸平台|基于Java+vue的智慧外贸平台系统(源码+数据库+文档)

实用指南:智慧外贸平台|基于Java+vue的智慧外贸平台系统(源码+数据库+文档)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fami…

ObservableCollection子项属性字段值变化的监听处理

ViewModel代码var userList = new List < GroupSelectMemberItemVo > (); foreach(ChatGroupUserRes chatGroupUserRese in DesktopConst.GroupUserSelectList) {var item = chatGroupUserRese.Adapt < Grou…

故障处理:Oracle一体机更换磁盘控制器后部分磁盘状态异常的案例处理

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。这是今年和朋…