第十二章 STM32单片机看门狗编程及其应用

合集下载

STM32F103V IWDG 独立看门狗操作

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 {;}}。

stm32看门狗

stm32看门狗

LSI (40KHz) LSI /4(8,16,…256) [100us, 26.2s] 计数器自减到0 喂狗时间在窗外
注意事项
可以利用T6和WDGA配合来软件产生复位
2
Quiz
When can be generated the WWDG reset? ____________ What is the maximum WWDG timeout? ____________
独立窗口看门狗特性
可通过选项字节来配置由硬件或软件 启动独立看门狗 先进的安全特性:
WWDG Reset WWDG_CFR
comparator = 1 when T6:0 > W6:0 CM P Write WWDG_CR
W6 W5 W4 W3 W2 W1 W0
WDGA T6 T5 T4 T3 T2 T1 T0
WWDG_CR 6-Bit Down Counter
在合适的时机喂狗以防止WWDG复位: 在设定的时间窗内写T[6:0](T6必需是1) 早期唤醒中断(EWI):当计数器自减到 0x40时触发该中断
窗口看门狗注意事项
复位时看门狗默认处于关闭状态,直到软件激活 之,之后就不能关闭它,直到产生复位。 即使还未使能看门狗(WDGA@CR),其计数器也 在一直自减运行着
因此使能它的时候要保证T6=1,否则一使能就复位了 @ WWDG_CR
时钟来源于PCLK
低功耗模式下,窗口看门狗停止工作
窗口看门狗 WWDG & IWWDG
计数器外设
窗口看门狗特性
可配置的时间窗,用来检测应用程序非 预期中的运行流程(过早或过晚) 看门狗复位条件
使能了看门狗的情况下,自减计数器值 小于0x40 使能了看门狗的情况下,喂狗时间超出 时间窗范围

stm32看门狗原理

stm32看门狗原理

stm32看门狗原理stm32看门狗原理解析什么是看门狗•看门狗(Watchdog)是一种用于监控嵌入式系统运行状态的设备或模块。

•它可以定时检测系统是否正常运行,并在异常情况下采取相应措施,比如重启系统。

•stm32看门狗是一种特殊的硬件单元,用于监控stm32微控制器的运行状态。

看门狗的工作原理•stm32看门狗是通过一个可配置的定时器和一个计数器实现的。

•看门狗的计数器会在系统启动时开始计数,超过预设的阈值时,看门狗将产生一个复位信号。

•在正常的系统运行过程中,我们需要定期喂狗,也就是重置看门狗的计数器。

如果超过计数器范围内指定的时间没有重置,看门狗就会认为系统发生故障。

•当看门狗检测到系统异常时,它会强制将stm32芯片重新启动,使系统恢复到初始状态。

stm32看门狗的配置方法•首先,我们需要在stm32的初始化代码中启用看门狗模块。

RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // 使能看门狗时钟WWDG_SetPrescaler(WWDG_Prescaler_8); // 设置预分频器的分频系数为8WWDG_SetWindowValue(127); // 设置看门狗的窗口值WWDG_Enable(80); // 启动看门狗并设置计数器初值为80•上述代码会启用stm32看门狗模块,并进行一些基本的参数配置。

•接下来,在系统的运行过程中,我们需要定期喂狗,以防止系统异常。

WWDG_SetCounter(80); // 重置看门狗计数器•上述代码会重置看门狗计数器,确保系统正常运行时不会触发看门狗的复位信号。

看门狗的注意事项•为了确保系统的正常运行,需要根据系统的需求合理设置看门狗的参数,包括预分频器、窗口值和计数器初值等。

•设置过小的参数可能会导致误触发看门狗的复位信号,系统频繁重启。

•设置过大的参数可能无法及时检测到系统异常,系统在故障时无法及时恢复。

STM32 独立看门狗IWDG 与窗口看门狗WWDG

STM32 独立看门狗IWDG 与窗口看门狗WWDG

STM32 独立看门狗IWDG 与窗口看门狗WWDG独立看门狗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 的低速时钟为驱动;因此,即使主时钟发生故障它也仍然有效。

最新STM32窗口看门狗实验

最新STM32窗口看门狗实验

2020/10/23
广州市星翼电子科技有限公司
9
ALIENTEK
《例说STM32》
8.3 窗口看门狗配置步骤
1)使能WWDG时钟。
WWDG不同于IWDG,IWDG有自己独立的40Khz时钟, 不存在使能问题。而WWDG使用的是PCLK1的时钟,需 要先使能时钟。
2)设置WWDG_CFR和WWDG_CR两个寄存器
上窗口值(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位
STM32窗口看门狗实验
ALIENTEK
《例说STM32》
8.1 窗口看门狗原理
➢ 窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成 的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6 位(WWDG->CR的第六位)变成0前被刷新,看门狗电路在达到预置的时间周 期时,会产生一个MCU复位。在递减计数器达到窗口配置寄存器(WWDG>CFR)数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新, 那么也 将产生一个MCU复位。这表明递减计数器需要在一个有限的时间窗口中被刷新 。他们的关系可以用下图来说明:
对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但 这有一个隐患,有可能程序跑乱了又跑回到正常的地方,或跑乱的程序正好执 行了刷新看门狗操作,这样的情况下一般的看门狗就检测不出来了。

STM32之窗口看门狗

STM32之窗口看门狗

STM32之窗⼝看门狗简介:跟独⽴看门狗⼀样,也是⽤来检测软件可能出现的错误,不⼀样的是,当独⽴看门狗计数器的值减到0时会产⽣复位,在减到0之前喂狗防⽌复位。

窗⼝看门狗:在某⼀值到0x40之间喂狗才不会产⽣复位,其他情况均会产⽣复位信号,这个某⼀个值称之为窗⼝上限。

计数器数值由看门狗控制寄存器决定可以看出计数器占7位,最⼤值为0x7f功能框图:1.PCLK1默认为36MHz2.PCLK1经过分频器分频⽣成CNT_CK给计数器提供时钟从图中可以看出CNT_CK=PCLK1/4096/(2^WDGTB)3.计数器,见最上⾯第1 2张图,当计数器最⾼位T6由1变为0时,产⽣复位4.设置窗⼝上限值,见配置寄存器,窗⼝上限值不得⼤于计数器最⼤值,不得⼩于窗⼝下限值超时时间计算:超时时间指计数器值减到窗⼝下限下⼀个数值即0x3f所花时间最短超时时间在计数器的值为0x40的时候,最长超时时间在计数器值为0x7f的时候当WDGTB为0时,CNT_CK=36M/4096/1=8789.0625Hz 计数器减⼀次所花时间为 1/8789.0625(s) 最短超时时间=(0x40-0x3f)*/8789.0625约等于113us最长超时时间=(0x7f-0x3f)/8789.0625 约等于7.28ms相关函数:上⾯中的中断函数使能是当计数器从0x40减到0x3f时产⽣的,这个中断称为死前中断。

实验:设置计数器值和窗⼝上限值都为0x7f配置死前中断,在中断中喂狗,并且LED2反转main函数中,LED1⼀直点亮原理图:看门狗头⽂件和源⽂件:#ifndef _WWDG_H#define _WWDG_H#include "stm32f10x.h"void WWDG_Config(void);#endif#include "wwdg.h"static void LED1_GPIO_Config(void){GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出GPIO_InitStruct.GPIO_Pin=GPIO_Pin_1;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStruct);GPIO_SetBits(GPIOC,GPIO_Pin_1);//默认熄灭}//中断优先级配置static void WWDG_NVIC_Config(void){NVIC_InitTypeDef NVIC_InitStruct;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStruct.NVIC_IRQChannel=WWDG_IRQn;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStruct);}void WWDG_Config(void){WWDG_NVIC_Config();LED1_GPIO_Config();RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);//开启看门狗时钟 WWDG_SetPrescaler(WWDG_Prescaler_8);//设置分频系数WWDG_SetWindowValue(0x7f);//设置窗⼝上限值WWDG_SetCounter(0x7f);//设置计数器值WWDG_EnableIT();//使能中断WWDG_Enable(0x7f);//开启看门狗}void WWDG_IRQHandler(void){WWDG_ClearFlag();WWDG_SetCounter(0x7f);//设置计数器值//LED2反转if(GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_1)==SET)GPIO_ResetBits(GPIOC,GPIO_Pin_1);elseGPIO_SetBits(GPIOC,GPIO_Pin_1);//默认熄灭}mian⽂件:#include "stm32f10x.h"#include "wwdg.h"static void LED0_GPIO_Config(void);int main(void){LED0_GPIO_Config();WWDG_Config();while(1);}static void LED0_GPIO_Config(void){GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStruct);GPIO_ResetBits(GPIOC,GPIO_Pin_0);//默认点亮}。

单片机的看门狗

单片机的看门狗

引言概述:
单片机的看门狗(二)是在第一篇文章中讨论的单片机看门狗的延伸,本文将深入探讨单片机看门狗的使用场景、工作原理、设置参数、使用注意事项以及常见问题等方面的内容。

单片机看门狗是一种重要的硬件设备,在系统稳定性和可靠性方面起到关键作用,因此了解和掌握单片机看门狗的相关知识是非常有必要的。

正文内容:
一、单片机看门狗的使用场景
1.1实时系统
1.2长时间运行的设备
1.3类似于操作系统的应用
二、单片机看门狗的工作原理
2.1看门狗定时器
2.2看门狗计数器
2.3看门狗复位信号
三、单片机看门狗的设置参数
3.1看门狗定时器的预分频和计数器
3.2看门狗复位信号的触发条件
3.3看门狗溢出时间的设置
四、单片机看门狗的使用注意事项
4.1错误的看门狗设置
4.2看门狗溢出时间过短
4.3看门狗溢出时间过长
五、单片机看门狗的常见问题及解决方法
5.1看门狗复位问题
5.2看门狗延时问题
5.3看门狗定时器设置问题
总结:
单片机看门狗是一项重要的硬件设备,它在保证系统稳定性和可靠性方面起到关键作用。

本文从使用场景、工作原理、设置参数、使用注意事项以及常见问题等方面深入探讨了单片机看门狗的相关知识。

在实际应用中,我们应该根据具体情况,合理设置单片机看门狗的参数,避免错误的配置导致系统异常。

同时,我们也要注意单片机看门狗的溢出时间,不要设置过短或过长,以免影响系统的正常运行。

通过深入了解和掌握单片机看门狗的相关知识,我们可以更好地应用它,提高系统的稳定性和可靠性。

STM32学习笔记---WWDG窗口看门狗实验

STM32学习笔记---WWDG窗口看门狗实验

STM32学习笔记---WWDG窗⼝看门狗实验继做了SYSTICK实验后,继续进⾏第8个实验-WWDG窗⼝看门狗实验,本实验通过设置窗⼝看门狗WWDG间断时间来中断来定期的检查是否出错,在WWDG中断函数中加⼊了流⽔灯⽤来测试是否运⾏了看门狗程序中断,⽤PB5-LED1通过窗⼝看门狗间断时间来闪烁,编程⼯程⼤致和USART实验过程差不多,先是开启系统时钟,然后GPIO端⼝时钟,然后复⽤功能时钟AFIO,然后各个模块⽤的的时钟,,呵呵,之后进⼊各个模块初始化,设置,编写⼦程序,中断的话,要在中断函数中填写某模块的中断触发处理函数,重要的是在CONFG.H函数中开启模块的声明,差不多是这样的了。

以下为WWDG函数主要部分://WWDG窗⼝看门狗设置初始化void WWDG_Config(void){//软件看门狗初始化RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);WWDG_SetPrescaler(WWDG_Prescaler_8); //时钟8分频4ms// (PCLK1/4096)/8= 244 Hz (~4 ms)WWDG_SetWindowValue(65); //计数器数值WWDG_Enable(127); //启动计数器,设置喂狗时间// WWDG timeout = ~4 ms * 64 = 262 msWWDG_ClearFlag(); //清除标志位WWDG_EnableIT(); //启动中断}*****************************************************void WWDG_IRQHandler(void){WWDG_SetCounter(0x7F); //更新计数值WWDG_ClearFlag(); //清除标志位switch(WWDGFLAG){case 0:GPIO_SetBits(GPIOB, GPIO_Pin_5);break;case 1:GPIO_ResetBits(GPIOB, GPIO_Pin_5);break;default:break;}WWDGFLAG=!WWDGFLAG;}以下为WWDG函数结果部分:。

STM32之窗口看门狗(WWDG)

STM32之窗口看门狗(WWDG)

STM32之窗⼝看门狗(WWDG)题外话:本⼈感觉今年⽐去年“蛋定”了,做事更沉稳,学习更踏实(从去年开始就把考试成绩看的不重要了),不是为了学习⽽学习,⽽且做事更负责任了。

再接再厉。

前⼏天学习STM32的两条狗,先学习了宠物狗(IWDG),和其它MCU差不多,不多说了。

学到警⽝(WWDG)的时候,问题来了,没有IWDG那么好理解了,看了半天没有搞懂是怎么回事,计数器值、窗⼝值、在什么时候喂狗、什么时候产⽣中断等等,⼀头雾⽔。

经过两天的推敲,个⼈理解如下:1、有个7位递减计数器(WWDG->CR),就这个计数器和窗⼝计数器(WWDG->CFR)决定什么时候喂狗。

狗喂早了,复位——“早”体现在计数器值(tr)>窗⼝值(wr),也就是计数器值还没有减到窗⼝值以下;2、当 0x40 < 计数器值(tr) < 窗⼝值(wr) 时,这时候最适合喂狗了,也只有在这时候喂狗才合适;3、当计数器的值从0x40变到0x3F的时候,将产⽣看门狗复位;当然在要产⽣复位的前⼀段时间,如果开启了提前唤醒中断,那么就会进⼊中断,在中断函数⾥,我们需要及时喂狗,否则会产⽣复位;4、据⽹上资料介绍,在这个中断⾥⾯⼀般不进⾏喂狗,⼀般是系统去世前的“遗嘱”,⽐如存储重要的数据等。

这个就需要根据个⼈需要设计。

下⾯择取部分程序,可以根据程序说明,计算出喂狗的时间,⼤家注意推敲,欢迎交流!u8 WWDG_CNT = 0x7F;void WWDG_Init(u8 tr, u8 wr, u32 fprer){RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG时钟使能WWDG_CNT = tr & WWDG_CNT; // 初始化WWDG_CNTWWDG_SetPrescaler(fprer); // 设置IWDG预分频值WWDG_SetWindowValue(wr); // 设置窗⼝值WWDG_Enable(WWDG_CNT); // 使能看门狗, 设置 counterWWDG_ClearFlag(); // 清除提前唤醒中断标志位WWDG_NVIC_Init(); // 初始化窗⼝看门狗 NVICWWDG_EnableIT(); // 开启窗⼝看门狗中断}void WWDG_IRQHandler(void){WWDG_ClearFlag(); // 清除提前唤醒中断标志位LED1 = !LED1; // LED1 状态翻转printf("进⼊中断!\r\n");}int main(void){u8 tr, wr;delay_init();NVIC_Configuration(); // 设置NVIC中断分组2:2位抢占优先级, 2位响应优先级LED_Init();KEY_Init();uart_init(9600);LED0 = 0;delay_ms(300);WWDG_Init(0x7F, 0x5F, WWDG_Prescaler_8); // 计数器值为7f, 窗⼝寄存器值为5f, 分频数为8 while(1){LED0 = 1;wr=WWDG->CFR&0X7F; // 窗⼝值tr=WWDG->CR&0X7F; // 计数器值if(tr<wr) // 计数器值tr必须⼩于窗⼝值wr时才能喂狗,在之前喂狗则太早,会产⽣看门狗复位 {WWDG_SetCounter(WWDG_CNT);printf("正在喂狗!\r\n");}}}实践出真知!试验现象:DS0(红灯)先亮,再灭,DS1⽆变化。

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

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

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)。

单片机与嵌入式系统原理第12章 基于ARM内核的STM32系列嵌入式微控制器及应用

单片机与嵌入式系统原理第12章 基于ARM内核的STM32系列嵌入式微控制器及应用

2个12位 ADC(1us) 温度传感器
2个12位 ADC(1us) 温度传感器
2~3个12位 ADC(1us) 温度传感器
1个12位 ADC(1us) 温度传感器
1个12位 ADC(1us) 温度传感器
USB2.0 OTG全速
USB2.0 OTG全速
USB 2.0 全速
USB 2.0 全速
2xCAN Ethemet 2.0B IEEE1588
2xCAN 2.0B
CAN 2.0B
1~2个 专用 PWM
ST公司STM32产品线
第12章 基于ARM内核的STM32系列嵌入式微控制器及应用
12.3 STM32F103xx系列微控制器简介
第12章 基于ARM内核的STM32系列嵌入式微控制器及应用
12.4 STM32的A/D转换器及应用
第12章 基于ARM内核的STM32系列嵌入式微控制器及应用
STM32主要应用场合包括:替代绝大部分10元以上的8位或16位单片机的应 用;替代目前常用的嵌入Flash的ARM7微控制器的应用;与简单图形及语音相 关的应用;与小型操作系统相关的应用;与较高速度要求相关的应用;与低功 耗相关的应用。
第12章 基于ARM内核的STM32系列嵌入式微控制器及应用
开始 单个通道
通道x 通道x 通道x … … 通道x
第12章 基于ARM内核的STM32系列嵌入式微控制器及应用
(3)扫描模式
开始 通道1 通道2
……
通道n
结束
通道1
通道2
通道3 … …
通道n
第12章 基于ARM内核的STM32系列嵌入式微控制器及应用
(4)间断模式
开始 通道1 通道2

STM32F0独立和窗口看门狗的功能解析

STM32F0独立和窗口看门狗的功能解析

STM32F0 独立和窗口看门狗的功能解析概述
对于看门狗,我觉得做单片机或者嵌入式开发的人员来说并不陌生,今天总结STM32F0 看门狗的功能,F0 的看门狗有两种:独立和窗口看门狗。

两种看门狗各有各的特点,应用在不同的场合,下面将分别简单总结一下独立和窗口看门狗的功能。

准备工作
对于看门狗的编程,建议大家准备F0 的参考手册和数据手册,方便查阅相关知识,没有的请到ST 官网或到我360 云盘下载。

今天总结的软件工程是基于“TIM基本延时配置详细过程”修改而来,因此需要将该软件工程下载准备好。

我每次都是提供整理好的软件工程供大家下载,但是,如果你是一位学习者,建议自己亲手一步一步操作。

【2019年整理】STM32窗口看门狗实验

【2019年整理】STM32窗口看门狗实验

前一段时间(T[6:0]=0X40)来提醒我们,需要进行喂狗了 ,否则将复位!因此,我们一般用该位来设置中断,当窗 口看门狗的计数器值减到0X40的时候,如果该位设置,并 开启了中断,则会产生中断,我们可以在中断里面向 WWDG_CR重新写入计数器的值,来达到喂狗的目的。注 意这里在进入中断后,必须在不大于113us的时间(PCLK1 频率为36M且WDGTB为0的条件下)内重新写WWDG_CR ,否则,看门狗将产生复位!
4/11/2019
广州市星翼电子科技有限公司
11
《例说STM32》
3)开启WWDG中断并分组
在设置完了WWDG后,需要配置该中断的分组及使能。 这点通过我们之前所编写的MY_NVIC_Init函数实现就可 以了。
4)编写中断服务函数
在最后,还是要编写窗口看门狗的中断服务函数,通过该 函数来喂狗,喂狗要快,否则当窗口看门狗计数器值减到 0X3F的时候,就会引起软复位了。在中断服务函数里面 也要将状态寄存器的EWIF位清空。
4/11/2019
广州市星翼电子科技有限公司
4
《例说STM32》
根据上面的公式,假设Fpclk1=36Mhz,那么可以得到最小-最大超时时间表如下表 所示:
总结: STM32F的窗口看门狗中有一个7位的递减计数器,它会在出现下述2种情况之一 时产生看门狗复位: 1)当计数器的数值从0x40减到0x3F时 2)当喂狗的时候如果计数器的值大于某一设定数值时,此设定数值在 WWDG_CFR寄存器定义 对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但 这有一个隐患,有可能程序跑乱了又跑回到正常的地方,或跑乱的程序正好执 行了刷新看门狗操作,这样的情况下一般的看门狗就检测不出来了。 4/11/2019 广州市星翼电子科技有限公司 5

STM32F4系列MCU独立看门狗IWDG的应用

STM32F4系列MCU独立看门狗IWDG的应用

STM32F4系列MCU独立看门狗IWDG的应用
为了提搞系统的可靠性,STM32F4系列MCU有一个独立看门狗(IWDG)和一个窗口看门狗(WWDG)。

今天做的实验是关于独立看门狗的。

独立看门狗使用的时钟源是内部低速振荡器LSI。

因为LSE可能没接,HSE可能坏点,HSE耗着的时候HSI却观点了。

诸多原因,LSI是最好的独立看门狗时钟。

【IWDG主要特性】
1、独立的向下计数器
2、内部RC振荡器作为时钟源
3、当计数器值减到0时,复位MCU 【IWDG配置步骤】
1、设置KR寄存器,为向PR和RLR写入数据做准备。

向KR写入0x5555使能写入PR 和RLR
2、写入预分频值和重装载值。

预分频是对LSI进行分频,重装载值是每次重新计数的开始值。

3、向KR写入0xAAAA,使能计数。

4、向KR写入0x5555,重新开始计数。

否则计数到0就会reset。

【代码实现】
本实验依赖于前面的LED实验。

实验第一步的现象是LED反复闪烁。

第二步现象是LED 亮一下后熄灭。

第一部分:
int main()
{
NVIC_Config();
LED_Init();
LEDOn(LED1);
delay_ms(500);
LEDOff(LED1);。

STM32F103系列单片机最实用看门狗的详细资料概述

STM32F103系列单片机最实用看门狗的详细资料概述

STM32F103系列单片机最实用看门狗的详细资料概述为什么使用看门狗事情很简单先前做的一款采集数据的产品不知道为何异常,陷入死循环然后“死机”,分析了很多次,没发现原因,但是每次重新上点后就能正常采集到数据。

后来找到了解决方法:看门狗!目的是当程序走入死循环或者硬件异常时,可以自动复位,这样就可以得到跟重新上电后差不多的效果了。

使用的平台:stm32f103系列单片机使用的烧写调试模式:Jlink SWD 模式。

使用STM32官方模板库。

ST系列单片机看门狗分为两种:1.独立看门狗,2.窗口看门狗。

独立看门狗:可参看RM(reference Manual)的Independent watchdog (IWDG)当然,只是简要查看下RM中的介绍(至于寄存器的操作,我们可以略过,因为我们使用库的开发,但是基本流程一定要了解!)。

在这里我们要抓住几个关键点:a、stm32f10x系列有两个看门狗,看门狗主要用于检测由于软件出错的问题,并触发系统自动复位,或者触发一个中断(窗口看门狗才有)。

b、独立看门狗的时钟源为LSI,尽管主时钟出错,它还是能保持激活状态。

窗口看门狗的时钟源为APB1时钟,并且可以修改分频值。

c、独立看门狗:有独立时钟(内部低速时钟LSI),所以不受系统硬件影响的系统故障探测器。

主要用于监视硬件错误。

精确度要求比较低。

d、窗口看门狗:时钟与系统相同。

如果系统时钟不走了,这个狗也就失去作用了,主要用于监视软件错误。

精确度要求更高。

看门狗原理简介:有某个寄存器按照时钟源不断的递减(有只狗,不断的消耗能量),当该。

STM32单片机的独立看门狗和窗口看门狗的特点及用法解析

STM32单片机的独立看门狗和窗口看门狗的特点及用法解析

STM32单片机的独立看门狗和窗口看门狗的特点及用法解析1.看门狗介绍看门狗这东西虽然简单,但我相信绝大多程序员没有足够重视它。

使用看门狗保证系统正常地运行是非常有必要的。

我们在设计产品时,代码以及硬件设计缺陷或是外界电磁干扰都有可能使系统死机,如果不能正常对其进行复位,系统的可靠性将大打折扣。

看门狗分为软件看门狗和硬件看门狗两类,其原理都是使用一个独立定时器来计时,超出时间就会产生复位信号,主要区别看是否具有独立的硬件结构,如果有,就是硬件看门狗,如果是一个普通定时器实现的那么就是软件看门狗。

STM32F407片内有两个看门狗:独立看门狗IWDG以及窗口看门狗WWDG,下面来讨论各自的特点和用法。

2.IWDG的特点以及使用IWDG是一个独立看门狗,具有独立于系统的时钟,与片外看门狗更为相似,使用片内独立的阻容时钟发生电路计时,记录时间为=(时钟频率(40KHz)/ 分频数)*IWDG_SetReload (t),t《0xFFF.也就是说记录的最大设定的复位时间为(1/40K)*256*0xFFF = 26.2 S。

由于IWDG使用的时钟本身不准确,会因为漂移产生一定变化,喂狗时应该给出一定的裕量。

另外,这个时钟与系统时钟并无关联,所有也不能与系统进行同步产生中断,一旦定时时间到后就会产生复位信号,系统来不及存储当前运行状态就会重启,可以在要求不高的场合使用。

3.WWDG的特点以及使用WWDG具有一个独立的7位定时器,使用系统时钟,可以产生系统中断。

其定时最时间为(1/PCLK1)* 4096)* 分频系数(最大为8)*(0x7F –0x3F)= 58ms.其复位的条件是:(1)当计数器的数值从0x40减到0x3F(2)当刷新看门狗时计数器的数值大于窗口上限值时满足任何一条都可以产生复位信号。

