9.独立看门狗IWDG窗口看门狗WWDG编码思路

前言:

        看门狗是维护系统稳定性的一向技术,可以让代码跑飞及时复位,在产品中非常常用,俗话说,重启能解决90%的问题,作为产品来说,你总不能因为一次bug就让程序卡死不动了,肯定要试着重启一下的。看门狗的原理简单的说就是它是一个倒数的计数器,倒数到某个数,它就重启,我们正常的程序当然不能莫名其妙重启,所以在它倒数的期间,往它的计数器写一个新的倒数的值,这样它就不会重启了。更简明地说,就是要定时地,往它的某个寄存器写一个值以防它重启。        

        独立看门狗和窗口看门狗原理一致,差异只在于倒数到哪个值就重启。独立看门狗是倒数到0就重启,而窗口看门狗是你只能在某一个时间区间给它的寄存器写重载值,提早写寄存器或者过晚写重载值,都会导致重启。

        我们说看门狗的本质是个定时器,所以对于定时器,要关注的有几个点:1.时钟频率2.重载值&&计数值3.中断事件4.定时器开关

独立看门狗:

1.时钟:由独立的内部RC时钟(32Khz)提供,即计数一次是1/32K 秒。当然时钟可以分频,对应的寄存器是IWDG_PR可以4,8,16,32.。。。256分频,这样就可以比较久再喂狗一次。

2.重载值&&计数值:

存重载值的寄存器是IWDG_RLR,只有12位有效即可以计数2^12-1 = 4095次,结合时钟频率,可知重启期限是    4095 / 时钟频率

只是,这个寄存器是有写保护的,要操作它需要先解锁,相关寄存器是IWDG_KR

IWDG_KR写0x5555,就可以修改重载值IWDG_RLR以及分频值IWDG_PR

对IWDG_KR写0xAAAA,能够刷新计数值(即将重载值赋给计数值)

对IWDG_KR写0xCCCC,就能够开启看门狗(3.时钟开关     开了就没法关掉了)

没了,这个定时器连中断都没有~

初始化步骤是:

1.配置时钟分频系数IWDG_PR,设置重载值IWDG_RLR

IWDG->KR=0X5555;//解锁
IWDG->PR=prer;  //设置分频系数   
IWDG->RLR=rlr;  //设置重载值
IWDG->KR=0XAAAA;//装载计数值

2. 开启独立看门狗

IWDG->KR=0XCCCC;

3.定时喂狗

IWDG->KR=0XAAAA;//就是将重载值赋给计数值

完整代码:

初始化:

void IWDG_Init(u8 prer分频值,u16 rlr重载值) 
{IWDG->KR=0X5555;//使能对IWDG->PR和IWDG->RLR的写		 										  IWDG->PR=prer;  //设置分频系数   IWDG->RLR=rlr;  //从加载寄存器 IWDG->RLR  IWDG->KR=0XAAAA;//reload											   IWDG->KR=0XCCCC;//使能看门狗	
}

喂狗:

void IWDG_Feed(void)
{IWDG->KR=0XAAAA;//reload											   
}

独立看门狗就是这么简单啦~

窗口看门狗:

窗口看门狗的原理,一个图就可以阐释清楚:

主要注意红色框的部分,只有在刷新窗口这个区间(W[6:0]~0X40)才能喂狗,否则无论是计数器还没倒数到W[6:0]之前就喂狗,亦或者计数器直到0X40还没喂狗,都会导致单片机复位。下面来看怎么配置。还是那样,关注定时器的核心要素:

初始化步骤是:

1.时钟频率

 很离谱的是没有在时钟树看到WWDG的时钟分支,只好来在总线结构这里找,可知WWDG是附属于APB1的,由时钟系统配置我们直到APB1时钟是主频的4分频,即168M/4 = 42M

查看手册我们可以得知WWDG_CFR[8:7]可以配置时钟分频,既然提到了这个寄存器,那顺便就配置一下吧。

WWDG_CFR解析:

[6:0]:        这7位是设置窗口值的,也就是上面窗口看门狗原理框图中的W[6:0]

[8:7]:        配置时钟分频的

[9]:           这个位设为1,那么每次定时器倒数到0x40就会产生中断,这时我们只要在中断服务函数中喂狗,就能维持程序正常运行了~ 要素3.中断事件 在这里,当然别忘了,凡是和中断有关就是和NVIC有关(这个是内部中断,所以没有额外操作)

 所以如果将分频设为8(42M/8 = 5.25M),窗口值设为0x5F,并且开启中断的话:

RCC->APB1ENR|=1<<11; 	//使能wwdg时钟 
WWDG->CFR = 1<<9 | 0x3<<7 | 0x5f<<0;
MY_NVIC_Init(2,3,WWDG_IRQn,2);//分组,中断号,优先级

2.重载值&&计数值

寄存器WWDG_CR控制着定时器开关以及计数值

