文档库 最新最全的文档下载
当前位置:文档库 › STM32单片机ADC的模拟看门狗的测试

STM32单片机ADC的模拟看门狗的测试

STM32单片机ADC的模拟看门狗的测试

STM32单片机ADC的模拟看门狗的测试

ADC的模拟看门狗用于检查电压是否越界。他又上下两个边界,可分别在寄存器ADC_HTR和ADC_LTR中设置。库函数是使用ADC_AnalogWatchdogThresholdsConfig设置的,无论是常规通道还是注入通道,都非常简单。

当模拟看门狗检测到电压高于上限或者低于下限时将会产生看门狗中断。捕获这个中断,可以做出一些应对措施。

数据手册上特别之处的一个东西:模拟看门狗说使用的比较数据与ADC_CR2寄存器中设置的数据对齐方式无关。看门狗比较是在数据对齐之前完成的。先进行看门狗比较,再将数据放入ADC_DR数据寄存器。

在ST的库中,只有简单的三个与看门狗相关的函数:

void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx,uint32_t ADC_AnalogWatchdog); void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx,uint16_t HighThreshold,uint16_t LowThreshold);

void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx,uint8_t ADC_Channel);

使用ADC_AnalogWatchdogThresholdsConfig设置触发看门狗的上下限

使用ADC_AnalogWatchdogSingleChannelConfig配置要使用模拟看门狗的通道

配置完成后使用ADC_AnalogWatchdogCmd启动模拟看门狗。

我写的函数很简单,就这么三行。将模拟看门狗加在ADC1的CH1上。代码如下:

void ADC_WatchdogConfig(void)