通常情况下设置窗口上限值为0x7F,下限值默认为0x40,计数器向下数到0x40就会产生中断,下个910us后变为0x3F就会复位系统。

STM32看门狗实验

STM32看门狗实验

#define IWDG_Prescaler_8
((uint8_t)0x01)
#define IWDG_Prescaler_16
((uint8_t)0x02)
#define IWDG_Prescaler_32
((uint8_t)0x03)
#define IWDG_Prescaler_64
((uint8_t)0x04)
硬件分析:
看门狗原理:
看门狗又叫watchdog timer(WDT),是一个定时器电路。 一个输入端:叫喂狗引脚; 一个输出端:连接到MCU的RESET引脚;
在系统运行以后,启动了看门狗的计数器,看门狗就开始自动计数; MCU正常工作时,每隔一段时间输出一个信号到喂狗 端,将WDT清零;一旦单片机由于干扰造成程序跑飞后,而进入死循环状态时,在超过规定的时间内 “喂狗”程序不能被 执行,看门狗计数器就会溢出,从而引起看门狗中断,就会输出一个复位信号到MCU,造成系统复位。 在使用看门狗时,要注意适时喂狗。
独立看门狗实验
在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环, 程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于 对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称"看门狗"。 建议:看门狗是定时器的一种,学习看门狗对于理解定时器有着借鉴作用
IWDG 寄存器映像
IWDG 寄存器映像和复位值
有关寄存器的起始地址,参见数据手册.
程序分析: 固件库库函数分析:
IWDG 的库函数如下所示:
函数 IWDG_WriteAccessCmd

