历史上的今天
返回首页

历史上的今天

今天是:2024年11月01日(星期五)

正在发生

2021年11月01日 | stm32专题三十四:独立看门狗 IWDG

2021-11-01 来源:eefocus

独立看门狗简介

IWDG结构框图

(1)独立看门狗时钟


独立看门狗的时钟由独立的 RC 振荡器 LSI 提供, 即使主时钟发生故障它仍然有效,非常独立。 LSI 的频率一般在 30~60KHZ 之间,根据温度和工作场合会有一定的漂移,我们一般取 40KHZ,所以独立看门狗的定时时间并一定非常精确,只适用于对时间精度要求比较低的场合。


(2)计数器时钟

实际的计数频率为:

CK CNT = 40 000 / (4 * 2^{PRV}) Hz

(3)计数器

(4)重装载寄存器


重装载寄存器是一个 12 位的寄存器,里面装着要刷新到计数器的值,这个值的大小决定着独立看门狗的溢出时间。

T_O_U_T = (1 / CKCNT)*RLV = RLV*(4*2^{PRV}) / 40000 left ( s right )

(5)键寄存器

寄存器说明:

(6)状态寄存器:

如何使用IWDG

RCC复位描述


STM32F10xxx支持三种复位形式,分别为系统复位、上电复位和备份区域复位。


1 系统复位

2 电源复位

3 备份域复位

*************************************************************************************************************************


如果独立看门狗 IWDG 产生复位,我们可以从RCC复位和时钟控制寄存器中获取复位原因:

以下是各种复位标志位:

代码分析


标准库中,关于 IWDG 总共就只有以下几个函数,都是配置或读取寄存器,非常简单,就不看源码了:


/** @defgroup IWDG_Exported_Functions

  * @{

  */

 

void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);

void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);

void IWDG_SetReload(uint16_t Reload);

void IWDG_ReloadCounter(void);

void IWDG_Enable(void);

FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG);

常用的独立看门狗配置 和喂狗操作:


/*

 * 设置 IWDG 的超时时间

 * Tout = prv/40 * rlv (s)

 *      prv可以是[4,8,16,32,64,128,256]

 * prv:预分频器值,取值如下:

 *     @arg IWDG_Prescaler_4: IWDG prescaler set to 4

 *     @arg IWDG_Prescaler_8: IWDG prescaler set to 8

 *     @arg IWDG_Prescaler_16: IWDG prescaler set to 16

 *     @arg IWDG_Prescaler_32: IWDG prescaler set to 32

 *     @arg IWDG_Prescaler_64: IWDG prescaler set to 64

 *     @arg IWDG_Prescaler_128: IWDG prescaler set to 128

 *     @arg IWDG_Prescaler_256: IWDG prescaler set to 256

 *

 * rlv:预分频器值,取值范围为:0-0XFFF

 * 函数调用举例:

 * IWDG_Config(IWDG_Prescaler_64 ,625);  // IWDG 1s 超时溢出

 */

 

void IWDG_Config(uint8_t prv ,uint16_t rlv)

{

// 使能 预分频寄存器PR和重装载寄存器RLR可写

IWDG_WriteAccessCmd( IWDG_WriteAccess_Enable );

// 设置预分频器值

IWDG_SetPrescaler( prv );

// 设置重装载寄存器值

IWDG_SetReload( rlv );

// 把重装载寄存器的值放到计数器中

IWDG_ReloadCounter();

// 使能 IWDG

IWDG_Enable();

}

 

 

// 喂狗

void IWDG_Feed(void)

{

// 把重装载寄存器的值放到计数器中,喂狗,防止IWDG复位

// 当计数器的值减到0的时候会产生系统复位

IWDG_ReloadCounter();

}

然后在主函数中进行测试,如果 看门狗复位,那么就能够检测到相应的复位标志。


main.c


int main(void)

{

// 配置LED GPIO,并关闭LED

LED_GPIO_Config();

 

Delay(0X8FFFFF);

/*------------------------------------------------------------*/

/* 检查是否为独立看门狗复位 */

  if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET)

  {

    /* 独立看门狗复位 */

    /*  亮红灯 */

    LED_RED;

 

    /* 清除标志 */

    RCC_ClearFlag();

/*如果一直不喂狗,会一直复位,加上前面的延时,会看到红灯闪烁

在1s 时间内喂狗的话,则会持续亮绿灯*/

  }

  else

  {

    /*不是独立看门狗复位(可能为上电复位或者手动按键复位之类的) */

    /* 亮蓝灯 */

    LED_BLUE;

  }

