STM32F103ZET6 — IWDG

发布者:幸福家园最新更新时间:2021-11-04 来源: eefocus关键字:STM32F103ZET6  IWDG  独立看门狗 手机看文章 扫描二维码
随时随地手机看文章

简介

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


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

}

关键字:STM32F103ZET6  IWDG  独立看门狗 引用地址:STM32F103ZET6 — IWDG

上一篇:STM32 启动过程简述
下一篇:STM32F103ZET6 — 端口Remap

推荐阅读最新更新时间:2024-11-11 00:07

STM32的独立看门狗(IWDG)看门狗时间计算
注意:0对应4分频,1对应8分频,......所以时间计算公式要乘以4,为: Tout=(4 * 2^PR * (RL+1))/40 ms 最小时间单位:1/40 ms 考虑分频系数 Prescaler(4-256):1*Prescaler/40 ms 考虑RL值(0-FFF):1*Prescaler*(RL+1)/40 ms
[单片机]
STM32的<font color='red'>独立</font><font color='red'>看门狗</font>(<font color='red'>IWDG</font>)<font color='red'>看门狗</font>时间计算
STM32单片机看门狗独立看门狗和窗口看门狗有什么区别
早期的MCU没有看门狗,就容易引起有些产品死机了不能重启工作。为了避免这个问题,后期的MCU在内部集成了看门狗的功能。 为了满足更多使用场景,现在很多MCU都集成了两个看门狗:独立看门狗与窗口看门狗。 拿现在大家熟悉的STM32来说,都集成了独立看门狗和窗口看门狗,下面就展开来讲讲这个两个看门狗以及它们的区别。 独立看门狗 独立看门狗,顾名思义,就是独立的一个看门狗,由其专用低速时钟 (LSI) 驱动,因此,即便在主时钟发生故障时仍然保持工作状态。 IWDG 最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。 独立看门狗特性: 自由运行递减计数器 时钟由独立 RC
[单片机]
STM32窗口看门狗独立看门狗的区别
一、介绍: STM32看门狗分为独立看门狗和窗口看门狗两种,其两者使用调条件如下所示, IWDG和WWDG两者特点如下图所示: 独立看门狗的手册资料: 窗口看门狗的手册资料: 应当注意:在窗口看门狗中,当递减计数器在窗口外被重新装载,(若看门狗被启动)则产生复位 【注】图中的WDGTB为3表示2^3=8,表示8分频,最小时间910us也等于每次计数器减一所需要经过的时间:T(LSB),每隔910us减1。最大值也等于,设置重载(喂狗)值127时(最大),一个复位周期的时间就是最大值58.25ms,也就是所能维持进入复位的最大时间。 由于窗口看门狗使用的APB1的PCLK1,
[单片机]
STM32窗口<font color='red'>看门狗</font>和<font color='red'>独立</font><font color='red'>看门狗</font>的区别
STM32---IWDG看门狗与Debug
今天的问题:程序在加了看门狗之后,在线调试时,能到达断点的位置,但之后还会自动运行,无法停止。 原因:看门狗 独立看门狗(IWDG)的主要性能 1、自由运行的递减计数器 2、时钟由独立的RC振荡器提供(可在停止和待机模式下工作) 3、看门狗被激活后,则在计数器计数至0x000时产生复位 当微控制器进入调试模式时(Cortex-M3核心停止),根据调试模块中的DBG_IWDG_STOP 配置位的状态,IWDG的计数器能够继续工作或停止。 即在进入在线调试状态后,先在Peripheral的系统寄存器中找到DBG寄存器,将Bit 8DBG_IWDG_STOP置1,看门狗停止工作,然后再运行程序。
[单片机]
STM学习笔记--独立看门狗IWDG
1:主要性能 (1)时钟由独立的RC振荡器提供 (2)自由运行的递减计数器 (3)看门狗被激活,则在计数器至0x000时产生复位 2:寄存器理解 (1 )键寄存器(IWDG_KR)中写入0XCCCC,开始启动独立看门狗,计数值由复位 (2)0XFFF递减计数,当计数器到末尾0X000时,产生一个复位信号。 (3)键寄存器(IWDG_KR)中写入0XAAAA,IWDG_RLR中的值会重新加入到计数器。即是清狗。 IWDG_PR(8bits预分频寄存器)和IWDG_RLR(12bits)具有写保护功能,想修改这个寄存器,IWDG_KR寄存器写入0X5555。 工作原理框图 时钟来源是LSI内部
[单片机]
STM学习笔记--<font color='red'>独立</font><font color='red'>看门狗</font><font color='red'>IWDG</font>
STM32F103ZET6 用定时器级联方式输出特定数目的PWM
STM32F103ZET6里共有8个定时器,其中高级定时器有TIM1-TIM5、TIM8,共6个。 这里需要使用定时器的级联功能,ST的RM0008 REV12的P388和P399页上有说明对于特定的定时器,怎么去选择级联功能,参见表86。 我这里输出PWM的定时器是TIM2,空闲的定时器是TIM3。以TIM2为主定时器,TIM3为从定时器对TIM2的输出脉冲数进行计数。 查表可知,TIM3为从定时器选择TIM2为触发源,需要配置TS=001,即选择ITR1。 实现通过定时器控制输出PWM个数的功能,可以有如下一种配置方式: void TIM2_Master__TIM3_Slave_Configuration(u32 Puls
[单片机]
STM32 芯片 IWDG 关闭 停用 方法
百度搜索真心是开发者的敌人,开发工作很多时候也是浪费青春和生命的工作,你费大把时间,解决的无非是写鸡毛蒜皮无关痛痒的问题,百度上还找不到这样的小问题的答案。 stm32 芯片 IWDG 怎么停用 我再一个项目上开启了IWDG,后来意外的把代码刷到了另一个产品上,产品就打开了IWDG 因为我需要进行调试,所以得先关掉,但是IWDG 断电都保存,就这小问题费了2 3 个小时, 百度给出的结论是,不能关闭,只能复位/重启??????(所以什么叫重启,怎么样重启?) 上google一搜索,发现 使用这个 可以在调试模式下关闭 IWDG,实际也是把WDG_SW设置为了1 __HAL_DBGMCU_FREEZE_IWD
[单片机]
STM32 芯片 <font color='red'>IWDG</font> 关闭 停用 方法
基于stm32f103zet6的内存管理的学习
主要是依照原子哥哥的代码来初步了解或者说学习一下内存管理,特别对于我们这个想往嵌入式方向发展的人来说,内存管理应该是一种艺术的。 今天在对原子的代码稍作修改是可以进行内存分配和回收的,所以开始深入分析一下这个代码的实现过程。一、所谓的内存管理内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。 二、代码分析 1、首先了解一下一个数据结构,这是一个声明 /*************************** 内存管理控制 **********************************************/ typedef struc
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved