中科芯:<span style='color:red'>CKS32F4xx</span>系列产品窗口看门狗
  中科芯CKS32F4xx系列产品内部提供两个看门狗定时器单元,独立型看门狗IWDG(Independent Watchdog)和窗口型看门狗WWDG(Window Watchdog),本文主要介绍WWDG的应用,关于IWDG的详情,请参看我们的IWDG微课堂内容。  WWDG简介  通过前面的课程,我们知道IWDG独立看门狗的工作原理就是一个递减计数器在LSI时钟的驱动下不断的往下递减计数,当减到0之前如果没有刷新递减计数器的值(俗称喂狗),便会触发系统复位。  WWDG窗口看门狗也是一个递减计数器不断的往下递减计数。但和IWDG独立看门狗有四处不同:(1)IWDG由独立RC振荡器产生的LSI驱动,不受主时钟影响,但精度不高;WWDG由APB1分频时钟驱动,受主时钟影响,精度高;  (2)IWDG直接由VDD电压域供电,即使在MCU停止模式和待机模式下仍然能照常工作;  (3)IWDG计数器减到下限0时触发复位,WWDG计数器减到下限0x40时触发复位,下限值不同;(4)IWDG计数器只有复位下限值0,WWDG计数器不仅有复位下限0x40,还有一个复位上限X(用户设定),上限值与下限值之间形成一个复位窗口。WWDG计数器的值在减到上限X之前(窗口外)喂狗,同样也会产生复位。因此WWDG必须在窗口上限和窗口下限之间才可以喂狗,这是窗口看门狗的特殊之处。  WWDG详细介绍  1.WWDG功能框图解析  下图是窗口看门狗的功能框图,分4个部分进行说明:  ① WWDG时钟:窗口看门狗的时钟来自APB1时钟线分频出的PCLK1,最大42MHz,由RCC时钟控制器控制开启;  ② 计数器时钟和WWDG_CFR寄存器:CK计时器时钟 = PCLK1 / 4096,计数器时钟由CK计时器时钟经过预分频器分频得到,分频系数由配置寄存器WWDG_CFR的WWDGTB[1:0]控制,可以是0~3,因此计数器的时钟CNT_CK = PCLK1 / 4096 / (2^WWDGTB),进而可算出一个计数周期时间是T = 1 / CNT_CK;  ③ 计数器和WWDG_CR寄存器:WWDG的计数器是一个7位递减计数器,其值存放在控制器寄存器WWDG_CR的T[6:0]中,当该计数器的值从0x40变为0x3F时,产生复位,因此计数器的值只能是在0x7F~0x40之间,有效位是T[5:0]。WWDG_CR的WDGA位则是窗口看门狗的激活位,可由软件置1来启动WWDG,要注意WDGA一旦置1,只能在硬件复位后才能清零;  ④ 窗口上限值:WWDG的窗口下限值固定是0x40,但窗口上限值可以人为设定,具体可由WWDG_CFR配置寄存器的W[6:0]设置,其值必须大于0x40且小于0x7F,否则就失去了意义。  最后介绍的是状态寄存器(WWDG_SR)和EWI(Early wakeup interrupt)中断,该寄存器用来记录当前是否有提前唤醒EWI的中断标志。该寄存器仅有位0有效,其他都是保留位。当计数器值达到0x40时,此位由硬件置1,它必须通过软件写0来清除。在初始化WWDG时,一般会先通过软件写0清除一次。用户可以在EWI(Early wakeup interrupt)中断服务程序里进行一些必要的操作。  2.计算看门狗超时时间  窗口看门狗的时序图如下:  假设PCLK1时钟为42MHz,按照上述计算方法,可以得到WWDG的超时时间计算公式Twwdg =1 / PCLK1 x 4096 x 2^WDGTB x (T[5:0]+1),范围如下表:  3.WWDG库函数配置步骤  接下来AMEYA360电子元器件采购网将介绍如何驱动CKS32F4xx系列产品的WWDG工作。窗口看门狗相关的库操作函数在文件cks32f4xx_wwdg.c和对应的头文件cks32f4xx_wwdg.h中。具体配置步骤如下:  (1)使能WWDG时钟  不同于IWDG,IWDG有自己独立的32KHz时钟,不需要使能。而WWDG使用的PCLK1时钟需要先进行使能。  RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG 时钟使能  (2)设置WWDG窗口上限和WDGTB分频系数  void WWDG_SetWindowValue(uint8_t WindowValue);      //设置WWDG 窗口上限  void WWDG_SetPrescaler(uint32_t WWDG_Prescaler);    //设置WDGTB分频系数  (3)开启WWDG中断并分组  WWDG_ClearFlag(); //清除提前唤醒中断标志位  NVIC_Init();      //设置中断优先级  WWDG_EnableIT();  //开启窗口看门狗中断  (4)设置计数器初始值并使能看门狗  void WWDG_Enable(uint8_t Counter);  //设置计数器值并使能看门狗  完成以上4个步骤之后,我们就可以使用CKS32F4的窗口看门狗了。之后在程序里面就必须周期性的在窗口上下限范围内进行喂狗(一般调用WWDG_SetCounter函数),否则将导致系统复位。  4.WWDG的应用场景  WWDG一般被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。比如一个十分关键的程序段正常运行的时间是50ms以内,在运行完这个段程序之后紧接着进行喂狗,如果在规定的时间窗口内还没有喂狗,那就说明我们监控的程序并没有在预期的50ms内运行完成,可以认为出故障了或跑飞了,那么此时产生系统复位来解除这个故障,让程序重新运行。