{

ADC_AnalogWatchdogSingleChannelConfig(ADC1,ADC_Channel_0);

ADC_AnalogWatchdogThresholdsConfig(ADC1,1500,0xFFF);

ADC_AnalogWatchdogCmd(ADC1,ADC_AnalogWatchdog_SingleRegEnable);

STM32单片机的模拟看门狗的库函数设置

STM32单片机的模拟看门狗的库函数设置 ADC的模拟看门狗用于检查电压是否越界。他又上下两个边界,可分别在寄存器ADC_HTR和ADC_LTR中设置。库函数是使用ADC_AnalogWatchdogThresholdsConfig设置的,无论是常规通道还是注入通道,都非常简单。 当模拟看门狗检测到电压高于上限或者低于下限时将会产生看门狗中断。捕获这个中断,可以做出一些应对措施。 数据手册上特别之处的一个东西:模拟看门狗说使用的比较数据与ADC_CR2寄存器中设置的数据对齐方式无关。看门狗比较是在数据对齐之前完成的。先进行看门狗比较,再将数据放入ADC_DR数据寄存器。 在ST的库中,只有简单的三个与看门狗相关的函数: void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog);void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold,uint16_t LowThreshold);void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel); 使用ADC_AnalogWatchdogThresholdsConfig设置触发看门狗的上下限 使用ADC_AnalogWatchdogSingleChannelConfig配置要使用模拟看门狗的通道 配置完成后使用ADC_AnalogWatchdogCmd启动模拟看门狗。 我写的函数很简单,就这么三行。将模拟看门狗加在ADC1的CH1上。代码如下: void ADC_WatchdogConfig(void){ ADC_AnalogWatchdogSingleChannelConfig(ADC1,ADC_Chan nel_0); ADC_AnalogWatchdogThresholdsConfig(ADC1,1500,0xFFF); ADC_AnalogWatchdogCmd(ADC1,ADC_AnalogWatchdog_SingleRegEnable);} NVIC中初始化模拟看门狗: void NVIC_Config(void){ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级分组NVIC_InitStructure.NVIC_IRQChannel = ADC_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

STM32技术参考手册第11章窗口看门狗(WWDG)

11 窗口看门狗(WWDG) 11.1 简介 窗口看门狗通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的 运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新,此看门狗电路在 达到可编程的时间周期时,会产生一个MCU复位。在递减计数器达到窗口寄存器值之前, 如果递减计数器值的第7位(在控制寄存器中) 被刷新,那么也将产生一个MCU复位。这表 明递减计数器需要在一个有限的窗口中被刷新。 11.2 主要特性 ● 可编程的自由运行递减计数器 ● 条件复位 ─当递减计数器的值小于40h,(若看门狗被启动)则产生复位。 ─当递减计数器在窗口外被重新装载,(若看门狗被启动)则产生复位。见图11-2。 11.3 功能描述 如果看门狗被启动(WWDG_CR寄存器中的WDGA位被置1),并且当7位(T[6:0])递减计 数器从40h翻转到3Fh(T6位清零)时,则产生一个复位。如果软件在计数器值大于窗口寄 存器中的值时重新装载计数器,将产生一个复位。 框图 看门狗框 图11-1 看门狗 应用程序在正常的运行过程中必须每隔一定的时间间隔写WWDG_CR寄存器以防止MCU 发生复位。只有当计数器值小于窗口寄存器的值时,才能进行这个写操作。这个要被储存 在WWDG_CR寄存器中的值必须在FFh和C0h之间: ● 启动看门狗 看门狗通常在复位后被禁止。设置WWDG_CR寄存器中的WDGA位将启动看门狗, 一旦被启动后,看门狗则不能再被关闭,除非发生复位。

● 控制递减计数器 递减计数器处于自由运行状态,即使看门狗被禁止,递减计数器仍继续递减计数。当看门狗被启用时,T6位必须被设置,以防止立即产生一个复位。 T[5:0]位包含了在看门狗产生复位之前的延时增量;复位前的延时时间在一个最小值和一个最大值之间变化,这是因为写入WWDG_CR 寄存器时,预分频值是未知的。 配置寄存器(WWDG_CFR) 中包含窗口的上限值:要避免产生复位,递减计数器必须在其值小于窗口寄存器的值并且大于3Fh 时被重新装载,图11-2描述了窗口寄存器的工作过程。 注: T6位可以被用来产生一个软件复位(WDGA 位被置位,T6位清零) 11.4 如何编写看门狗超时程序 图11-2显示了装载到看门狗计数器(CNT )中的6位计数值和看门狗的延迟时间之间的线性关系(以ms 为单位)。此图可用来做为快速计算的参考而未将时间的偏差考虑在内。如果需要更高的精度,可以使用图11-2提供的计算公式。 警告警告::当写入WWDG_CR 寄存器时寄存器时,,始终把T6位写1来避免来避免立即立即立即产生一个复位产生一个复位产生一个复位。。 图11-2 窗口看门狗时序图

STM32F103V IWDG 独立看门狗操作

STM32F103V IWDG 独立看门狗操作 最近编写一个程序,因为需要考虑到可靠性,所以需要在程序了添加看门 狗功能。查了下STM32 的相关资料,于是利用下库文件来实现IWDG 独立看 门狗操作。首先需要调用库文件#include “stm32f10x_iwdg.h”再配置下看门狗 相关参数 //////////独立看门狗IWDG 设置////////////////////////////////////void WatchDog_int(void) // 独立看门狗IWDG 设置{/* Enable write access to IWDG_PR and IWDG_RLR registers */ IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); /* IWDG counter clock: 32KHz(LSI) / 32 = 1KHz */ IWDG_SetPrescaler(IWDG_Prescaler_32); //独立看门狗预分频为32 /* Set counter reload value to 1000 */ IWDG_SetReload(1000);//设置IWDG 重装载值范围为0~0x0FFF; /* Reload IWDG counter */ IWDG_ReloadCounter();//按照重装载的寄存器的值来重装载IWDG 计数器 /* Enable IWDG (the LSI oscillator will be enabled by hardware) */ IWDG_Enable();//使能独立看门狗} 在主程序中实现喂狗的程序如下: ///////////主程序//////////////////int main(void){ RCC_Configuration(); //时钟配置NVIC_Configuration();//中断配置GPIO_Configuration();//GPIO 配置WatchDog_int();// 独立看门狗IWDG 设置/* 检查是否看门狗复位*/ if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET) { printf(“WatchDog Reset\r\n”); speakertest(); RCC_ClearFlag();//清除标志位} else {;} }

嵌入式系统看门狗实验报告

竭诚为您提供优质文档/双击可除嵌入式系统看门狗实验报告 篇一:《嵌入式系统原理与应用》实验报告04-看门狗实验 《嵌入式系统原理与接口技术》实验报告 实验序号:4实验项目名称:看门狗实验 1 2 3 4 篇二:嵌入式实验报告 目录 实验一跑马灯实验................................................. (1) 实验二按键输入实验................................................. .. (3)

实验三串口实验................................................. . (5) 实验四外部中断实验................................................. .. (8) 实验五独立看门狗实验................................................. (11) 实验七定时器中断实验................................................. (13) 实验十三ADc实验................................................. .. (15) 实验十五DmA实验................................................. .. (17) 实验十六I2c实验................................................. .. (21) 实验十七spI实

STM32窗口看门狗程序

STM32窗口看门狗程序 窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位(WWDG->;CR的第六位)变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个MCU复位。在递减计数器达到窗口配置寄存器(WWDG->;CFR)数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新,那么也将产生一个MCU复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。

图 3.6.1.1中,T[6:0]就是WWDG_CR的低七位,W[6:0]即是WWDG->;CFR的低七位。T[6:0]就是窗口看门狗的计数器,而W[6:0]则是窗口看门狗的上窗口,下窗口值是固定的(0X40)。当窗口看门狗的计数器在上窗口值之外被刷新,或者低于下窗口值都会产生复位。 上窗口值(W[6:0])是由用户自己设定的,根据实际要求来设计窗口值,但是一定要确保窗口值大于0X40,否则窗口就不存在了。 窗口看门狗的超时公式如下: Twwdg=(4096×2^WDGTB×(T[5:0]+1)) /Fpclk1; 其中: Twwdg:WWDG超时时间(单位为ms) Fpclk1:APB1的时钟频率(单位为Khz) WDGTB:WWDG的预分频系数 T[5:0]:窗口看门狗的计数器低6位 窗口看门狗寄存器介绍:

如何使用窗口看门狗: 1)使能WWDG时钟 2)设置WWDG_CFR和WWDG_CR两个寄存器 在时钟使能完后,我们设置WWDG的CFR和CR两个寄存器,对WWDG进行配置。包括使能窗口看门狗、开启中断、设置计数器的初始值、设置窗口值并设置分频数WDGTB 3)开启WWDG中断并分组 4)编写中断服务函数 软件例程: //---------------------------wdg.c----------------------- #include "wdg.h" #include "led.h" u8 wwdg_cnt=0x7f; //窗口看门狗计数器初值 void wwdg_init(u8 tr,u8 wr,u8 fprer) { RCC->;APB1ENR|=1;CFR|=fprer;CFR|=1;CFR&=0xff80; //窗口值清零 WWDG->;CFR|=wr; //设定窗口值 WWDG->;CR|=(wwdg_cnt|1;CR|=(cnt&0x7f); //喂狗值 } void WWDG_IRQHandler(void)

