STM32窗口看门狗WWDG库函数的一点思考
WWDG当前计数器的值以及激活位和WWDG_CR这个寄存器相关。如下图所示:
而STM32f10x的库函数提供了两种设置WWDG_CR[0:6]位的方式。
- WWDG_SetCounter方法
#define BIT_Mask = 0x7F
/**
* @brief Sets the WWDG counter value.
* @param Counter: specifies the watchdog counter value.
* This parameter must be a number between 0x40 and 0x7F.
* @retval None
*/
void WWDG_SetCounter(uint8_t Counter)
{
/* Check the parameters */
assert_param(IS_WWDG_COUNTER(Counter));
/* Write to T[6:0] bits to configure the counter value, no need to do
a read-modify-write; writing a 0 to WDGA bit does nothing */
WWDG->CR = Counter & BIT_Mask;
}
该方法直接将传入的Counter作为WWDG_CR寄存器里的值。
- WWDG_Enable方法
#define CR_WDGA_Set 0x80
/**
* @brief Enables WWDG and load the counter value.
* @param Counter: specifies the watchdog counter value.
* This parameter must be a number between 0x40 and 0x7F.
* @retval None
*/
void WWDG_Enable(uint8_t Counter)
{
/* Check the parameters */
assert_param(IS_WWDG_COUNTER(Counter));
WWDG->CR = CR_WDGA_Set | Counter;
}
该方法将传入的Counter | 0x80(也就是WDGA为1)作为CR寄存器的值。
这样有一个潜在问题就是,我们在调用WWDG_Enable方法时,必须指定初始化的Counter。
我之前犯过这样的错误,我企图使用WWDG_Enable(0x80)来激活窗口看门狗,因为该函数名称是使能WWDG,但是发现板子一直在不断地重启,仔细分析发现调用WWDG_Enable(0x80)后WWDG->CR = CR_WDGA_Set | 0x80 = 0x80,于是WWDG_CR寄存器里的[0:6]变成了0,所以窗口看门狗疯狂复位。。
在此记录这个错误。。
还有一点需要注意的是,WWDG_SetCouner方法的最开始有一句
assert_param(IS_WWDG_COUNTER(Counter)); #define IS_WWDG_COUNTER(COUNTER) (((COUNTER) >= 0x40) && ((COUNTER) <= 0x7F)) 所以说该assert语句会确保输入的Counter为0x40到0x7F之间的数,调用该函数会将WWDG_CR寄存器里的第7位WDGA清0,导致窗口看门狗不工作。于是该函数只能在初始化时使用,,甚至可以不使用。。直接使用WWDG_Enable代替。
该WDGA位只能在复位时由硬件清零,但最好还是使用WWDG_Enable函数。
STM32窗口看门狗WWDG库函数的一点思考的更多相关文章
- stm32 窗口看门狗 WWDG
窗口看门狗WWDG其实和独立看门狗类似,它是一个7位递减计数器不断的往下递减计数,当减到一个固定值0x40时还不喂狗的话,产生一个MCU复位,这个值叫窗口的下限,是固定的值,不能改变 窗口看门狗(WW ...
- STM32之独立看门狗(IWDG)与窗口看门狗(WWDG)总结
一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...
- stm32 窗口看门狗学习(二)
窗口看门狗有一个提前唤醒中断,如果开启这个中断,那么当计数器的值达到0x40的时候就会产生这个中断. 上次的代码加一点就可以做这个实验了. void WWDG_Init(u8 tr,u8 wr,u32 ...
- STM32窗口看门狗和独立看门狗的区别,看门狗介绍及代码演示
一.介绍: STM32看门狗分为独立看门狗和窗口看门狗两种,其两者使用调条件如下所示, IWDG和WWDG两者特点如下图所示: 独立看门狗的手册资料: 窗口看门狗的手册资料: ...
- stm32 窗口看门狗学习(一)
什么是窗口看门狗? 1)独立看门狗 限制喂狗时间在0-x内,x由相关寄存器决定.喂狗的时间不能过晚. 2)窗口看门狗 之所以称为窗口就是因为其 ...
- 窗口看门狗 WWDG
一,窗口看门狗 二,喂狗注意事项 三,程序设计 1.检查复位状态,有助于观察当前工作的可靠性 /* Check if the system has resumed from WWDG reset ,检 ...
- 嵌入式02 STM32 实验09 独立/窗口看门狗
一.独立看门狗和窗口看门狗 看门狗:单片机系统在外界的干扰下会出现程序跑飞的现象导致死循环,或者崩溃,看门狗电路就是为了避免这种情况的发生,看门狗的作用就是在一定的事件内(通过计数器实现)若没有收到喂 ...
- STM32之看门狗(独立与窗口)
广大的互联网网友们,大家早上中午晚上好,我是某某某..对于狗..看过<忠犬八公>的我.无不深深的被狗的义气与灵气所震撼..我也觉得在所有mcu中用看门狗来形容让系统复位的功能是很恰当的.也 ...
- STM32之独立看门狗与窗口看门狗总结
一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...
随机推荐
- javascript正则总结
目录 1. 正则基础知识 2. 正则实例 3. 正则常见问题 4. 开发常用validate 5. 网上整理的正则 1. 正则基础知识 精确匹配: /test/ 匹配一类字符:匹配a,b,c任一字符/ ...
- 股票PE的应用
投资股票前,需要先分析公司,然后做估值.最后拿这估值对比现在它的现价,如果现价远低于估值,那就买入,因为这时候相当于打折价. 分析要怎么分析,估值要怎么估值 就像拿不同的旋头去维修不同的电器是一样的原 ...
- 为何我的网站http总是跳转https?能不能让http不跳转https?谈谈我遇到的坑和解决方案。
如题,突然想给我的个人网站加一个ssl,让它能够通过https访问. 但一顿操作猛如虎后,发现只能https访问了,手动输入http也会无限跳转到https. 现在说下我的排查思路和解决方案: 1. ...
- 最新 竞网java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.竞网等10家互联网公司的校招Offer,因为某些自身原因最终选择了竞网.6.7月主要是做系统复习.项目复盘.LeetCode ...
- javascript判断碰撞检测
javascript判断碰撞检测 点与矩形的碰撞检测 <pre> /** * * @param x1 点 * @param y1 点 * @param x2 矩形view x * @par ...
- Yarn 资源调度器
1. 概述 YARN 是一个资源调度平台,负责为运算程序提供服务器运算资源: YARN 由ResourceManager,NodeManager, ApplicationMaster 和 Contai ...
- Docker下搭建mongodb副本集
背景 有需求需要对mongodb做一个容灾备份.根据官网,发现mongodb最新版本(4.0)已经抛弃了主从模式而采用副本集进行容灾.副本集的优势在于:"有自动故障转移和恢复特性,其任意节点 ...
- TypeScript 高级类型
⒈交叉类型(Intersection Types) 交叉类型是将多个类型合并为一个类型. 这让我们可以把现有的多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性. 例如, Person &a ...
- WUSTOJ 1277: 小吉吉读书(Java)
1277: 小吉吉读书 题目 有一本 n 页的书,每天都看 ai 页,已知星期 k 买的书,问星期几能看完?更多内容点击标题. 分析 统计出一个星期能看 a 页,看了 a 页又会回到买书的那一 ...
- 1254: 盒子游戏(Java)
WUSTOJ 1254: 盒子游戏 参考博客 叶剑飞Victor的博客 盒子游戏--爱程序网 原理是从上面博客看的,我另外补充了几幅图,方便理解 Description 有两个相同的盒子,其中一个装了 ...