STMCU小助手
发布时间:2021-12-9 11:07
|
概述# I- P E& _/ j s& w 系统窗口看门狗(WWDG)用于检测软件故障的发生,通常由外部干扰或无法预料的逻辑条件引起,导致应用程序放弃其正常顺序。 看门狗电路会在编程的时间段到期时生成MCU复位,除非程序在T6位清零之前刷新倒数计数器的内容。如果在递减计数器达到窗口寄存器值之前刷新递减计数器值,也会产生MCU复位。这意味着必须在有限的窗口中刷新计数器。WWDG时钟是从APB时钟预分频的,并具有可配置的时间窗口,WWDG最适合要求看门狗在准确的时序窗口内做出反应的应用。 2 o. C" j% e k7 M3 ] 主要特性 激活窗口看门狗后,如满足如下条件则重置芯片:% n" A: y' M+ J, `/ @' a1 U0 \" e0 _ * @; i- w+ E9 t$ M" u 当递减计数器的值小于0x40时 窗口值外重新加载递减计数器1 z k4 Y5 ^8 [ U 如果启动了窗口看门狗并允许中断,当递减计数器等于0x40时产生提前唤醒中断(EWI),可以被用于重装栽计数器以避免WWDG复位。 + \6 Y4 A9 {7 N- V4 f 用法. L8 L* }( s' Q1 [5 f/ } 如果看门狗被激活(WWDG_CR寄存器中的WDGA位置1),并且当7位递减计数器(T [6:0]位)从0x40递减到0x3F(T6被清除)时,它启动重置。 如果软件在计数器大于窗口寄存器中存储的值时重新加载计数器,则会产生复位。 - @. ~% g# j& b, t 在正常操作期间,应用程序必须定期在WWDG_CR寄存器中写入数据,以防止MCU复位。 仅当计数器值小于窗口寄存器值且大于0x3F时,才必须执行此操作。要存储在WWDG_CR寄存器中的值必须在0xFF和0xC0之间。 1 a6 \/ h* f" ] 框图 . V, x5 q/ ~2 d# k
% h* V, z F( J; ?1 U8 b, ? 启用看门狗" G: N( H+ V" E1 ~6 ~3 ]6 b 当FLASH选项字节WWDG_SW选择“软件窗口看门狗”时,看门狗在复位后始终被禁用。通过将WWDG_CR寄存器中的WDGA位置1可以启用它,然后只能通过复位将其禁用。 当FLASH选项字节WWDG_SW选择“硬件窗口监视程序”时,在复位后始终启用监视程序,因此不能将其禁用。 递减计数器用法! G# o' V) M8 ]9 K( l& A 该计数器可以自由运行,即使禁用了看门狗也可以递减计数。 当看门狗使能时,必须将T6bit置1以防止立即产生复位(即T[6:0]大于0x3F); $ C( C$ {( w7 X2 W6 E. q 为防止复位,当计数器的值小于窗口寄存器的值且大于0x3F时,必须重新装入递减计数器。 下图描述了过程: . F8 ^: f# R+ N8 A- u3 B1 l2 O; m7 V5 w
$ ~& y& E# P/ o% K9 L1 I 提前唤醒中断(EWI) . A& A r/ t" B2 c 通过将WWDG_CFR寄存器中的EWI位置1,可以使能EWI中断。当递减计数器达到值0x40时,将在重置芯片之前生成EWI中断,相应的中断服务程序(ISR)应该重新装入WWDG计数器以避免WWDG复位,然后触发所需的操作。通过将WWDG_SR寄存器的EWIF位写为0,可以清除EWI中断。当无法处理EWI中断时,例如由于较高优先级任务中的系统锁定,最终会产生WWDG重置。 计算超时时间 ( ?( x+ p* o0 d# x z
6 y7 a( C$ {0 @ 如:当APB=48MHz,WDGTB[1:0]=3,T[5:0]=63时; 0 Q0 _- j7 F: A; q. h: l3 N
' J; e3 N& N( z; h 寄存器 寄存器可通过半字(16位)或字(32位)进行访问。1 p1 Q) x" z! Z4 F7 X& e 控制寄存器(WWDG_CR). e9 {# s9 ^6 X/ I& d9 _% b+ E " E4 ]) _. ^* z; i0 |/ R2 B9 C 偏移地址:0x000 复位值:0x0000 007F0 }* i! I$ g* t1 ? BIT7:WDGA(r/s),启用看门狗。由软件置1,只能通过复位让硬件清0。0:禁用看门狗、1:启用看门狗& n# R c; s- \1 P; d/ p ; I2 k1 {' W$ i9 P9 ? BIT 6:0:T[6:0](r/w),7位计数器(msb to lsb),当值从0x40减到0x3F时产生复位(T6bit被清除)8 r: R9 o- c9 E7 R1 ?7 N9 R 配置寄存器(WWDG_CFG) 偏移地址:0x004 - X) r/ f# P2 A$ P 复位值:0x0000 007F 0 f& d& ]2 j3 Z) a b; c bit 13:11 WDGTB[2:0] (r/w),时基 ; h y2 x$ i- }1 s& M& z7 K2 \9 ? 000: CK计数器时钟 (PCLK 分频4096) 除以1 001: CK计数器时钟 (PCLK 分频4096) 除以2 010: CK计数器时钟 (PCLK 分频4096) 除以 4+ ]' k2 t. U) l5 P# l! t 011: CK计数器时钟 (PCLK 分频4096) 除以8 100: CK计数器时钟 (PCLK 分频4096) 除以16 101: CK计数器时钟 (PCLK 分频4096) 除以32; Z% V" Z3 c% ? 110: CCK计数器时钟 (PCLK 分频4096) 除以648 T5 e3 ?' o+ Y' h0 p 111: CCK计数器时钟 (PCLK 分频4096) 除以128 a/ T1 H1 [. h8 c% C bit9 EWI (r/s), 提前唤醒中断位,置1时,只要计数器值到0x40就会发生中断。该中断仅在硬件复位后清楚。 bit6:0 W[6:0](r/w),7位窗口值,用来与递减计数器比较的窗口值。( g2 Z+ G3 {: T) j& e( \ 状态寄存器(WWDG_SR) 偏移值:0x008- ~' Q7 S$ |2 K, Q 5 O7 H5 J" {! |% `; ? 复位值:0x0000 0000 ! _* Q) X ~7 E" d; b! F6 ] bit0 EWIF(rc_w0) 提前唤醒中断标志,当计数器达到值0x40时,此位由硬件置1。 必须通过软件将其写入“ 0”来清除它。 写“ 1”无效。 如果未启用中断,则该位置1。 实验示例: Z$ n, ~0 l# F7 v! q" Q0 S 1、开启调试接口、HSE4 [6 |* D9 \! b & j8 l2 `; ^: {4 E
& e' G& j2 e/ Z! J 2、 PA0设置为GPIO_Input,在NVIC中使能看门狗中断 " _2 B" r6 h' y1 i5 G3 R. y
3、使能USART1,使用异步模式,波特率115200,8,none,1+ t H Y/ q( u2 O. g* K 4 C; o7 z/ D1 y1 ?" l+ r
4、激活WWDG,设置分频系数128,窗口值(64~127)=64,计数值=127
/ Q( D: M5 F# v& h9 ` 5、设置时钟树,HCLK=64MHz、PCLK=32MHz, E6 P7 u; N9 D, v
& \# y, \8 f8 f 6、利用上面的公式,计算当计数值T[6:0]到0x40的时间,引发EWI中断进入喂狗的时间 =1048.576ms- {3 ~: ?, h5 u" y9 ^ 即每1048ms喂一次狗。 7、设置工程文件属性,生成代码。( w/ q4 q6 M" X8 S! `5 f 2 @0 s% ]& T& r
$ u/ p( q3 l. E2 a2 ? T2 J
2 f& P) R3 W- g5 R) m' h _: K) b
& B- v' r+ l8 M* Z: X 代码 * Q2 y4 u# Q. t 1、在USART.c文件中加入串口打印代码
2、在main.c文件中加入开机打印代码, : J# H9 m& k( T7 n4 ^1 u) |& g. N- B
加入EWI中断代码 6 H% N) b9 p5 K+ Q% e7 \' j6 Q
3、编译,烧录之后就看到效果
6 ^$ f3 \. ?8 }( O |
实战经验 | 基于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库
微信公众号
手机版