STM32开发笔记WWDG和IWDG的用法

STM32 独立看门狗IWDG 与窗口看门狗WWDG 2010年05月03日星期一21:54 独立看门狗Iwdg——有独立时钟(内部低速时钟LSI---40KHz),所以不受系统硬件影响的系统故障探测器。主要用于监视硬件错误。 窗口看门狗wwdg——时钟与系统相同。如果系统时钟不走了,这个狗也就失去作用了,主要用于监视软件错误。 一,独立看门狗 看门狗定时时限= IWDG_SetReload()的值/ 看门狗时钟频率 看门狗时钟频率=LSI(内部低速时钟)的频率(40KHz)/ 分频数 1.STM32 独立看门狗IWDG的时限定为280微秒。这个时限可能会随着LSI(内部低速时钟)的频率漂移而产生微小的变化。 /* IWDG timeout equal to 280 ms (the timeout may varies due to LSI frequency dispersion) ------------------------------------------------------------- */ /* Enable write access to IWDG_PR and IWDG_RLR registers */ IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); /* IWDG counter clock: 40KHz(LSI) / 32 = 1.25 KHz */ IWDG_SetPrescaler(IWDG_Prescaler_32); /* Set counter reload value to 349 */ IWDG_SetReload(349); /*该参数允许取值范围为0 –0x0FFF * /* Reload IWDG counter */ IWDG_ReloadCounter(); /* Enable IWDG (the LSI oscillator will be enabled by hardware) */ IWDG_Enable(); 2.独立看门狗(IWDG)由专用的40kHz 的低速时钟为驱动;因此,即使主时钟发生故障它也仍然有效。窗口看门狗由从APB1 时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的行为。可通过 IWDG_SetPrescaler(IWDG_Prescaler_32); 对其时钟进行分频,4-256, 通过以下方式喂狗: /* Reload IWDG counter */ IWDG_ReloadCounter(); 3. 1.25KHz 即每周期为0.8ms 共计时350 个周期,即350*0.8ms=280ms 看门狗定时时限= IWDG_SetReload()的值/ 看门狗时钟频率 看门狗时钟频率=LSI(内部低速时钟)的频率(40KHz)/ 分频数 二,窗口看门狗 STM32F的窗口看门狗中有一个7位的递减计数器,它会在出现下述2种情况之一时产生看