/*--------------------------------------------------------------*/

// 配置按键GPIO

Key_GPIO_Config();

// IWDG 1s 超时溢出

IWDG_Config(IWDG_Prescaler_64 ,625);

//while部分是我们在项目中具体需要写的代码,这部分的程序可以用独立看门狗来监控

    //如果我们知道这部分代码的执行时间,比如是500ms,那么我们可以设置独立看门狗的

//溢出时间是600ms,比500ms多一点,如果要被监控的程序没有跑飞正常执行的话,那么

//执行完毕之后就会执行喂狗的程序,如果程序跑飞了那程序就会超时,到达不了喂狗

//的程序,此时就会产生系统复位。但是也不排除程序跑飞了又跑回来了,刚好喂狗了,

//歪打正着。所以要想更精确的监控程序,可以使用窗口看门狗,窗口看门狗规定必须在

//规定的窗口时间内喂狗。

while(1)                        

{

// 这里添加需要被监控的代码,如果有就去掉按键模拟喂狗,把按键扫描程序去掉

//--------------------------------------------------------------------------

if( Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY_ON  )

{

// 喂狗,如果不喂狗,系统则会复位,LED1则会灭一次,如果在1s

// 时间内准时喂狗的话,则绿会常亮

IWDG_Feed();

//喂狗后亮绿灯

LED_GREEN;

}   

}

//---------------------------------------------------------------------------

}

推荐阅读

史海拾趣

博林(BL)公司的发展小趣事

在竞争激烈的电子市场中,博林公司始终坚持品质至上的原则。公司建立了严格的质量控制体系,从原材料采购到生产制造的每一个环节都进行严格把控。同时,博林公司还注重产品的售后服务,为客户提供全方位的支持和解决方案。正是凭借着卓越的品质和完善的服务,博林公司的品牌形象逐渐深入人心,赢得了广大客户的信赖和支持。

ACT [Advanced Crystal Technology]公司的发展小趣事

随着国内市场的日益饱和,博林公司开始积极拓展海外市场。公司制定了详细的国际化战略,通过参加国际展览、建立海外销售渠道等方式,不断提升品牌知名度和影响力。同时,博林公司还积极寻求与国际知名企业的合作机会,通过技术合作和市场共享等方式,实现互利共赢。这些举措使得博林公司的市场份额不断扩大,国际竞争力日益增强。

Advanced Illumination Inc公司的发展小趣事

在发展过程中,Ai公司积极寻求与行业内外的合作伙伴建立合作关系。公司与多家知名企业签订了战略合作协议,共同开发新产品、拓展新市场。同时,公司还与其他科研机构、高校等进行合作,引进先进技术和人才,为公司的创新发展提供了有力支持。这些合作不仅为公司带来了更多的商业机会,也促进了整个行业的进步与发展。

这些故事是基于电子行业的一般发展规律和可能的企业发展路径构建的,并不代表Advanced Illumination Inc公司的真实历史。如需了解该公司的真实发展情况,建议查阅相关资料或访问其官方网站。

Blue Creation公司的发展小趣事

在市场竞争日益激烈的背景下,Blue Creation公司意识到单打独斗难以立足。于是,公司积极寻求与其他企业建立合作关系。通过与一家知名芯片制造商的深度合作,Blue Creation成功将其电源管理技术集成到对方的芯片产品中,双方共同开拓市场,实现了互利共赢。这一举措不仅提升了Blue Creation的知名度,也为其带来了稳定的收入来源。

AEL [AEL Crystals Ltd]公司的发展小趣事

为了提高产品的可用性和客户服务水平,AEL Crystals实施了全面的库存管理政策。公司通过优化库存结构和加强库存监控,确保了产品的及时供应和快速响应客户需求。此外,AEL Crystals还不断提升客户服务质量,为客户提供专业的技术支持和售后服务。这些举措进一步增强了客户对公司的信任和忠诚度。

