STMCU小助手
发布时间:2022-10-28 18:39
|
概述 系统窗口看门狗(WWDG)用于检测软件故障的发生,通常由外部干扰或无法预料的逻辑条件引起,导致应用程序放弃其正常顺序。 看门狗电路会在编程的时间段到期时生成MCU复位,除非程序在T6位清零之前刷新倒数计数器的内容。如果在递减计数器达到窗口寄存器值之前刷新递减计数器值,也会产生MCU复位。这意味着必须在有限的窗口中刷新计数器。WWDG时钟是从APB时钟预分频的,并具有可配置的时间窗口,WWDG最适合要求看门狗在准确的时序窗口内做出反应的应用。% a; K8 [- ?* w0 Y+ Z9 `+ d 主要特性 $ q8 q: [9 h6 [# f 激活窗口看门狗后,如满足如下条件则重置芯片:% \- S. R: B7 o7 R 当递减计数器的值小于0x40时 窗口值外重新加载递减计数器( a9 }+ J1 o% k0 V* P 如果启动了窗口看门狗并允许中断,当递减计数器等于0x40时产生提前唤醒中断(EWI),可以被用于重装栽计数器以避免WWDG复位。 用法 如果看门狗被激活(WWDG_CR寄存器中的WDGA位置1),并且当7位递减计数器(T [6:0]位)从0x40递减到0x3F(T6被清除)时,它启动重置。 如果软件在计数器大于窗口寄存器中存储的值时重新加载计数器,则会产生复位。 3 e# @: D# M6 }% G) w2 M 在正常操作期间,应用程序必须定期在WWDG_CR寄存器中写入数据,以防止MCU复位。 仅当计数器值小于窗口寄存器值且大于0x3F时,才必须执行此操作。要存储在WWDG_CR寄存器中的值必须在0xFF和0xC0之间。 5 f" c% T! R7 ^" p7 D* D 框图& ^9 E% H1 I" ? 3 e2 Z# g, l5 y4 e8 P9 X' u
启用看门狗 当FLASH选项字节WWDG_SW选择“软件窗口看门狗”时,看门狗在复位后始终被禁用。通过将WWDG_CR寄存器中的WDGA位置1可以启用它,然后只能通过复位将其禁用。 当FLASH选项字节WWDG_SW选择“硬件窗口监视程序”时,在复位后始终启用监视程序,因此不能将其禁用。 递减计数器用法 该计数器可以自由运行,即使禁用了看门狗也可以递减计数。 当看门狗使能时,必须将T6bit置1以防止立即产生复位(即T[6:0]大于0x3F); 为防止复位,当计数器的值小于窗口寄存器的值且大于0x3F时,必须重新装入递减计数器。 下图描述了过程:! N! p: S) y. k9 F6 X* z9 j$ O! p
提前唤醒中断(EWI) 通过将WWDG_CFR寄存器中的EWI位置1,可以使能EWI中断。当递减计数器达到值0x40时,将在重置芯片之前生成EWI中断,相应的中断服务程序(ISR)应该重新装入WWDG计数器以避免WWDG复位,然后触发所需的操作。通过将WWDG_SR寄存器的EWIF位写为0,可以清除EWI中断。当无法处理EWI中断时,例如由于较高优先级任务中的系统锁定,最终会产生WWDG重置。* X" H; V% Q2 L6 N W [0 Y0 S+ j* a) g2 v$ ~, c 计算超时时间
8 V7 c; \" s6 A 如:当APB=48MHz,WDGTB[1:0]=3,T[5:0]=63时;) g$ F1 s) ], {. w4 l: G, b# q, { x( f9 N5 g# j/ B/ Y$ K; i
寄存器 寄存器可通过半字(16位)或字(32位)进行访问。 控制寄存器(WWDG_CR) 8 @$ v! T. M( z$ e/ { c 偏移地址:0x000 ( p; l9 h: t8 C 复位值:0x0000 007F: H. u0 r% C) B, p5 K! K( y! | BIT7:WDGA(r/s),启用看门狗。由软件置1,只能通过复位让硬件清0。0:禁用看门狗、1:启用看门狗! x4 D9 m3 I4 ]% M2 |' S' F C- ` + G Q. ?" _4 N8 [, Q: S. R6 X BIT 6:0:T[6:0](r/w),7位计数器(msb to lsb),当值从0x40减到0x3F时产生复位(T6bit被清除) & f7 z) z9 _, v 配置寄存器(WWDG_CFG)/ _% ?9 B! p& b; f5 f / ] t& e# y6 t7 Q% O# ^2 U 偏移地址:0x004 - A8 P7 j4 E' `& [3 R, Y 复位值:0x0000 007F 9 ~9 x/ Z* L( T0 g' U9 a/ o7 v8 n/ v bit 13:11 WDGTB[2:0] (r/w),时基4 D' D' U/ Q" X. }: B- r 000: CK计数器时钟 (PCLK 分频4096) 除以10 _" N" [) [) Q* B3 ^/ N" n 001: CK计数器时钟 (PCLK 分频4096) 除以21 J. r0 E; p2 j. D- j 010: CK计数器时钟 (PCLK 分频4096) 除以 4 011: CK计数器时钟 (PCLK 分频4096) 除以8+ z9 W! d( _: g3 q" V 100: CK计数器时钟 (PCLK 分频4096) 除以16# ]' q0 W+ G+ I: E" {. A 101: CK计数器时钟 (PCLK 分频4096) 除以32 110: CCK计数器时钟 (PCLK 分频4096) 除以64$ a/ x( ]9 H& r% g/ Y 111: CCK计数器时钟 (PCLK 分频4096) 除以128 bit9 EWI (r/s), 提前唤醒中断位,置1时,只要计数器值到0x40就会发生中断。该中断仅在硬件复位后清楚。 bit6:0 W[6:0](r/w),7位窗口值,用来与递减计数器比较的窗口值。 9 W) \5 O9 x- y( B$ {* ] 状态寄存器(WWDG_SR)+ X/ a$ g$ L1 { t' d * k& h7 [2 Q q) [) z 偏移值:0x008* M8 B0 V) y9 [* c( i3 T 复位值:0x0000 0000/ m* G8 o/ u2 K% T/ m% j* B" t# [& M bit0 EWIF(rc_w0) 提前唤醒中断标志,当计数器达到值0x40时,此位由硬件置1。 必须通过软件将其写入“ 0”来清除它。 写“ 1”无效。 如果未启用中断,则该位置1。# S$ I: G+ H3 F 实验示例 b0 o! S, {" ~2 D, \' ^ 1、开启调试接口、HSE# q/ u! s+ t* d; \. ? G0 _* b. V 1 T4 p, T8 A; p9 |* f
2 O$ m" t, _% l, S! l: X4 x8 G' d
2、 PA0设置为GPIO_Input,在NVIC中使能看门狗中断) c, z) S8 f4 _( T& |% @ 3 X3 \- u2 q. L" C2 E6 q. j* o
3、使能USART1,使用异步模式,波特率115200,8,none,1: A/ n, I {6 g6 W6 s9 ] + t* N: t7 q; G# S4 l7 X
* n: B% f* v/ Z; [$ t( S9 Q7 u
/ j8 `/ U7 x& z6 o 4、激活WWDG,设置分频系数128,窗口值(64~127)=64,计数值=127 4 T* h( m( ^. Y! ^/ e8 ^
5、设置时钟树,HCLK=64MHz、PCLK=32MHz& d% W, W3 O/ X1 a# |- x
4 m+ I+ h/ _3 n 6、利用上面的公式,计算当计数值T[6:0]到0x40的时间,引发EWI中断进入喂狗的时间 + l2 E# M, V0 B# S2 i1 G =1048.576ms |$ w! K4 R2 d' }9 w/ ?% U 4 v& X% q% l5 a 即每1048ms喂一次狗。6 j/ U6 ?9 Q1 m, Y" R & ~& j1 }, p- j' d0 n% W, f 7、设置工程文件属性,生成代码。+ t! E5 N2 d C
7 n5 o) M& @& y: v- O* `' q
代码 j/ @7 {/ ~8 t( Z F 1、在USART.c文件中加入串口打印代码 5 O4 q0 s$ m' C$ T6 P$ I- x
2、在main.c文件中加入开机打印代码,8 N q0 \5 u9 u5 l' H6 P 8 r9 E1 x( \' v* S8 ~6 y2 O
加入EWI中断代码 + A9 a0 B& \+ y, a8 m3 s
3、编译,烧录之后就看到效果
————————————————, K5 G* l j7 T! j, j 版权声明:SCCELE e7 E) k% o4 ^) E $ q3 m: K4 E6 d8 R+ Y |
实战经验 | 基于STM32G0B1的全桥移相+同步整流PWM解决方案
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【福利三:逢7发帖赢大礼】8、基于STM32G070板子的Ymodem串口协议IAP Bootloader开发
【福利三:逢7发帖赢大礼】7、基于STM32G070板子TF卡的FATFS移植
【福利三:逢7发帖赢大礼】6、基于STM32G070板子spiflash的FATFS移植
【福利三:逢7发帖赢大礼】5、基于STM32G070板子IRDA红外遥控接收解码
【福利三:逢7发帖赢大礼】4、基于STM32G070板子SPI flash 移植SFUD库
【福利三:逢7发帖赢大礼】基于STM32G070板子的uart shell移植设计
【福利三:逢7发帖赢大礼】3、基于STM32G070板子的YModem串口协议通信
【福利三:逢7发帖赢大礼】2、基于STM32G070板子的OLED移植U8G2库
微信公众号
手机版