历史上的今天
返回首页

历史上的今天

今天是:2024年09月29日(星期日)

正在发生

2021年09月29日 | STM8S(105K4)使用笔记——窗口看门狗WWDG的基础配置

2021-09-29 来源:eefocus

0、窗口看门狗的使用

窗口看门狗基于CPU时钟fCPU运行,窗口看门狗实现基于一个递减计数器。


若fCPU运行正常,当主程序发生错误时,无法重置看门狗计数器,窗口看门狗将会产生复位标志位并重启。


由于窗口看门狗基于fCPU运行,当MCU进入停机模式或活跃停机模式时,窗口看门狗计数将会停止。


程序需在递减计数器的T6位变为0之前刷新递减计数器,防止看门狗电路产生复位信号;同时,程序需要避免在7位的递减计数器数值达到窗口寄存器数值之前刷新递减计数器,否则看门狗电路将产生复位信号。


窗口看门狗的递减计数器是自由运行计数器,即使未开启看门,它仍然不断地递减计数。当看起看门狗时,必须设置T6位以避免立刻产生复位


1、与窗口看门狗相关的选项字节

WWDG_HW:窗口看门狗激活方式,默认值为0。


0x4805: OPT3[1];

0x4806: NOPT3[1];


当WWDG_HW选项字节为0时,代表选择了软件看门狗,在系统复位后看门狗处于关闭状态。窗口看门狗需要通过设置WDGCR寄存器中的WDGA位开启窗口看门狗,此后在下次复位之前将不能关闭看门狗。


当WWDG_HW选项字节为1时,代表选择了硬件看门狗,看门狗将始终开启,而WDGA位将不起作用。


WWDG_HALT:当芯片进入停机模式时窗口看门狗的复位动作,默认值位0。


0x4805: OPT3[0];

0x4806: NOPT3[0];


当WWDG_HALT选项字节为0时,如果窗口看门狗使能,当芯片进入停机模式时不产生复位。在进入停机模式时


当WWDG_HALT选项字节为1时,如果窗口看门狗使能,当芯片进入停机模式时会产生复位。


2、窗口看门狗时序图

当CPU时钟fCPU为16MHz时,看门狗计数器(CNT)中的6位数值,与以毫秒为单位的超时时间线性关系表可见下图。

在这里插入图片描述

已知窗口看门狗每过(大约)12288个fCPU周期递减一次。看门狗计数器单步所需时长计算公式为:

step = 12288/fCPU

例如,fCPU = 8Mhz时,

step = 12288/8000000 = 0.001536s = 1.536ms,即一步为1.536ms

WWDG_CR寄存器的T[6:0]由0x7F递减到0x40共63步。窗口看门狗的复位时间上限为step × 64。


若重置看门狗计数器时,WWDG_CR的T[6:0]位大于WWDG_WR[6:0],看门狗将产生复位信号。窗口看门狗的时序图如下图。

在这里插入图片描述

3、窗口看门狗的配置

窗口看门狗的时钟由CPU时钟fCPU提供,因此在使用窗口看门狗前,请配置合适的CPU时钟。


3.1、 通过官方库“stm8s_wwdg”提供的函数初始化WWDG

/**

  * @brief WWDG Initialization Function

  * @param None

  * @retval None

  */

static void _WWDG_Init(void)

{

  /* WWDG 配置: WWDG 的时钟为 SYSCLK = fCPU */

  /* WWDG 的超时时间为 maxSetCounterTime */

  /* Watchdog 窗口 = (COUNTER_INIT - 63) * 1 step

                   = 64 * (12288 / fCPU)

                     = maxSetCounterTime s

  */

  /* 禁止复位窗口 = (COUNTER_INIT - WINDOW_VALUE) * 1 step

                        =  (COUNTER_INIT - WINDOW_VALUE) * (12288 / fCPU) 

                        =  minSetCounterTime s

   */

  /* 禁止复位窗口范围为 0.0 ms 到 minSetCounterTime ms

  Watchdog 窗口范围为 minSetCounterTime ms to maxSetCounterTime ms

  如果在禁止复位窗口进行复位,将产生一个复位信号。

  如果在Watchdog 窗口范围进行复位,将不产生复位信号。

  如果在WWDG向下计数器小于63进行复位,将产生一个复位信号。 */

  WWDG_Init(COUNTER_INIT, WINDOW_VALUE);

}


例子(获得最大范围窗口范围):


fCPU = 16Mhz;

COUNTER_INIT = 127;