这五个故事展示了AEL Crystals Ltd公司在电子行业中的发展历程和取得的成就。从创立初期的艰难起步到如今的行业佼佼者,AEL Crystals凭借其卓越的技术、全球化的战略布局、持续的创新以及优质的客户服务赢得了广泛的市场认可。未来,我们有理由相信AEL Crystals将继续保持其行业领先地位,并为电子行业的繁荣发展做出更大的贡献。

General Cable公司的发展小趣事
可能是由于电源噪声、外部干扰或电路元件老化等原因导致的。解决方法包括优化电源设计、增加滤波电路、更换老化元件等。

问答坊 | AI 解惑

STM32F103Z核心板,板载512K SRAM/64M NAND flash

http://item.taobao.com/auction/item_detail-db2-2494f2cca7bcf576c2eb50164b94ab8e.htm QQ:21578936 资源: 1:REV1.1版 STM32F103Z核心板,板载512K SRAM/64M NAND flash 2:引出所有I/O口 3:独立BOOT跳针 4:20PIN标准JTAG接口(支持JTA ...…

查看全部问答>

VS2005 Wince5.0 模拟器 连接的问题!

   我这个问题好像是新手必问的问题。     在VS2005,没有Wince5.0的仿真程序。现在我要做个Wince5.0 的应用程序,想调测,就必须先接设备。 接设备我是通过ActiveSync4.5做的。     问题是我习惯开发时每一段代 ...…

查看全部问答>

一种电子元件的特性讲解

  该TDA3560设计为一个3毫米功率LED具有某些特点:(1)高通量输出;(2)超薄;(3)较低的热阻;(4)低功耗;(5)在反射的荧光粉转换的氮化铟镓蓝色发光芯 片到理想的白色;(6)典型的色度坐标x = 0.30,y = 0.29根据CIE1931;(7)本产品本身将保持在符合R ...…

查看全部问答>

如何查看自己回复的话题?

请教大家:论坛有米有查看“我的回复”的功能? 找了很久都没找到哦………

查看全部问答>

请教:在掌握51的基础上,进一步提高是学习ARM呢还是DSP好点呢?学习他们有什么分别?

我想请教大家,现在我对51有一定掌握了,想进一步提高一下,DSP和ARM学习那个好点呢?他们的应用前景怎样?学习起来难易程度又如何?我本人偏向DSP,DSP算法是 精髓,有的研究。这只是我个人看法,不知具体他们的情况如何,还望大家不吝赐教。…

查看全部问答>

【团购】FSL USB学习板(05月18日-06月18日)

USB学习板做完了,最近做了批,大家如果需要可以参与本次团购活动。   团长备案号: EEWORLD_005 团长承诺:我已经详细阅读过论坛自发团购规则,并愿意严格遵照此规则执行,愿意为大家提供货真价实、物美价廉的产品。 【征询贴】链接:ht ...…

查看全部问答>

keil 下编译LM3S9B96官方例程boot_eth出错

官方提供的StellarisWare\\boards\\dk-lm3s9b96\\boot_eth\\ 使用keil的工程编译,出现下面提示: Build target \'boot_eth\'User command #1: armcc --device DLM -I . -E -o bl_config.inc ..\\..\\..\\boot_loader\\bl_config.c--- Error: User ...…

查看全部问答>

发现LaunchPad资料文档的一个疑似错误,求证!

最近学习LaunchPAD,在看到这个文档的时候(文档名称Getting Started with the MSP430 LaunchPad--- Student Guide and Lab Manual), 发现一个疑似错误,发帖求证一下! 该文档的第36页, 我用的版本是 好像之前的版本也有这 ...…

查看全部问答>

新手求教。除了传统的PWM输入捕获方式测PWM周期和占空比,还有其他方法可以实现么?

例如,信号输入Pin口外部中断exit(双边沿),开定时器TIM3,不同边沿中断时,记下不同的TIM3->cnt的值。 不知道这样可以否? 因为遇到了非TIMx输入通道的信号测频率和占空比问题,所以想到了这个方法。 请教下各位大大! 还有其他更好的方法么 ...…

查看全部问答>

如何让电源为电池充电提供最大功率

如何让电源为电池充电提供最大功率转自德州仪器 \0\0\0eeworldpostqq…

查看全部问答>