stm32独立看门狗操作寄存器 库函数

stm32 独立看门狗[操作寄存器+库函数] 以单片机为核心的微型计算机系统中,单片机经常 会受到来自外界电磁场的干扰。 造成程序跑飞,只是程序的正常运行状态被打断而进入 死循环,从而使单片机控制的系统无法正常工作。看门 狗就是一种专门用于检测单片机程序运行状态的硬件结构。 stm32也是如此。 stm32 的独立看门狗由内部专门的40Khz低速时钟驱动,即使主时钟发生故障时,它也仍然有效。这里需要注意 的是独立看门狗的时钟是一个内部时钟,所以不是准确 的40Khz,而是在30~60Khz之间的一个可变化的时钟, 看门狗的时钟对时间的要求不是很精确,所以时钟有偏 差可以接受。 本例直接操作寄存器实现验证独立看门狗的复位功能, 设定一个800ms的喂狗时间,在主函数中实现LED闪烁,如果设定一个1s的延时,则触发独立看门狗复位,LED 常亮。 库函数实现当外部中断发生(按下PA0按键),长时间不喂狗,引发独立看门狗复位时,向外用串口输出复位提示。

直接操作寄存器 使用独立看门狗,需要了解一下寄存器: 键值寄存器:(IWDG_KR) 低16位有效的寄存器,只写寄存器,读出值恒为0x0000. 软件必须以一定的间隔写入0xAAAA,否则,当计数器为 0时,看门狗会产生复位。 写入0x5555表示允许访问IWDG_PR和IWDG_RLR寄存器。写入0xCCCC,启动看门狗工作。 预分频寄存器:(IWDG_PR) 第三位有效寄存器,用于设置看门狗的分频系数,最低 为4,最高位256. 通过设置PR[2:0]:位来选择计数器时钟的预分频因子。 要改变预分频因子,IWDG_SR寄存器的PVU位必须为0。 000: 预分频因子=4 100: 预分频因子=64 001: 预分频因子=8 101: 预分频因子=128 010: 预分频因子=16 110: 预分频因子=256 011: 预分频因子=32 111: 预分频因子=256

stm32看门狗时间计算 独立看门狗和窗口看门狗的特性是什么

stm32看门狗时间计算独立看门狗和窗口看门狗的特性是什么STM32看门狗时间计算(TWDG): 1.STM32看门狗的例子 IWDG的时限定为280微秒。这个时限可能会随着LSI(内部低速时钟)的频率漂移而产生微 小的变化。 /* IWDG TImeout equal to 280 ms (the TImeout may varies due to LSI frequency dispersion) ------------------------------------------------------------- */ /* Enable write access to IWDG_PR and IWDG_RLR registers */ IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); /* IWDG counter clock: 40KHz(LSI) / 32 = 1.25 KHz */ IWDG_SetPrescaler(IWDG_Prescaler_32); /* Set counter reload value to 349 */ IWDG_SetReload(349); /*该参数允许取值范围为0 0x0FFF * /* Reload IWDG counter */ IWDG_ReloadCounter(); /* Enable IWDG (the LSI oscillator will be enabled by hardware) */ IWDG_Enable(); 2.独立看门狗(IWDG)由专用的40kHz 的低速时钟为驱动; 因此,即使主时钟发生故障它也仍然有效。窗口看门狗由从APB1 时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的行为。可通过 IWDG_SetPrescaler(IWDG_Prescaler_32); 对其时钟进行分频,4-256, 通过以下方式喂狗: /* Reload IWDG counter */ IWDG_ReloadCounter(); 3. 1.25KHz 即每周期为0.8ms

