STMCU小助手
发布时间:2021-12-9 11:07
|
概述 系统窗口看门狗(WWDG)用于检测软件故障的发生,通常由外部干扰或无法预料的逻辑条件引起,导致应用程序放弃其正常顺序。 看门狗电路会在编程的时间段到期时生成MCU复位,除非程序在T6位清零之前刷新倒数计数器的内容。如果在递减计数器达到窗口寄存器值之前刷新递减计数器值,也会产生MCU复位。这意味着必须在有限的窗口中刷新计数器。WWDG时钟是从APB时钟预分频的,并具有可配置的时间窗口,WWDG最适合要求看门狗在准确的时序窗口内做出反应的应用。 7 T) C# j: @2 [! r 主要特性 % h( |8 p# z/ n( P; @ 激活窗口看门狗后,如满足如下条件则重置芯片:3 K% I! T9 e% D" u* h& l" F 当递减计数器的值小于0x40时! [& {/ ]5 t+ x# W 窗口值外重新加载递减计数器 如果启动了窗口看门狗并允许中断,当递减计数器等于0x40时产生提前唤醒中断(EWI),可以被用于重装栽计数器以避免WWDG复位。 7 x, [# x1 w% o7 k1 d' f$ W. w! g- { 用法 如果看门狗被激活(WWDG_CR寄存器中的WDGA位置1),并且当7位递减计数器(T [6:0]位)从0x40递减到0x3F(T6被清除)时,它启动重置。 如果软件在计数器大于窗口寄存器中存储的值时重新加载计数器,则会产生复位。0 P( ^- D: e; E4 A: @ ; d- D- h# @9 ?1 { 在正常操作期间,应用程序必须定期在WWDG_CR寄存器中写入数据,以防止MCU复位。 仅当计数器值小于窗口寄存器值且大于0x3F时,才必须执行此操作。要存储在WWDG_CR寄存器中的值必须在0xFF和0xC0之间。5 K$ D7 D0 h+ v# t6 D0 D 框图7 e" _+ V; u5 s/ _! ]
启用看门狗' D: P2 O& @% r8 z# a9 c 当FLASH选项字节WWDG_SW选择“软件窗口看门狗”时,看门狗在复位后始终被禁用。通过将WWDG_CR寄存器中的WDGA位置1可以启用它,然后只能通过复位将其禁用。3 m- |, C. L9 | 当FLASH选项字节WWDG_SW选择“硬件窗口监视程序”时,在复位后始终启用监视程序,因此不能将其禁用。 递减计数器用法 该计数器可以自由运行,即使禁用了看门狗也可以递减计数。 当看门狗使能时,必须将T6bit置1以防止立即产生复位(即T[6:0]大于0x3F); 8 G% N) F# w: P 为防止复位,当计数器的值小于窗口寄存器的值且大于0x3F时,必须重新装入递减计数器。 下图描述了过程: / N3 B8 o. i* a% t b* V
提前唤醒中断(EWI): U4 Q2 P4 f( n' Y% s 通过将WWDG_CFR寄存器中的EWI位置1,可以使能EWI中断。当递减计数器达到值0x40时,将在重置芯片之前生成EWI中断,相应的中断服务程序(ISR)应该重新装入WWDG计数器以避免WWDG复位,然后触发所需的操作。通过将WWDG_SR寄存器的EWIF位写为0,可以清除EWI中断。当无法处理EWI中断时,例如由于较高优先级任务中的系统锁定,最终会产生WWDG重置。: l; d3 u6 Q9 O0 t Q. P, m$ P! W' w, Z- w, k ] 计算超时时间9 p9 a, m# y0 z- p
4 l, y+ d# B& ?+ d0 v( t' z; C 如:当APB=48MHz,WDGTB[1:0]=3,T[5:0]=63时;0 B2 p: Z! Z* J, S
寄存器. C; |2 B" }/ _1 A% ^7 ]* J7 Z 寄存器可通过半字(16位)或字(32位)进行访问。 控制寄存器(WWDG_CR) 2 E" o; g* N r& t! q( t# n 偏移地址:0x000 复位值:0x0000 007F BIT7:WDGA(r/s),启用看门狗。由软件置1,只能通过复位让硬件清0。0:禁用看门狗、1:启用看门狗, ?$ F$ l3 ?9 V- c7 z* f. q7 _ ! a `3 f5 O: C$ B. ^- f& j' S BIT 6:0:T[6:0](r/w),7位计数器(msb to lsb),当值从0x40减到0x3F时产生复位(T6bit被清除) 配置寄存器(WWDG_CFG)" [5 e: k( t: c) I, V - w' S# j' q5 B1 D 偏移地址:0x004 复位值:0x0000 007F0 T5 j+ l8 Y9 p$ b; A( k 9 Q1 s3 g$ A# q3 m9 J( p& ? bit 13:11 WDGTB[2:0] (r/w),时基 000: CK计数器时钟 (PCLK 分频4096) 除以1) ^( I+ n6 c2 j% T 001: CK计数器时钟 (PCLK 分频4096) 除以20 p7 e8 S# ]* A' ^ 010: CK计数器时钟 (PCLK 分频4096) 除以 4) `/ b9 c: Y9 E3 y x 011: CK计数器时钟 (PCLK 分频4096) 除以8; q8 d+ W% T' I3 n( J9 N" N 100: CK计数器时钟 (PCLK 分频4096) 除以16 101: CK计数器时钟 (PCLK 分频4096) 除以32+ V y% c9 y1 }' u 110: CCK计数器时钟 (PCLK 分频4096) 除以643 H" x' b* a7 e2 \' F( M7 ] 111: CCK计数器时钟 (PCLK 分频4096) 除以128 R y) p9 A4 i0 m bit9 EWI (r/s), 提前唤醒中断位,置1时,只要计数器值到0x40就会发生中断。该中断仅在硬件复位后清楚。 bit6:0 W[6:0](r/w),7位窗口值,用来与递减计数器比较的窗口值。9 `, x9 M4 Y* z6 V3 i& k$ C 6 m, E/ g5 h0 M% S; K# B 状态寄存器(WWDG_SR) " j$ y- P$ i! v' {5 X 偏移值:0x008 Z! R4 J1 S0 l% X0 v 复位值:0x0000 0000 C1 W8 x. \$ Y! m$ E# k bit0 EWIF(rc_w0) 提前唤醒中断标志,当计数器达到值0x40时,此位由硬件置1。 必须通过软件将其写入“ 0”来清除它。 写“ 1”无效。 如果未启用中断,则该位置1。9 |# A4 H" d8 h6 r 8 B! Q( g+ |, h 实验示例! G1 m8 d/ m* P* H* | a1 x 1、开启调试接口、HSE
9 Y8 p# |# Q& r5 W2 Q+ f
" L U: b' d) a0 w 2、 PA0设置为GPIO_Input,在NVIC中使能看门狗中断% O. J$ t9 N) F7 Y; I( A# j) a9 b 1 r4 |2 q# S$ t6 ^/ L/ \9 k
3、使能USART1,使用异步模式,波特率115200,8,none,1
6 g6 }9 G& i$ G 4、激活WWDG,设置分频系数128,窗口值(64~127)=64,计数值=127
- S- B* E, h4 x& e2 y 5、设置时钟树,HCLK=64MHz、PCLK=32MHz " F6 O6 {% w5 @1 x# s) t
6、利用上面的公式,计算当计数值T[6:0]到0x40的时间,引发EWI中断进入喂狗的时间 =1048.576ms 即每1048ms喂一次狗。 3 H% R) O8 ?0 b0 e P7 ` 7、设置工程文件属性,生成代码。! `6 } g: k) O- G6 [% |4 j X - e: j8 N% s+ I. A. w
代码 ' R1 y+ \6 g* u/ \ 1、在USART.c文件中加入串口打印代码8 o% x, c: F+ _7 d
2、在main.c文件中加入开机打印代码,2 k7 p- }) Z4 g5 S2 G0 o) h
加入EWI中断代码 6 a! B" z6 u: v8 e' G- O
3、编译,烧录之后就看到效果( E9 T5 W$ {1 h- n) R9 A ' @0 ^- E# y* z; h% E R
|
实战经验 | 基于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库
微信公众号
手机版