stm32看门狗原理(一)

stm32看门狗原理(一)

stm32看门狗原理(一)STM32看门狗什么是看门狗?•看门狗(Watchdog)是一种硬件设备,用于监视系统的运行状态。

•当系统出现故障或死锁时,看门狗能够自动进行故障处理,避免系统一直处于不可用状态。

STM32看门狗功能•STM32微控制器系列中,许多型号都配备了看门狗模块。

•看门狗模块可以设置定时器,当定时器达到预设值时,会触发复位操作,使系统重新启动。

•STM32看门狗模块可以提高系统的可靠性和稳定性。

STM32看门狗的工作原理看门狗定时器•STM32看门狗模块通过一个专门的计时器实现定时的计数。

•每次系统启动后,看门狗定时器会开始计数,当计数达到设定值时,产生看门狗溢出中断或复位系统。

•看门狗定时器的计数周期可以根据需求进行配置,一般在几秒到几分钟之间。

看门狗初始化•在使用STM32看门狗之前,需要进行初始化设置。

•首先需要配置看门狗定时器的计数周期,以确定触发看门狗复位的时间间隔。

•其次需要使能看门狗模块,使其开始工作。

喂狗操作•STM32看门狗模块提供喂狗功能,用于重置看门狗的定时器。

•在系统正常运行时,需要定期执行喂狗操作,以避免看门狗复位系统。