WINDOW_VALUE = 127;

#define WINDOW_VALUE 127

#define COUNTER_INIT 127


/**

  * @brief WWDG Initialization Function

  * @param None

  * @retval None

  */

static void _WWDG_Init(void)

{

  /* WWDG 配置: WWDG 的时钟为 SYSCLK = 16Mhz = 16 000 000 hz */

  /* WWDG 的超时时间为 49.152 ms */

  /* Watchdog 窗口 = (127 - 63) * 1 step

                   = 64 * (12288 / 16 000 000)

                     = 49.152 ms

  */

  /* 禁止复位窗口 = (127 - 127) * 1 step

                        =  (127 - 127) * (12288 / 16 000 000) 

                        =  0.0 ms

   */

  /* 禁止复位窗口范围为 0.0 ms 到 0.0 ms

  Watchdog 窗口范围为 0.0 ms to 49.152 ms

  如果在禁止复位窗口进行复位,将产生一个复位信号。

  如果在Watchdog 窗口范围进行复位,将不产生复位信号。

  如果在WWDG向下计数器小于63进行复位,将产生一个复位信号。 */

  WWDG_Init(COUNTER_INIT, WINDOW_VALUE);

}


3.2、 通过寄存器操作初始化WWDG

/**

  * @brief WWDG Initialization Function

  * @param None

  * @retval None

  */

static void _WWDG_Init(void)

{

  /* WWDG 配置: WWDG 的时钟为 SYSCLK = fCPU */

  /* WWDG 的超时时间为 maxSetCounterTime */

  /* Watchdog 窗口 = (Counter- 63) * 1 step

                   = 64 * (12288 / fCPU)

                     = maxSetCounterTime s

  */

  /* 禁止复位窗口 = (Counter- WindowValue) * 1 step

                        =  (Counter- WindowValue) * (12288 / fCPU) 

                        =  minSetCounterTime s

   */

  /* 禁止复位窗口范围为 0.0 ms 到 minSetCounterTime ms

  Watchdog 窗口范围为 minSetCounterTime ms to maxSetCounterTime ms

  如果在禁止复位窗口进行复位,将产生一个复位信号。

  如果在Watchdog 窗口范围进行复位,将不产生复位信号。

  如果在WWDG向下计数器小于63进行复位,将产生一个复位信号。 */


  // 复位WWDG的WR寄存器的值,防止使能后,窗口看门狗立即产生复位信号。

  WWDG->WR = 0x7F;


  // 使能窗口看门狗,并配置计数器值。

  WWDG->CR = (uint8_t)((uint8_t)(0x80| 0x40) | (uint8_t)Counter);


  // 配置窗口看门狗窗口值。

  WWDG->WR = (uint8_t)((uint8_t)(~0x80) & (uint8_t)(0x40| WindowValue));

}


请确保窗口看门狗的窗口值WindowValue <= 0x7F,否则WWDG->WR会溢出。


4、WWDG寄存器简介

CR控制寄存器

在这里插入图片描述

WR窗口寄存器

在这里插入图片描述

推荐阅读

史海拾趣

GE Solid State公司的发展小趣事
在某些无法直接观察光线的环境中,如暗室或夜间拍摄时,可听的曝光表电路提供了一种便捷的曝光判断方式。
灿科盟(Ckmtw)公司的发展小趣事

面对国内外市场变化及成本增长的压力,灿科盟在2012年决定在江西省九江市设立新的生产基地。这一基地主要负责产品的生产组装,有效降低了生产成本,提高了交货速度。同时,公司也加强了与当地供应商的合作,确保原材料的稳定供应。

City_Technology公司的发展小趣事

随着市场的不断变化和需求的日益增长,City Technology并未满足于已有的成就。在1980年代末至1990年代初,公司积极扩展产品线,相继开发了电化学有毒气体传感器和可燃气体传感器。这些新产品的推出,不仅丰富了公司的产品线,也进一步巩固了其在气体传感领域的领先地位。同时,公司还不断对已有产品进行优化升级,以满足客户日益多样化的需求。

FCT electronic公司的发展小趣事

随着技术的不断成熟和市场需求的增长,FCT electronic公司开始寻求市场扩张和多元化发展。公司决定将产品线拓展至刚挠结合板和挠性加热器领域,以满足不同客户的需求。同时,FCT electronic公司还积极开拓国际市场,通过参加国际展览、与海外企业合作等方式,逐渐在全球电子行业中树立了品牌形象。