[6:0]:        WWDG好像没有重载值,只有这个实时计数值,不过效果是类似的。在中断中要及时给它幅值,避免系统复位。

[7]:           置1就是打开WWDG 要素4.定时器开关 在这里

如果将计数值设为0x7f,并打开定时器就是:

WWDG_CR->CR = 1<<7 | 0x7f ;

除了这两个寄存器外,还有一个大材小用的,寄存器WWDG_SR 

 一共32个位,只有bit0是有用的,作用是产生中断时会置1,而且要手动清零~

完整代码:

初始化WWDG:其实按上面我写的那个代码也是可以用的(实测),只是正点原子这个比较通用,了解了原理之后直接调用即可,也只有三个寄存器而已就没必要造轮子了

void WWDG_Init(u8 tr倒数值,u8 wr窗口值,u8 fprer分频) 
{    RCC->APB1ENR|=1<<11; 	//使能wwdg时钟 WWDG_CNT=tr&WWDG_CNT;   //初始化WWDG_CNT.     WWDG->CFR|=fprer<<7;    //PCLK1/4096再除2^fprer WWDG->CFR&=0XFF80;      WWDG->CFR|=wr;     		//设定窗口值      WWDG->CR|=WWDG_CNT; 	//设定计数器值 WWDG->CR|=1<<7;  		//开启看门狗      MY_NVIC_Init(2,3,WWDG_IRQn,2);//抢占2,子优先级3,组2     WWDG->SR=0X00; 			//清除提前唤醒中断标志位 WWDG->CFR|=1<<9;        //使能提前唤醒中断 
} 

调用:

WWDG_Init(0X7F,0X5F,3);	//计数器值为7f,窗口寄存器为5f,分频数为8	  

喂狗函数:

u8 WWDG_CNT=0x7f; //这个变量可以设置计数值//重设置WWDG计数器的值 
void WWDG_Set_Counter(u8 cnt) 
{ WWDG->CR =(cnt&0x7F);//重设置7位计数器 
}

WWDG中断服务函数:

//窗口看门狗中断服务程序 
void WWDG_IRQHandler(void) 
{      WWDG_Set_Counter(WWDG_CNT);//重设窗口看门狗的值!         WWDG->SR=0X00;//清除提前唤醒中断标志位 //业务代码
}

无论是开发哪个模块,都需要根据核心思想来编码。第一次学习应力争总结出模块对应的开发流程,日后碰到不同的单片机才不至于完全没有思路。

完~

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

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

相关文章

Windows操作系统:共享文件夹,防火墙的设置

1.共享文件夹 1.1 共享文件夹的优点 1.2 共享文件夹的优缺点 1.3 实例操作 ​编辑 2.防火墙设置 2.1 8080端口设置 3.思维导图 1.共享文件夹 1.1 共享文件夹的优点 优点 协作和团队合作&#xff1a;共享文件夹使多个用户能够在同一文件夹中协作和编辑文件。这促进了团…

基于ssm珠江学院大学生自愿者服务网论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

2024,华为重塑笔记本的“创新周期”

作者 | 曾响铃 文 | 响铃说 谈及电脑PC&#xff0c;相信不少消费者都会下意识地给行业贴一个标签&#xff1a;夕阳行业。毕竟当下已经是移动互联网时代&#xff0c;传统PC的使用场景不断萎缩&#xff0c;市场研究机构Gartner报告显示&#xff0c;截至2023年第三季度&#xff…

ViT中的上采样和下采样——patch merge

在视觉Transformer&#xff08;Vision Transformer&#xff0c;ViT&#xff09;中&#xff0c;上采样和下采样通常指的是在不同层之间调整特征图的空间分辨率&#xff0c;以便在不同层次上捕获图像的不同尺度的信息。与传统的卷积神经网络&#xff08;CNN&#xff09;不同&…

案例169:基于微信小程序的小区疫情防控系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

【深度学习-目标检测】04 - SSD 论文学习与总结

论文地址&#xff1a;SSD: Single Shot MultiBox Detector 论文学习 1. 摘要 单一深度神经网络用于对象检测&#xff1a;SSD方法使用一个单一的深度神经网络来直接检测图像中的对象&#xff0c;这与传统的需要先生成 对象提议&#xff08;区域提议&#xff09;再进行分类的方法…

EasyRecovery数据恢复软件好不好用?值不值得购买?

EasyRecovery是一款专业优秀的数据恢复软件&#xff0c;支持硬盘、光盘、U盘、手机、数码相机等设备&#xff0c;可以尽可能恢复被误删的文件数据&#xff08;视频、音频、图片等&#xff09;&#xff0c;欢迎下载。 EasyRecovery-2024mac最新版本下载: https://wm.makeding.c…

【SD】IP-Adapter 进阶 骨骼绑定 同款人物【2】