STM32学习之独立看门狗IWDG

STM32学习之独立看门狗IWDG STM32 的独立看门狗由内部专门的40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟并不是准确的40Khz,而是在30~60Khz 之间变化的一个时钟,只是我们在估算的时候,以40Khz 的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。 独立看门狗有几个寄存器分别介绍,首先是 键值寄存器IWDG_KR,该寄存器的各位描述如下: 图3.5.1.1 寄存器IWDG_KR 各位描述 在键寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值0xFFF 递减计数。当计数器计数到末尾0x000 时,会产生一个复位信号(IWDG_RESET)。无论何时,只要键寄存器IWDG_KR 中被写入0xAAAA,IWDG_RLR 中的值就被重新加载到计数器中从而避免产生看门狗复位。 IWDG_PR 和IWDG_RLR 寄存器具有写保护功能。要修改这两个寄存器的值,必须先向IWDG_KR 寄存器中写入0x5555。以不同的值写入这个寄存器将会打乱操作顺序,寄存器将重新被保护。

分频寄存器(IWDG_PR),该寄存器用来设置看门狗时钟的分频系数,最低为4,最高位256,该寄存器是一个32 位的寄存器,但是我们只用了最低3 位,其他都是保留位。预分频寄存器各位定义如下: 重装载寄存器IWDG_RLR:寄存器用来保存重装载到计数器中的值。该寄存器也是一个32 位寄存器,但是只有低12 位是有效的,该寄存器的各位描述如下

状态寄存器(IWDG_SR):如果在应用程序中使用了多个重装载值或预分频值,则必须在RVU位复位后才能重新改变预装载值,在PVU 位复位后才能重新改变预分频值。然而,在预分频和/或重装值更新后,不必等待RVU或PVU复位,可继续执行下面的代码。 只要对以上三个寄存器(除状态寄存器IWDG_SR)进行相应的设置,我们就可以启动STM32的独立看门狗,启动过程可以按如下步骤实现: 1)向IWDG_KR 写入0X5555。 通过这步,我们取消IWDG_PR 和IWDG_RLR 的写保护,使后面可以操作这两个寄存器。 设置IWDG_PR 和IWDG_RLR 的值。 这两步设置看门狗的分频系数,和重装载的值。由此,就可以知道看门狗的喂狗时间,该时间的计算方式为: Tout=40Khz/((4*2^prer )* rlr)

STM32 例程看门狗

独立看门狗实验 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称"看门狗"。 建议:看门狗是定时器的一种,学习看门狗对于理解定时器有着借鉴作用 [编辑] 实验目的: 1.分析和学习固件库 2.理解固件库的结构 3.通过stm32f10x_iwdg.c/.h文件,熟悉IWDG(独立看门狗)的控制和工作原理 4.复习按键中断的使用方法 [编辑] 实验要求: 1.使用LED灯LED1来指示程序是否重启(IWDG) 2.使用按键WAKEUP来不断地喂狗,并用LED4灯指示 [编辑] 硬件分析: [编辑] 看门狗原理: 看门狗又叫watchdog timer(WDT),是一个定时器电路。 ?一个输入端:叫喂狗引脚; ?一个输出端:连接到MCU的RESET引脚; 在系统运行以后,启动了看门狗的计数器,看门狗就开始自动计数; MCU正常工作时,每隔一段时间输出一个信号到喂狗端,将WDT清零; 一旦单片机由于干扰造成程序跑飞后,而进入死循环状态时,在超过规定的时间内“喂狗”程序不能被执行,看门狗计数器就会溢出,从而引起看门狗中断,就会输出一个复位信号到MCU,造成系统复位。 在使用看门狗时,要注意适时喂狗。 [编辑] STM32看门狗简介: [编辑] 启动方式:

通过选项字设定: 硬件或软件启动; [编辑] 基本特色: 自由运行的递减计数器; 内部独立的低功耗时钟LSI提供时钟,即使主时钟失效,看门狗仍处于激活状态;一旦启动独立看门狗,就不能停止(LSI也不能被禁止); 看门狗被激活后,则在计数器计数至0x000时产生复位;在电源稳定期间,即使系统进入STOP和STANDBY模式,独立看门狗复位能将系统从STANDBY模式唤醒。最适合应用于要求看门狗运行时,完全独立与主应用之外的项目 [编辑] 硬件电路分析: 这里的核心是在STM32内部进行,并不需要外部电路。但是考虑到指示当前状态和喂狗等操作,我们需要2个IO口,一个用来输入喂狗信号,另外一个用来指示程序是否重启。 喂狗我们采用板上的WAKEUP键来操作,而程序重启,则是通过LED4来指示的。LED4和WAKEUP的连接在前面跑马灯实验已经介绍了,这里我们不再多说. . STM32的独立看门狗由内部专门的40Khz低速时钟驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟并不是准确的40Khz,而是在 30~60Khz之间变化的一个时钟,只是我们在估算的时候,以40Khz的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。通过对LSI进行校准可获得相对精确的看门狗超时时间。有关LSI校准的问题,详见数据手册LSI时钟一节。

STM32的看门狗配置

