STM32技术参考手册第11章窗口看门狗(WWDG)
如何设计STM32单片机独立看门狗程序?

如何设计STM32单片机独立看门狗程序?[导读]今天要学习的是独立看门狗,看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O 引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位。
即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。
今天要学习的是独立看门狗,看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位。
即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。
1.1独立看门狗简介看门狗定时器 (WDT,Watch Dog Timer)是单片机的组成部分,它实际上是一个计数器,一般给看门狗一个数值,程序开始运行后看门狗开始倒计时。
如果程序运行正常,过一段时间CPU应发出指令让看门狗复位,重新开始计数,也就是所谓的“喂狗”。
如果看门狗减到0就认为程序没有正常工作,强制整个系统复位。
独立看门狗由专用低速时钟(LSI)驱动,计时主时钟发生故障它也仍然有效。
看门狗主要是用于在发生系统软件故障时,将系统复位。
也可以用于将系统从休眠或空闲模式唤醒。
STM32开发笔记WWDG和IWDG的用法

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

STM32 看门狗WWDG 和IWDG 的区别是什么STM32 有2 个看门狗:独立看门狗和窗口看门狗。
独立看门狗IWDG:独立于系统之外,因为有独立时钟,所以不受系统影响的系统故障探测器,主要用于监视硬件错误。
窗口看门狗WWDG:系统内部的故障探测器,时钟与系统相同。
如果系统时钟不走了,这个狗也就失去了作用了,主要用于监视软件错误。
简单的讲,看门狗就是检测系统故障的,如果因为系统故障而没有及时喂狗,则引发复位重启。
对于一般的独立看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但是这样有一个隐患,有可能程序跑乱了又跑回正常的地方,或者跑乱的程序正好执行了刷新看门狗操作,这样的情况下一按的看门狗就检测不出来故障了;但是如果使用窗口看门狗,程序员可以根据程序正常执行的时间设置刷新看门狗的一个时间窗口,保证不会提前刷新看门狗,也不会滞后刷新看门狗,这样可以检测出程序没有按照正常的路径运行,非正常地跳过了某些程序段的情况。
单片机技术应用 复位电路

复位电路的作用是为了是系统恢复到初始状态的,单片机的复位方式也是存在好几种的:上电复位,系统复位,备份区域复位
上电复位:其产生的条件是,当系统上电、掉电,以及系统从待机模式返回时,发生电源复位。电源复位能够复位除了备份区域寄存器之外的所有寄存器的状态。
系统复位:以下任一事件发生时,均能产生一个系统复位:
电容充电时间计算:T = 1.1RC = 1.1 * 10000 * 0.0000001 = 0.0011s = 1.1ms
复位电路
STM32
内核复位与系统复位的别
本文说的内核是指处理器内核,也就是MPU(Microprocessor Unit)。比如STM32F103,其内核就是Cortex-M3内核。
1. NRST引脚上的低电平(外部复位)
2.窗口看门狗计数终止(WWDG复位)
3.独立看门狗计数终止(IWDG复位)
4.软件复位(SW复位)
5.低功耗管理复位
系统复位能够复位除时钟控制寄存器CRS中的复位标志和备份区域中的寄存器之外的所有寄存器。
备份区域复位:对于备份区域的复位,一种是在软件复位的时候设定备份区域控制寄存器中的对应位产生的;另一种是当电源和电池都掉电又重新上电时产生的。
平常我们常用的复位方式有两种,一种是NRST引脚的低电平复位,通过按键复位电路给这个引脚一个低电平,让系统完成复位,另一种大家都知道,那就是上电复位了,有时候是复位电路莫名失效了,有时是刚启动的时候,虽然用的没有按键复位电路多,不过也算是很常用的一种复位方式了。按键复位电路直接给图了,网上的讲解可能把这电路图都讲烂了,我就不费口舌了。
因此,我们常说的复位一般指的是系统复位。
而这里的系统就是包含内核和外设,也就是MCU(Microcontroller Unit),对于STM32F103来说,就是Cortex-M3内核+各种外设接口。
STM32单片机中的独立看门狗与窗口看门狗有哪些不同之处