测试模型&#xff1a;###最爱的模型\flat2DAnimerge_v30_2.safetensors [b2c93e7a89] 原图&#xff1a; 加入 control1 [IP-Adapter] 加入 control 2 [OpenPose] 通过openpose骨骼图修改人物动作。 加入 control 3 lineart 加入cotrol3 …

RHCE9学习指南 第10章 ACL权限

10.1 ACL介绍及基本用法 前面讲权限时是对u、u、o来设置权限的。假如有如图10-1所示的需求。 图10-1 为三个用户设置权限 有一个目录aa&#xff0c;要求tom、bob、mary具有不同的权限&#xff0c;利用前面讲过的知识是完全可以实现的。 所有者设置为tom&#xff0c;把所有者权…

有哪些办法可以提纯蒸馏高纯酸试剂?

亚沸腾状态下提纯高纯酸&#xff0c;是一个在超净化实验室经常使用的方法&#xff0c;所用的仪器是酸纯化器。 工作原理 酸纯化器是利用热辐射原理&#xff0c;保持液体温度低于沸点温度蒸发&#xff0c;再将其酸蒸气冷凝从而制备高纯酸以及高纯试剂&#xff0c;广泛应用于样…

计算机服务器中了halo勒索病毒如何解密,halo勒索病毒解密数据恢复

计算机技术的不断发展&#xff0c;为企业的生产运营提供了极大便利&#xff0c;但也为网络安全埋下隐患&#xff0c;网络上的勒索病毒种类也在不断增加&#xff0c;给企业的数据安全带来了严重威胁。近日&#xff0c;云天数据恢复中心接到许多企业的求助&#xff0c;企业的计算…

中后缀表达式

一、利用后缀表达式进行计算 1&#xff09;解题思路 如果当前字符串是操作数&#xff0c;就将该操作数入栈&#xff1b;如果当前字符串是操作符&#xff0c;就取栈顶的两个操作数进行运算&#xff08;注意&#xff1a;第一个出栈的数为计算时的右操作数&#xff1b;第二个出栈…

【力扣题解】P144-二叉树的前序遍历-Java题解

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【力扣题解】 文章目录 【力扣题解】P144-二叉树的前序遍历-Java题解&#x1f30f;题目描述&#x1f4a1;题解&#x1f30…

blender使用faceit绑定自己的表情动作

blender使用faceit绑定自己的表情控制模型 faceit是个神器&#xff0c;来记录一下如何让表情动起来保持相对位置头部分离&#xff0c;方便后续绑定faceitfaceit的注册rig生成地标Animate可以修正表情烘培之前记得保存使用Faceit的整个流程 faceit是个神器&#xff0c;来记录一下…

2024 年网络安全展望:未来是什么?

为了建立强大的网络安全计划&#xff0c;组织必须首先了解整体威胁环境不断变化的性质。 人工智能在成为安全团队的帮助之前&#xff0c;将为网络犯罪分子带来巨大的福音。 网络犯罪分子和不良行为者将受益于先进人工智能工具的广泛部署&#xff0c;然后他们的目标才能建立人…

python爬虫进阶-每日一学(GIF验证码识别)

目的 学习更多的python反爬虫策略 测试网址 http://credit.customs.gov.cn/ccppserver/verifyCode/creator分析 01 下载gif图片 02 使用ddddocr逐帧识别 03 如指定字符串出现次数大于等于3&#xff0c;则认定为正确的识别结果 经验证&#xff0c;识别成功率95%源码 #!/usr…

【网络奇缘】——奈氏准则和香农定理从理论到实践一站式服务|计算机网络

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 失真 - 信号的变化 影响信号失真的因素&#xff1a; ​编辑 失真的一种现象&#xff1a;码间…

162TB全球卫星地图瓦片服务

这里再为你分享长光的另一款重量级产品&#xff0c;即《吉林一号国产化全球遥感底图瓦片服务》&#xff0c;你可以把它简单地理解为是一套全球离线地图服务系统。 为了行文方便&#xff0c;我们在本文暂且称之为“长光全球瓦片系统”。 《长光全球瓦片系统》参数 《长光全球…

UE5 C++(九)— 静态、动态加载类和资源

文章目录 前提静态加载类和资源静态加载资源静态加载类 动态加载类和资源动态资源动态加载类 前提 有必要说一下&#xff0c;静态这块内容加载时我用UE5.2版本出现调用静态资源不是显示问题&#xff0c;修改后容易崩。所以&#xff0c;这里不建议5.2版本&#xff0c;直接用5.3…

Python pandas 操作 excel 详解

文章目录 1 概述1.1 Series 和 DataFrame 2 常用操作2.1 创建 Excel&#xff1a;to_excel()2.2 读取 Excel&#xff1a;read_excel()2.2.1 header&#xff1a;标题的行索引2.2.2 index_col&#xff1a;索引列2.2.3 dtype&#xff1a;数据类型2.2.4 skiprows&#xff1a;跳过的行…