•喂狗操作可以通过写入特定的值到看门狗控制寄存器中完成。

看门狗复位•当看门狗定时器计数达到设定值时,会触发看门狗复位操作。

•看门狗复位会导致系统重新启动,并将系统状态恢复到初始状态。

STM32看门狗的应用场景•嵌入式系统中,特别是对系统可靠性要求较高的产品中,可以使用STM32看门狗模块。

•在无人机、工业控制设备、医疗设备等领域中,STM32看门狗模块可以提供保护机制,避免系统出现故障导致严重后果。

总结•STM32看门狗模块是一种可靠的系统保护机制,能够提高系统的可靠性和稳定性。

•通过设置看门狗定时器的计数周期、喂狗操作和看门狗复位,可以实现对系统状态的监控和自动恢复。

•STM32看门狗模块在嵌入式系统中的应用广泛,特别是对系统可靠性要求较高的场景中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• 在WWDG中断服务程序中,不应该重装递减计数器,而是让应 用程序在发生复位前,安排一些紧急处理的任务:保存一些 重要数据和状态参数、或做系统刹车等操作。
工程素质和技能归纳
• 复习C语言中的函数指针内容,掌握其在嵌入式系统中的应 用。 • 理解看门狗的作用,掌握STM32单片机独立看门狗的工作机 制、配置流程和方法。 • 掌握STM32单片机窗口看门狗的工作机制、配置流程和方 法,以及注意事项。
STM32单片机窗口看门狗编程
• 窗口看门狗( Window Watchdog,WWDG),通常用来检 测由外部干扰或不可预见的逻辑条件造成的应用程序背离正 常运行序列而产生的软件故障。WWDG从APB1时钟分频后 得到的时钟驱动,通过可配置的时间窗口来检测应用程序非 正常的过迟或过早的操作。
独立看门狗与窗口看门狗的区别
机器人辅助32位单片机课程
第十二章 STM32单片机看门狗编程及其应用
华中科技大学控制科学与工程系 深圳市中科鸥鹏智能科技有限公司 彭刚
摘要
• 看门狗介绍 • STM32单片机独立看门狗编程
任务一 任务二 独立看门狗编程 认识系统节编程
任务三 窗口看门狗编程
任务一 独立看门狗编程
• 利用IWDG进行检测和解决由系统错误引起的故障。 • 例程参考P284:IWDG.c • 当程序正常运行时,每隔30ms会重新装载IWDG计数器。当程 序进入死循环时,计数器递减到0,系统发生复位。当系统检 测到复位后电量LED。
任务一 独立看门狗编程
• 需要注意: • (1)因为独立看门狗使用的是LSI,所以复位与时钟初始化 函数RCC_Configuration中加入:
WWDG“过早”复位
WWDG“过迟”复位和“过早”复位
任务二 窗口看门狗编程
• 如果主程序不再进行SysTick初始化,即每隔30ms不再重新装 载WWDG计数器,且While(1)中的循环代码不再做修改,而 在WWDG中断服务函数中添加复位WWDG看门狗代码。这样修改 后程序运行期间没有间隔一定时间就去重新装载WWDG计数 器,因此当这个计数器递减到0x40时,会进入 WWDG_IRQHandler中断服务函数,重新装载WWDG递减计数器, 防止WWDG产生系统复位。