关键词:
发布时间:2023-03-14 09:47 阅读量:3608 继续阅读>>
中科芯<span style='color:red'>CKS32F4xx</span>系列产品独立看门狗(IWDG)
  中科芯CKS32F4xx系列产品内部提供两个看门狗定时器单元,独立型看门狗IWDG(Independent Watchdog)和窗口型看门狗WWDG(Window Watchdog),它们在安全性、时间精确性和使用灵活性方面变现得非常优秀。两个看门狗定时器单元都可用来检测由软件错误引起的故障,具体表现为当计数器达到给定的超时值或未能在指定时间窗口内刷新计数器的值,会触发系统复位。  IWDG由MCU内部独立RC振荡器产生的低速时钟LSI(Low-speed Internal)驱动,因此即使主时钟发生故障它也仍然有效。而WWDG是由从APB1分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合,比如检测由程序跑飞或死机引起的故障。WWDG最适合那些需要看门狗在精确计时窗口时间内起作用的应用程序,比如检测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常运行序列而产生的软件故障。  本文Ameya360电子元器件采购网主要介绍IWDG的应用,关于窗口看门狗的详情,请参看我们的WWDG微课堂内容。  IWDG详细介绍  IWDG通俗的解释它是一个12位的递减计数器,当计数器的值从某个值一直减到0的时候,就会产生一个系统复位信号,即IWDG_RESET。如果在计数器没减到0之前,“刷新”计数器的值,就不会产生复位信号,“刷新”这个动作就是我们经常说的喂狗。IWDG直接由VDD电压域供电,即使在MCU停止模式和待机模式下仍然能照常工作。  1.IWDG功能框图解析  ① LSI时钟:IWDG的时钟由专门的32KHz低速时钟LSI驱动,即使主时钟发生故障它也仍然有效,非常独立。这里需要注意的是,由于RC振荡器的原理和特性(根据温度和环境会有一定的漂移),IWDG并不是严格准确的32KHz,只是我们在应用的时候,默认以32KHz的频率来估算。所以IWDG的定时时间并不一定非常精确,只适用于对时间精度要求比较低的场合。  ② 计数器时钟和IWDG_PR寄存器:递减计数器的时钟由LSI经过一个8位的预分频器得到,预分频器寄存器IWDG_PR的值决定分频因子,分频因子可以是:4、8、16、32、64、128、256。分频因子(假设为W)和IWDG_PR值的关系是W = 4 * 2^IWDG_PR。  ③ 状态寄存器IWDG_SR:顾名思义,IWDG_SR表示独立看门狗模块的当前状态,该寄存器只有位0:PVU(Prescaler Value Update)和位1:RVU(Reload Value Update)有效,且只能读不能写。PVU置1指示预分频值的更新正在进行中,更新完成后由硬件置0。RVU置1表示重装载值的更新正在进行中,更新完毕之后由硬件置0。只有当RVU或PVU等于0的时候才可以进行下一次更新操作。  ④ 重载寄存器IWDG_RLR:重载寄存器是一个12位的寄存器,里面装着要刷新到计数器的值,这个值的大小决定着独立看门狗的溢出时间。溢出时间Tout(s) = (4 * 2^IWDG_PR) / 32KHz * IWDG_RLR,根据这个公式,可以计算出当LSI为32KHz时,IWDG的理论溢出时间最小值和最大值分别是125us和32.768s。  ⑤ 递减计数器:IWDG的递减计数器是一个12位寄存器,设置范围是0~4095,一个计数器时钟计数器就减1,当计数器减到0时,IWDG会产生一个系统复位信号IWDG_RESET,让程序重新启动运行,如果在计数器减到0之前刷新计数器的值(重新写入新值),就不会产生复位信号,重新刷新计数器值的这个动作俗称喂狗。  ⑥ 密钥寄存器IWDG_KR:密钥寄存器IWDG_KR是独立看门狗IWDG的一个核心控制寄存器,主要有三种寄存器值对应三种控制效果。  2.IWDG库函数配置步骤  我们接下来介绍如何驱动CKS32F4xx系列产品的IWDG工作。独立看门狗相关的库操作函数在文件cks32f4xx_iwdg.c和对应的头文件cks32f4xx_iwdg.h中。具体配置步骤如下:  (1)解除寄存器写保护(向IWDG_KR写入0x5555)  IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);  //使能写权限  (2)设置IWDG预分频因子和重装载值  void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); //设置IWDG预分频值  void IWDG_SetReload(uint16_t Reload); //设置IWDG重装载值  此时可以计算出看门狗溢出时间,比如我们最终设定IWDG_PR值为 4,IWDG_RLR值500,那么就可以得到 Tout = (4 * 2^IWDG_PR) / 32KHz * IWDG_RLR = 64 / 32 * 500 = 1000ms,看门狗的溢出时间是1s,只要在一秒钟之内,写入0xAAAA到IWDG_KR,就不会触发看门狗复位(一秒内写入多次也是可以的)。这里需要提醒大家的是,由于看门狗的时钟不是准确的32KHz,所以喂狗时间应适当提前。  (3)重载计数值喂狗(向IWDG_KR写入0xAAAA)  IWDG_ReloadCounter();  //把重装载寄存器IWDG_RLR的值放到计数器中  (4)开启看门狗(向IWDG_KR写入0xCCCC)  IWDG_Enable();  //使能 IWDG  通过上面4个步骤,就可以启动CKS32F4的IWDG独立看门狗了,之后在程序里面就必须周期性的进行喂狗(一般会使用定时器定时的调用IWDG_ReloadCounter函数),否则将导致系统复位。注意IWDG在一旦开启,系统运行时就不能再被关闭,想要关闭,只能重启,并且重启之后要迅速关闭IWDG。
