历史上的今天
返回首页

历史上的今天

今天是:2024年11月04日(星期一)

正在发生

2021年11月04日 | STM32F103ZET6 — IWDG

2021-11-04 来源:eefocus

简介

首先简单介绍一下看门狗的作用。


看门狗用来防止系统在运行过程中遇到的各种异常情况,而导致程序不能继续运行。可以理解为,看门狗是一种可以挽救系统进入异常进而系统无法继续工作的保障。当系统启动看门狗功能后,计数器开始计数,在计数器完成计数的时刻之前,系统程序必须“喂狗”,使得让看门狗知道系统依然“活着”。如果到了指定时间,系统没有去“喂狗”,则看门狗产生一个复位信号,系统从 Reset 重新运行。


从系统实现的角度上来看,看门狗其实就是一个计数器而已,当计数的个数达到终点时刻,产生复位信号。若计数未到达终点,软件干涉,进行喂狗的行为,则计数器重新计数,不会产生复位。


STM32 拥有两种类型的看门狗:独立看门狗(IWDG)和窗口看门狗(WWDG)。


这一篇主要介绍独立看门狗的用法 IWDG。


时钟

STM32 独立看门狗时钟由 LSI 低频 RC 震荡提供。LSI时钟频率大约40kHz(在30kHz和60kHz之间)。所以,如果要使用这个玩意的话,是不是应该像其他外设一样,需要手动先开启 LSI 时钟呢?


答案是,可以这样做,也可以不!


因为:

可以看到,LSI 将会被强制开启,故,只要启动开门狗,则 LSI 将会强制被开启,这就意味着,我们不需要手动去开启 LSI 时钟。


工作原理

IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。


IWDG 含自由运行的递减计数器

时钟由独立的RC振荡器提供(可在停止和待机模式下工作)

看门狗被激活后,则在计数器计数至0x000时产生复位


结构框图如图所示:

主要包含的一个:


IWDG_PR 的预分频器,将来自 LSI 的 40kHZ 的时钟进行分频处理。


IWDG_RLR 重装载寄存器,即计数器的递减起始的值


IWDG_KR 键寄存器负责执行命令:


    1. 写入0xAAAA 代表喂狗


    2. 写入0x5555表示允许访问IWDG_PR和IWDG_RLR寄存器


    3. 写入0xCCCC,启动看门狗工作


 


配置过程

所以对 IWDG 的使用和配置过程如下所示:


1. 开启 LSI 时钟,并等待其有效


2. 写 0x5555 到 IWDG_KR,允许访问其他寄存器。


3. 写预分频器的值为 4(即 64分频)


4. 配置计时器的值为 625 (产生 1s 的 Timeout)


5. 写入 0xAAAA 到 IWDG_KR 避免产生复位


6. 写入 0xCCCC 到 IWDG_KR,开启看门狗功能。


注意:使用往 IWDG_KR 写入 0xAAAA 来实现喂狗功能,若不定期喂狗,则产生复位中断


 


代码

/*

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

 ******************* IWDG Function Defination *******************

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

*/

#define SK_IWDG_PER             4   // 64 Prescaler divider to 625

#define SK_IWDG_CNT             625 // 1s timeout

 

void SK_IWDGInit(uint16_t prer, uint16_t wdg_value)

{

    // First Open LSI Clock for IWDG

    RCC_LSICmd(ENABLE);

    while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);

 

    // If use IWDG, LSI will be opened force

    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

    // Set Prescaler

    IWDG_SetPrescaler(prer);

    // Set reload value

    IWDG_SetReload(wdg_value);

    // Set 0xAAAA To make sure not go into reset

    IWDG_ReloadCounter();

    // Enable WDG

    IWDG_Enable();

}

 

void SK_IWDGFeed(void)

{

    IWDG_ReloadCounter();

}

推荐阅读

史海拾趣

Ercona Corp公司的发展小趣事

Ercona Corp在电子行业中的发展故事之一:技术突破与市场布局

Ercona Corp是一家在电子行业中迅速崛起的公司,其发展历程中不乏技术突破与市场布局的故事。在成立初期,Ercona就致力于半导体技术的研发,成功开发出一种高性能、低功耗的芯片,这一技术突破为公司在市场上赢得了良好的声誉。随后,Ercona利用这一技术优势,积极拓展市场,与多家知名电子产品制造商建立了合作关系,其芯片产品被广泛应用于智能手机、平板电脑等消费电子产品中。

Ercona Corp在电子行业中的发展故事之二:国际合作与品牌提升

在全球化的大背景下,Ercona积极寻求国际合作,与国际知名半导体公司达成战略合作,共同研发新产品。这一举措不仅提升了Ercona的技术实力,也扩大了其品牌影响力。通过与合作伙伴的共同努力,Ercona成功推出了一系列具有国际竞争力的电子产品,进一步巩固了其在市场中的地位。

Ercona Corp在电子行业中的发展故事之三:创新驱动与产品多元化

创新是Ercona持续发展的核心动力。公司不断投入研发资金,推动产品创新,逐步实现产品多元化。除了传统的半导体芯片外,Ercona还涉足了物联网、智能家居等新兴领域,推出了一系列具有创新性的电子产品。这些新产品的推出不仅丰富了公司的产品线,也为公司带来了新的增长点。