STM32单片机窗口看门狗编程
• WWDG有一个7位的递减计数器,被当成看门狗用于发生问 题是复位整个系统。 • STM32单片机窗口看门狗线管的寄存器有:
WWDG控制寄存器:WWDG_CR,递减计数器被包含在这个寄存器中, 初值为0x7F. • WWDG配置寄存器: WWDG_CFR ,初值为0x7F. • WWDG状态寄存器: WWDG_SR •
任务二 认识系统节拍定时器
• ARM Cortex-M3内核集成了一个系统节拍定时器SysTick, 它是一个24位递减计数器,SysTick设定初值并使能后,每 经过一个系统时钟周期,计数值就减1,减到0时,计数器自 动重装初值并继续计数,同时内部的COUNTFLAG标志会置 位,触发中断。 • 尝试一下用SysTick编写LED闪烁程序。
• 工程素质和技能归纳
看门狗介绍
• 单片机系统会由于受到外界的干扰,而造成程序执行紊乱, 系统无法正常运行。为了防止这种情况的发生,产生了一种 用于检测程序运行状态的电路或芯片,俗称看门狗 (Watchdog)。
• 看门狗可以分为独立与单片机外部的看门狗芯片和单片机内 集成的看门狗外设模块两种。 • 看门狗有一个输入信号,也称“喂狗”;有一个输出信号给 MCU的复位端。系统运行后启动看门狗计数器,看门狗开始 计数,当计数满后(一定时间)未收到清零信号(喂狗), 看门狗计数器会溢出,引起看门狗中断,造成系统复位。 • STM32F10x内置两个看门狗:独立看门狗和窗口看门狗。
STM32单片机独立看门狗编程
• STM32单片机IWDG结构如图
• 工作原理:在键寄存器中写入0xCCC,开启独立看门狗,此时 计数器开始从复位值0xFFF递减计数。当计数到0时产生一个 复位信号。无论何时向键寄存器中写入0xAAAA,重载寄存 器中的值就会被重新加载到计数器,从而避免看门狗复位。
• 独立看门狗IWDG有独立的时钟,它不受系统硬件影响,可以作为系统故 障探测程序用,主要用于监视硬件的错误。而窗口看门狗WWDG的时钟 与系统相同,可以认为是系统内部的故障探测器。如果系统时钟不走了 ,这个窗口看门狗也就失去作用了,主要用于监视软件错误。WWDG计 数器达到给定的超时值时,会触发中断,这是给应用程序最后一次喂狗 的机会。 通常这个中断不是让应用程序执行喂狗操作,因为既然进入到这个中断 ,就表示应用程序在其他地方的喂狗操作不能奏效,所以发生这种现象 时,肯定是系统有问题了,或者是程序有Bug,或者是碰到了干扰。因此 在这种情况下,WWDG中断是为了让应用程序在发生复位前,安排一些 紧急处理的任务:保存重要的数据和状态参数,或做系统刹车(如电梯 控制)等操作。由此看出,简单地在WWDG中断服务程序中“喂狗”,既 没有发挥WWDG相对于IWDG的优势,又因为在WWDG中断中喂狗而为 系统留下了隐患,发生不可预料甚至灾难性的后果,达不到看门狗的作 用。
STM32单片机独立看门狗编程
• 独立看门狗(Independent watchdog,IWDG)的时钟系统是 由一个12位递减计数器和一个8位的预分频器构成的使用独立 40KHZ内部低速LSI RC振荡器提供。
• STM32单片机的IWDG相关的寄存器有:
– – – – IWDG键寄存器: IWDG_KR IWDG重装载寄存器: IWDG_RLR IWDG预分频寄存器: IWDG_PR IWDG状态寄存器: IWDG_SR
STM32单片机窗口看门狗编程
• STM32单片机窗口看门狗模块结构图如下所示:
STM32单片机窗口看门狗编程
• • 窗口看门狗会在以下两种情况下产生复位: (1)如果7位递减计数器值在T6位便0之前没有被刷新,即未被重置, 那么看门狗电路在达到预置时间周期时,会产生一个MCU复位。可以理 解为“过迟”复位。 (2)在递减计数器达到窗口寄存器数值之前,即大于这个设定数值时, 如果递减计数器数值被刷新,那么也将产生一个MCU复位。可以理解为 “过早”复位。
• 窗口看门狗,每隔30ms重新装载计数器,此时WWDG计数器的 值为0x5F,满足WWDG递减计数器必须在其值小于窗口寄存器的 数值0x70并大于0x3F时才能被重新装载的条件,不会产生 WWDG复位。
任务二 窗口看门狗编程
• 如果程序进入某个代码片段,如在按键中断服务程序中发生 了死循环,不能退出来,那么喂狗程序无法执行,当计数器 从0x40递减到0x3F时,发生系统复位。这是过迟复位。复位 后程序检测到复位与时钟配置寄存器中的控制/状态寄存器标 志位“WWDGRSTF”为1,表明窗口看门狗复位,点亮LED。
任务一 独立看门狗编程
• (4)独立看门狗在使用SysTick中断来重新装载计数器。为 了不影响SysTick其他的应用,在“stm32f10x_it.c”文件中加入 以下代码:
• int Tic_IWDG;//喂狗循环程序的频率判断变量 • void SysTickHandler(void) • { • Tic_IWDG++;//变量递增 • if(TIC_IWDG>=10)//每10个SysTick周期,喂狗一次 • { • IWDG_ReloadCounter();//喂狗 • Tic_IWDG=0;//清零 • } • }

任务二 窗口看门狗编程
• 程序正常时,每隔一定的时间重新装载WWDG计数器,即“喂 狗”一次,假设程序进入某个代码片段,比如按键中断,发 生了死循环,不能退出来,那么“喂狗”程序无法执行,当 WWDG计数器递减到0x3F时,达到设定的超时值,系统复位。 例程参考P293:WWDG-1.c
任务二 窗口看门狗编程
• • RCC_LSICmd(ENABLE);//打开LSI While(RCC_GetFlagStatus(RCC_FLAG_LSIRDY)==REST);//等待直到 LSI稳定
• (2)喂狗周期要小于独立看门狗计数超时值;同时超时值要 大于程序正常执行循环一次的周期。 • (3)IWDG初始化程序要在SysTick的初试化之后。
相关文档
最新文档