常州能动(ENDRIVE)公司的发展小趣事

随着产品的不断成熟,常州能动开始积极拓展市场。公司参加各类电子展会,与国际知名企业建立合作关系,不断提升品牌影响力。同时,公司还加大了对市场营销的投入,通过广告、公关等手段提升品牌知名度。这些努力使得常州能动逐渐在电子行业中崭露头角,成为了一家备受瞩目的企业。

ELINA INDEK公司的发展小趣事

因美纳(Illumina)公司成立于2000年,起初是一家专注于基因测序技术的小型企业。在创始人Jay Flatley的领导下,公司成功研发出了一系列高性能、低成本的基因测序仪器,使得基因测序技术从昂贵的实验室研究工具转变为广泛应用的医疗诊断工具。这一技术突破不仅为因美纳赢得了市场份额,也为整个医疗行业带来了革命性的变化。

问答坊 | AI 解惑

预热式沐浴水箱水位自控器

此电路结构简单,取材容易,性能可靠,操作方便。工作原理:假设水箱内没有水,需要进水预热,只要将K1合上(见下图),则绿色指示灯亮,电磁阀经J1-2常闭触点得电而开阀进水,待水箱内水升至平面S1时,BG1、BG2组成的复合管得正向偏压而驱动继电 ...…

查看全部问答>

fopen打开的文件,如何实现当文件达到一定大小后,重头进行覆盖写入

我的那个文件要求记录5000条记录,超过5000条时,重头开始写入,用新的记录覆盖掉旧的记录。fopen就那几种打开方式,我试了下,好像都不支持。如果以“a+“的方式打开,然后用seek去定位,然后再写入也不行,仍然会加到文件尾。各位有没有什么好的 ...…

查看全部问答>

usb驱动问题!!!dispatch_level在callusbdi下不可用!!急急急!!

callusbdi windows wdm设备驱动程序开发指南(chris cant) 在dispatch_level调用出现死等,但是在passive_level正常 书上也说只能在Passive_level调用,是什么原因呢,怎样才能在dispatch_level调用呢? 高手快来啊 NTSTATUS CallUSBDI(IN PDEV ...…

查看全部问答>

DOS下启用图形加速卡.

怎样在DOS下不用VGA,启用图形加速卡呢?…

查看全部问答>

【MSP430共享】晶化箱温度控制系统设计

设计了一种基于Ms P 4 3 0处理器的温控系统, 介绍了系统主要硬件, 重点介绍了温度控制系统及其算法的实现, 这里采用的是史密斯一 模糊自调整 P I D控制系统, 该系统通过对传统的史密斯预估器进行改良, 将该模糊自调整P I D控制器引入史密斯控 ...…

查看全部问答>

12864读函数问题

YM12864R读函数为什么读不出正确的数据,总是0xff,调了好久都没弄好,网上也有人有同样的问题,但是好像都没有解决,急求帮助uchar LcdRdata(void){ uchar getdata; RS=1; WRD=1; P0=0xff; E=0; E=1; delay(100); getdata=P0; E=0; return getdata ...…

查看全部问答>

易电源游戏看做事态度

我在早上9点半玩易电源拼图游戏,发现电容电感问题,明显是错误的,而且后来更正过来了,那么在之前得100分的朋友们,你们难道没有发现这个简单的错误吗?如果发现了,为什么还跟着错?难道就为了那100分?为了奖品机会? 作为技术人员,发现问题 ...…

查看全部问答>

瑞萨RL78开发工具_原厂的培训教程

瑞萨RL78开发工具_原厂的培训教程 …

查看全部问答>

基于安卓/苹果的物品防盗管家,用于对随身箱包和贵重物品进行管理

利用手机作为监控终端,既简便又易用,同时如果手机被人拿走的话,通讯断开,手机和开发模块都会报警。 1. 通过蓝牙与手机进行数据互联,若发送报警信息或是“心跳同步”时,通讯没有相应,则发送方进行报警 2. 检测光线有强烈变化时,进行报警 ...…

查看全部问答>

晒WEBENCH设计的过程+DC8-16V转5V/1A车载充电器的设计过程

本帖最后由 a736015 于 2014-5-29 17:14 编辑 一、设计要求:输入DC8-16V,输出5V/1A二、应用:车载手机平板电脑充电器三、设计过程根据论坛窗口或进入TI在线设计工具页面 点击后进入到登陆(注册)界面 注册TI账号后进入WEBENCH在线设计工具在 ...…

查看全部问答>