Ercona Corp在电子行业中的发展故事之四:人才战略与团队建设

人才是企业发展的重要保障。Ercona深知这一点,因此在发展过程中始终重视人才战略和团队建设。公司积极引进优秀人才,建立了一支高素质的研发团队。同时,Ercona还注重员工的培养和发展,为员工提供广阔的成长空间和发展机会。这些措施为公司的持续发展提供了坚实的人才保障。

Ercona Corp在电子行业中的发展故事之五:社会责任与可持续发展

作为一家有社会责任感的企业,Ercona在发展过程中始终关注环境保护和社会公益。公司积极推行绿色生产,采用环保材料和节能技术,减少生产过程中的污染排放。同时,Ercona还积极参与社会公益活动,关注弱势群体,为构建和谐社会贡献自己的力量。这些举措展现了公司的良好形象和社会责任感,也为公司的可持续发展奠定了基础。

CSR plc(剑桥硅晶无线电)公司的发展小趣事

CSR plc的创始人们怀揣着对音频技术的热情与追求,在剑桥这个科技创新的摇篮中开始了他们的征程。初创时期,公司的主要业务集中在音频领域,他们研发出了一系列创新的音频技术,为当时的移动设备市场带来了前所未有的听觉体验。这些技术的成功应用,不仅让CSR plc在行业内崭露头角,也为公司的后续发展奠定了坚实的基础。

Aavid Niagra公司的发展小趣事

为了拓展市场份额,Aavid Niagra公司开始实施全球化战略布局。公司先后在多个国家和地区设立了生产基地和研发中心,以便更好地服务当地客户。同时,公司还积极参与国际电子行业的交流与合作,不断提升自身的国际影响力。全球化战略的实施为公司带来了更多的发展机遇,也使其在全球电子散热市场上占据了重要地位。

CANDD公司的发展小趣事

为了进一步提升品牌影响力和市场份额,CANDD公司开始实施国际化战略。公司首先在欧洲市场设立了分公司,并成功打开了欧洲市场的大门。随后,公司又进军亚洲市场,通过与当地企业的合作,逐渐在亚洲市场站稳了脚跟。随着国际化战略的深入实施,CANDD公司的品牌知名度和市场份额不断攀升。

Compensated Devices Inc公司的发展小趣事

随着全球环保意识的日益增强,电子行业对环保的要求也越来越高。CDI积极响应这一趋势,将环保理念贯穿于产品研发、生产和销售的全过程。公司推出了一系列绿色环保型电子元件,并采用了环保材料和生产工艺。这一举措不仅赢得了客户的认可,还为公司的可持续发展奠定了坚实基础。

遨格芯微(AGM)公司的发展小趣事

除了在智能手机和IoT市场取得突破外,AGM还深耕工业和消费类市场。公司自主研发并量产的可编程逻辑SoC产品系列广泛应用于工业和消费类市场,满足了客户对高容积率、低成本、高品质的市场需求。通过不断的技术创新和产品优化,AGM在工业和消费类市场逐渐形成了自己的竞争优势,并赢得了越来越多客户的认可和信赖。

问答坊 | AI 解惑

华为公司-模拟电路讲义(下)

这是下册的,发给大家一起分享…

查看全部问答>

JSCC精研伺服马达

各位工控同仁:我有一台JSCC精研私服马达内部电路烧坏,那位可以提供该马达资料,不胜感激!…

查看全部问答>

SetSystemPowerState实现...

在mpm.h下有#define SetSystemPowerState         WIN32_DEV_CALL(DWORD,  19,  (LPCWSTR pState, DWORD StateFlags, DWORD Options)),然后希望大家帮我讲讲``谢谢…

查看全部问答>

nRF905的编程实例哪位高手有啊?

    nRF905无线收发芯片在与单片机连接时怎么编写程序啊?好像很难,以前没用过这给芯片,请知道的帮帮忙!…

查看全部问答>

关于winio的使用

请问用vc调用winio后具体该怎么只用,网上好像只有怎么调用。…

查看全部问答>

关于一个硬件中断映射到几个系统中断和几个硬件中断映射到一个系统中断上的问题

不怎么会写驱动 现在有如上问题. 1,是否可以将一个硬件中断映射到几个系统中断? 2,如果可以怎么实现. 3,我有一个外设使用4个外部中断,现在想共享一个中断,其他流做它用,该怎么处理?假设有A,B,C,D 我现在把硬件中断1,影射到A的系统中断,但 ...…

查看全部问答>

【招聘成都】国内某大型通讯设备商成都研究所高薪寻求软件和硬件工程师(一年以上)

1) 软件工程师(高级工程师) 工作职责 1、从事网络设备的底层软件、主机软件、业务软件、网管软件等研发工作; 2、负责软件项目、模块的需求分析、设计、编码实现、验证; 3、参与相关质量活动,确保软件设计及实现工作按时保质完成。 职 ...…

查看全部问答>

uCOSII下的USB通信问题,求解

                                 我做的USB HID程序,裸机下可以正常工作,移植到uCOSII下后,上位机提示找不到设备。…

查看全部问答>

430单片机的版本号

请问430单片机的版本号I 和 H 有什么区别,在用的过程中两者之间参数差别好大?…

查看全部问答>