STM32 单片机中的独立看门狗与窗口看门狗有哪些
不同之处
1.关于看门狗的解释不再说明,窗口看门狗简而言之即只能看某个窗口期即某段时间内才能够喂狗。
32 的独立看门狗是没有中断的,而窗口看门狗可根据需要配置中断
2.关于独立看门狗和窗口看门狗的应用,手册p316 即17.1 节讲的非常清楚。
首先独立看门狗和窗口看门狗都可用来监视软件程序是否正常运行,而
具体而言,因为独立看门狗独立于系统时钟单独运行,因此其可用来监视是
否发生了硬件错误,比如说系统时钟故障,看门狗仍然能够起到重启的作
用,但是独立看门狗的计时精度比较差,更多的应用在独立系统运行之外的
对计时要求低的地方。
而窗口看门狗是由系统时钟提供的,因此其计时也会
很准确,当然其也就只能用来检测软件故障,比如硬件故障系统时钟坏了,
自身也就不动了,也就没有检测硬件故障的作用,因此窗口看门狗是用在检
测应用软件是否准确运行时使用的。
当然我们用系统情况下其实完全可以不使用32 提供的看门狗,我们自己某个任务的一个变量即实现看门狗的功能了。
3.另外注意,看门狗只是解决软件异常,独立看门狗称为硬件看门狗是其。
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: 预分频因子=4100: 预分频因子=64001: 预分频因子=8101: 预分频因子=128010: 预分频因子=16110: 预分频因子=256011: 预分频因子=32111: 预分频因子=256重装载寄存器:(IWDG_RLR)低12位有效,RL[11:0]。
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之窗口看门狗(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⽆变化。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
14
13
12
11
10
EWI
9
WDGTB1
8
WDGTB0 WDGA 7
6
5
4
窗口看门狗(WWDG)
T[6:0]
01111111
W[6:0]
0001111111 0
3
2
1
EWIF
0
7/6/2007
在 PCLK1=36MHz 时的最小-最大超时值
(ms)
WDGTB
最小超时值
最大超时值
0
113µs
7.28ms
1
227µs
14.56ms
2
455µs
Hale Waihona Puke 29.12ms3910µs
58.25ms
7/6/2007
STM32F10x 参考手册
第一版
窗口看门狗(WWDG)
11.5
调试模式
当微控制器进入调试模式时(Cortex-M3核心停止),根据调试模块中的DBG_WWDG_STOP 配置位的状态,WWDG的计数器能够继续工作或停止。详见有关调试模块的章节。
STM32F10x 参考手册
第一版
窗口看门狗(WWDG)
11 窗口看门狗(WWDG)
11.1 11.2 11.3
简介
窗口看门狗通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的 运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新,此看门狗电路在 达到可编程的时间周期时,会产生一个MCU复位。在递减计数器达到窗口寄存器值之前, 如果递减计数器值的第7位(在控制寄存器中) 被刷新, 那么也将产生一个MCU复位。这表 明递减计数器需要在一个有限的窗口中被刷新。
7/6/2007
STM32F10x 参考手册
第一版
11.7 WWDG 寄存器映像
表11-1 WWDG寄存器映像和复位值
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
偏移 寄存器
WWDG_CR
000h
保留
复位值
004h
WWDG_CFR 复位值
保留
008h
WWDG_SR 复位值
保留
15
主要特性
● 可编程的自由运行递减计数器 ● 条件复位
─ 当递减计数器的值小于 40h,(若看门狗被启动)则产生复位。 ─ 当递减计数器在窗口外被重新装载,(若看门狗被启动)则产生复位。见图 11-2。
功能描述
如果看门狗被启动(WWDG_CR 寄存器中的 WDGA 位被置 1), 并且当 7 位(T[6:0])递减计 数器从 40h 翻转到 3Fh(T6 位清零)时,则产生一个复位。如果软件在计数器值大于窗口寄 存器中的值时重新装载计数器,将产生一个复位。
WDGTB[1:0]: 时基 预分频器的时基可根据如下修改:
00: CK计时器时钟(PCLK1除以4096) 除以1 01: CK计时器时钟(PCLK1除以4096) 除以2 10: CK计时器时钟(PCLK1除以4096) 除以4 11: CK计时器时钟(PCLK1除以4096) 除以8
W[6:0]: 7位窗口值 这些位包含了用来与递减计数器进行比较用的窗口值。
15 14 13 12 11 10 9 保留
8
7
6
5
4
3
2
1
0
WDGA T6 T5 T4 T3 T2 T1 T0 rs rw rw rw rw rw rw rw
位31:8 位7 位6:0
保留。
WDGA: 激活位 此位由软件置1,但仅能由硬件在硬件复位后清0。当WDGA=1时,看门狗可以产生复位。 0:禁止看门狗 1:启用看门狗
配置寄存器(WWDG_CFR) 中包含窗口的上限值:要避免产生复位,递减计数器必须在 其值小于窗口寄存器的值并且大于 3Fh 时被重新装载,图 11-2 描述了窗口寄存器的工 作过程。 T6位可以被用来产生一个软件复位(WDGA位被置位,T6位清零)
如何编写看门狗超时程序
图 11-2 显示了装载到看门狗计数器(CNT)中的 6 位计数值和看门狗的延迟时间之间的线 性关系(以 ms 为单位)。此图可用来做为快速计算的参考而未将时间的偏差考虑在内。如 果需要更高的精度,可以使用图 11-2 提供的计算公式。
保留
15 14 13 12 11 10 9
8
7
6
5
4
3
2
1
0
保留
EWI
WDG TB1
WDG TB0
W6
W5
W4
W3
W2
W1
W0
rs rw rw rw rw rw rw rw rw rw
7/6/2007
STM32F10x 参考手册
第一版
窗口看门狗(WWDG)
位31:8 位9
位8:7 位6:0
保留。
EWI: 提前唤醒中断 此位若置1,则无论何时,当计数器值达到40h,即产生中断。 此中断只能由硬件在复位后清除。
7/6/2007
STM32F10x 参考手册
第一版
窗口看门狗(WWDG)
11.6 寄存器描述
关于在寄存器描述里面所用到的缩写,详见第 1 章。
11.6.1
控制寄存器(WWDG_CR)
地址偏移量:00h 复位值:0111 1111(7Fh)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保留
警告:当写入 WWDG_CR 寄存器时,始终把 T6 位写 1 来避免立即产生一个复位。
图11-2 窗口看门狗时序图
计算超时的公式如下: TWWDG = TPCLK1 x 4096 x 2WDGTB x (T[5:0] + 1);
其中: TWWDG:WWDG 超时时间 TPCLK1:APB1 以 ms 为单位的时钟间隔
T[6:0]: 7位计数器(MSB至LSB) 这些位用来存储看门狗的计数器值。每个PCLK1周期(4096x2WDGTB)减1.当计数器值从40h变 为3Fh时(T6被清0),产生看门狗复位。
11.6.2
配置寄存器(WWDG_CFR)
地址偏移量:04h 复位值:0111 1111(7Fh)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
图11-1 看门狗框图
应用程序在正常的运行过程中必须每隔一定的时间间隔写 WWDG_CR 寄存器以防止 MCU 发生复位。只有当计数器值小于窗口寄存器的值时,才能进行这个写操作。这个要被储存 在 WWDG_CR 寄存器中的值必须在 FFh 和 C0h 之间: ● 启动看门狗
看门狗通常在复位后被禁止。设置 WWDG_CR 寄存器中的 WDGA 位将启动看门狗, 一旦被启动后,看门狗则不能再被关闭,除非发生复位。
11.6.3
状态寄存器(WWDG_SR)
地址偏移量:08h 复位值:0000 0000(00h)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
保留
15 14 13 12 11 10 9
8
7
6
5
4
3
2
1
0
保留
EWIF rc_w0
位31:1 位0
保留。
EWIF: 提前唤醒中断标志 当计数器值达到40h时,此位由硬件置1。它必须通过软件写“0”来清除。对此位写“1”无 效。若中断未被使能,此位也会被置1。
7/6/2007
STM32F10x 参考手册
第一版
窗口看门狗(WWDG)
注:
11.4
● 控制递减计数器 递减计数器处于自由运行状态,即使看门狗被禁止,递减计数器仍继续递减计数。当看 门狗被启用时,T6 位必须被设置,以防止立即产生一个复位。 T[5:0]位包含了在看门狗产生复位之前的延时增量;复位前的延时时间在一个最小值和 一个最大值之间变化,这是因为写入 WWDG_CR 寄存器时,预分频值是未知的。