STM32的看门狗配置 (2011-09-14 10:03:01) 转载▼ 标签: 分类:安防,监控 stm32 看门狗 配置 初始化 喂狗 看门狗的配置有2部分:看门狗的初始化和喂狗。 下面看一下STM32是怎么初始化看门狗和喂狗的。 看门狗初始化步骤: 1.IWDG_PR和IWDG_RLR寄存器具有写保护功能。要修改这两个寄存器的值,必须先向IWDG_KR寄存器中写入0x5555。 2.设置预分频因子(Prescaler divider)PR[2:0] 。 3.设置看门狗计数器重装载值。RLR[11:0]。 4.重新装载看门狗的计数值,只要在键寄存器IWDG_KR中写入0xAAAA。 5.在键寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗。 void Wdt_Init(void) { // Enable write access to IWDG_PR and IWDG_RLR registers IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //IWDG->KR = 0x5555 // IWDG counter clock: 40KHz(LSI) / 64 = 0.625 KHz IWDG_SetPrescaler(IWDG_Prescaler_256); //IWDG->PR = 0x06; // Set counter reload value to 1250 IWDG_SetReload(0xfff); //IWDG->RLR =0xFFF Red IWDG counter IWDG_ReloadCounter(); //IWDG->KR = 0xAAAA / Enable IWDG (the LSI oscillator will be enabled by hardware) IWDG_Enable(); //IWDG->KR = 0xCCCC

一个菜鸟的STM32寄存器学习笔记6_独立看门狗IWDG

STM32有两个看门狗一个是独立看门狗IWDG还有一个是窗口看门狗WWDG。这两者之间的区别主要是: 1.独立看门狗的时钟和主时钟是分离的,使用的是内部的低速时钟,所以时 钟是不准确的,但是是和主时钟分离的,当主时钟发生错误,独立看门狗 还是能工作的。而窗口看门狗是用的APB1的时钟,APB1用的是主时钟。 说以主时钟会影响到窗口看门狗的工作。 2.独立看门狗在计数接收之前喂狗就可以。窗口看门狗要在一个时间范围内 喂狗,早点晚点都不可以。 这里主要介绍独立看门狗 看门狗的作用就是在程序中加入一些喂狗语句,当程序在哪里死掉或者跑飞没有及时的喂狗。看门狗就会让CPU重启。独立看门狗就是这个功能, 配置方法如下: 1.对IWDG->KR写入0x5555解除对PR和RLR寄存器的锁定使这两个寄 存器可以写入数据 2.在PR中写入预分频值 3.在RLR中写入计数的初值 4.使能IWDG功能 5.在程序相应位置插入喂狗程序 详细说明: 第一步写入解锁语句 根据手册要对PR和RLR进行访问就需要先对KR写入0X5555 IWDG->KR=0X5555;

第二步设置预分频值和重装载初值 这里只有3位有效 这个寄存器只有12位有效

从中午参考手册中可以看到时钟进来之后通过分频器进行分频然后给计数器提供时钟。 所以可以得出分频系数越大,计数器走的就越慢,相同的初值值减到0的时间就越长。 手册上给了个根据需要的时间来选择分频系数的参考表格 在《STM32不完全手册》上有一个公式 例如看门狗的复位时间是2秒那我们从上表可以看出公式中的prer最小可以是3然后就可以列出公式 2000=((4*2^3)*rlr)/40 解出重装载的初值就是2500换成16进制就是9C4就。我们就可以给PR和RLR中填入数值了 IWDG->PR=3; IWDG->RLR=0x9C4; 第三步开启看门狗

STM32L15x —— 独立看门狗IWDG和窗口看门狗WWDG

Same as STM32F-1 系统外设 独立看门狗(IWDG)

IWDG ——概述 可通过option byte来选择是否使能硬件IWDG功能 更先进的安全功能: IWDG使用独立的低速时钟LSI作为时钟源,并在主时钟无效时仍然保持运行 一旦使能了IWDG,该功能就不能被禁 止(LSI也不能被停止) 安全的刷新修改序列 由于IWDG模块属于VDD供电域,因此即使在停止和待机模式下,仍然保持功能 (IWDG的复位信号能将芯片从待机模式 下唤醒) 防止IWDG复位信号产生:在计数器自减到0之前,向IWDG_KR寄存器写入AAAAh RCC_CSR寄存器的IWDGRSTF位指示是否产生了IWDG复位事件 使用32KHz的LSI,IWDG复位的最短和最长时间间隔为125us和32.7s 8-bit PRESCALER LSI (38KHz) 12-bit reload value 12-bit down counter Prescaler Register Status Register Reload Register Key Register IWDG Reset VDD voltage domain VCORE voltage domain IWDG最适合那些不需要很高精度,但需要独立于主进程之外的独立看门狗的应用

Same as STM32F-1 系统外设 窗口看门狗(WWDG)

WWDG ——概述 可配置的时间窗口,应用程序需要在一个有限的时间窗口内刷新自减计数器 有条件的复位: 当窗口看门狗使能,并且自减计数器小于40h(T6=0)时,产生复位 当窗口看门狗使能,并且在自减计数器达到窗口寄存器数值之前更新了自减计数器,产生复位 防止窗口看门狗复位信号产生:定期的,在自减计数器数值小于窗口范围(W[6:0])时,写T[6:0](其中T6位写1) 早期唤醒中断(EWI):当自减计数器达到40h 时产生中断?此中断可用于重载自减计数器 RCC_CSR 的WWDGRSTF 位指示是否发生了WWDG 复位事件 使用32MHz 的PCLK1时钟时,WWDG 的最短和最长复位时间间隔分别是128us 和65.54ms WWDG最适合那些需要精准时间控制的看门狗的应用 Refresh not allowed Refresh Window T[6:0] CNT down counter time W[6:0] 3Fh T6 bit Reset CM P W0 W1 W2 W3 W4 W5 W6 -T0 T1 T2 T3 T4 T5 T6 WDGA WWDG_CR WWDG_CFR PRESCALER (WDGTB) 6-Bit Down Counter PCLK1 (up to 32MHz) Write WWDG_CR comparator = 1 when T6:0 > W6:0 WWDG Reset

STM32看门狗配置(独立看门狗IWDG和窗口看门狗WWDG)

STM32看门狗配置(独立看门狗IWDG和窗口看门狗WWDG)stm32自带两个看门狗模块,独立看门狗IWDG和窗口看门狗WWDG。 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生。看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示MCU 已经挂了),便实现处理器的自动复位重启(发送复位信号)。 看门狗主要作用是可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。 具体的实现步骤:开启看门狗,设置减计数的初始值,当计数值达到超时值时,产生MCU 复位,此时本来运行的程序终止重新启动单片机(发生了故障)。在使用了看门狗之后,在正常运行的程序中加入喂狗的程序,即采用定时器的方式每隔一段时间进行一次喂狗重置计数装载值,这样,只要程序正常运行,没有出现故障或软件错误,就会不断的定时喂狗,从而不会使计数值达到超时值产生复位。 一、独立看门狗IWDG: 1、IWDG主要性能 1)自由运行的递减计数器 2)时钟由独立的RC振荡器提供(可在停止和待机模式下工作) 3)看门狗被激活后,则在计数器计数至0x000时产生复位 2、IWDG功能描述 在键寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值0xFFF递减计数。当计数器计数到末尾0x000时,会产生一个复位信号(IWDG_RESET)。 无论何时,只要键寄存器IWDG_KR中被写入0xAAAA,IWDG_RLR中的值就会被重新加载到计数器中从而避免产生看门狗复位。 void IWDG_ConfiguraTIon(void)

相关文档
相关文档 最新文档