发布时间:2023-02-20 11:11 阅读量:3289 继续阅读>>

跳转至

/ 1

  • 一周热料
  • 紧缺物料秒杀
型号 品牌 询价
MC33074DR2G onsemi
BD71847AMWV-E2 ROHM Semiconductor
TL431ACLPR Texas Instruments
RB751G-40T2R ROHM Semiconductor
CDZVT2R20B ROHM Semiconductor
型号 品牌 抢购
STM32F429IGT6 STMicroelectronics
IPZ40N04S5L4R8ATMA1 Infineon Technologies
ESR03EZPJ151 ROHM Semiconductor
BU33JA2MNVX-CTL ROHM Semiconductor
TPS63050YFFR Texas Instruments
BP3621 ROHM Semiconductor
热门标签
ROHM
Aavid
Averlogic
开发板
SUSUMU
NXP
PCB
传感器
半导体
关于我们
AMEYA360商城(www.ameya360.com)上线于2011年,现有超过3500家优质供应商,收录600万种产品型号数据,100多万种元器件库存可供选购,产品覆盖MCU+存储器+电源芯 片+IGBT+MOS管+运放+射频蓝牙+传感器+电阻电容电感+连接器等多个领域,平台主营业务涵盖电子元器件现货销售、BOM配单及提供产品配套资料等,为广大客户提供一站式购销服务。