STMCU小助手
发布时间:2021-12-9 11:07
|
概述; I# R! _- K; ]& T' M 系统窗口看门狗(WWDG)用于检测软件故障的发生,通常由外部干扰或无法预料的逻辑条件引起,导致应用程序放弃其正常顺序。 看门狗电路会在编程的时间段到期时生成MCU复位,除非程序在T6位清零之前刷新倒数计数器的内容。如果在递减计数器达到窗口寄存器值之前刷新递减计数器值,也会产生MCU复位。这意味着必须在有限的窗口中刷新计数器。WWDG时钟是从APB时钟预分频的,并具有可配置的时间窗口,WWDG最适合要求看门狗在准确的时序窗口内做出反应的应用。 主要特性 激活窗口看门狗后,如满足如下条件则重置芯片: 当递减计数器的值小于0x40时 窗口值外重新加载递减计数器 如果启动了窗口看门狗并允许中断,当递减计数器等于0x40时产生提前唤醒中断(EWI),可以被用于重装栽计数器以避免WWDG复位。 用法& j2 ^" t8 u: y 如果看门狗被激活(WWDG_CR寄存器中的WDGA位置1),并且当7位递减计数器(T [6:0]位)从0x40递减到0x3F(T6被清除)时,它启动重置。 如果软件在计数器大于窗口寄存器中存储的值时重新加载计数器,则会产生复位。) E l( T+ c- @! m# g2 h B 在正常操作期间,应用程序必须定期在WWDG_CR寄存器中写入数据,以防止MCU复位。 仅当计数器值小于窗口寄存器值且大于0x3F时,才必须执行此操作。要存储在WWDG_CR寄存器中的值必须在0xFF和0xC0之间。) ]6 j Q% K# H8 B! W' C& t 框图 * U7 c. o3 W5 Z9 V# J. O* F6 r
启用看门狗 当FLASH选项字节WWDG_SW选择“软件窗口看门狗”时,看门狗在复位后始终被禁用。通过将WWDG_CR寄存器中的WDGA位置1可以启用它,然后只能通过复位将其禁用。 当FLASH选项字节WWDG_SW选择“硬件窗口监视程序”时,在复位后始终启用监视程序,因此不能将其禁用。 递减计数器用法" O5 o, u& n, { 该计数器可以自由运行,即使禁用了看门狗也可以递减计数。 当看门狗使能时,必须将T6bit置1以防止立即产生复位(即T[6:0]大于0x3F); ' L5 h, a! Q2 l5 {1 y4 _) [ 为防止复位,当计数器的值小于窗口寄存器的值且大于0x3F时,必须重新装入递减计数器。 下图描述了过程:2 i4 {- Y* _5 a
& A# S6 f3 k/ Y( O7 E: t( I! a 提前唤醒中断(EWI)) ~* \5 d1 D4 g6 i / L0 E/ I! |8 S S( Y2 J 通过将WWDG_CFR寄存器中的EWI位置1,可以使能EWI中断。当递减计数器达到值0x40时,将在重置芯片之前生成EWI中断,相应的中断服务程序(ISR)应该重新装入WWDG计数器以避免WWDG复位,然后触发所需的操作。通过将WWDG_SR寄存器的EWIF位写为0,可以清除EWI中断。当无法处理EWI中断时,例如由于较高优先级任务中的系统锁定,最终会产生WWDG重置。 计算超时时间
1 q' U- H7 r% ~& n5 L! y 如:当APB=48MHz,WDGTB[1:0]=3,T[5:0]=63时; ' a- r# ]% x" N! s3 E
寄存器 寄存器可通过半字(16位)或字(32位)进行访问。 ( J- H1 {. J% Y) a, a 控制寄存器(WWDG_CR) 4 p5 _* a. R+ P# H; p" h! Y 偏移地址:0x000 2 H# h D. I( U( v 复位值:0x0000 007F BIT7:WDGA(r/s),启用看门狗。由软件置1,只能通过复位让硬件清0。0:禁用看门狗、1:启用看门狗 ) {& }1 t6 m+ c* N' {6 a* W BIT 6:0:T[6:0](r/w),7位计数器(msb to lsb),当值从0x40减到0x3F时产生复位(T6bit被清除), n7 y% ^, k& o% t/ M1 [- t: t# T; o 0 O* \/ H7 i, t 配置寄存器(WWDG_CFG), T5 Z5 |! W7 b & p6 \2 \6 i) O& S4 q 偏移地址:0x0040 |7 ~/ @4 F1 y$ A9 V3 ^* K1 _# p ! y: P) H3 s l 复位值:0x0000 007F bit 13:11 WDGTB[2:0] (r/w),时基 9 e* f7 f- ?5 w3 L `% v) G* t 000: CK计数器时钟 (PCLK 分频4096) 除以1. h) K8 Q7 u7 V/ h( e 001: CK计数器时钟 (PCLK 分频4096) 除以26 i" [8 B. Y; Z9 d( B# w 010: CK计数器时钟 (PCLK 分频4096) 除以 4# D: q# m( V6 M: f- Y1 R4 ^ 011: CK计数器时钟 (PCLK 分频4096) 除以8 100: CK计数器时钟 (PCLK 分频4096) 除以16) q* d$ B& ~- y0 d& w1 @ 101: CK计数器时钟 (PCLK 分频4096) 除以32 110: CCK计数器时钟 (PCLK 分频4096) 除以645 B* p" q, [6 P 111: CCK计数器时钟 (PCLK 分频4096) 除以128: |2 j* i% `' W8 |& O, c 8 V8 y1 s+ `# L: e2 C1 p% [5 U: E( @ bit9 EWI (r/s), 提前唤醒中断位,置1时,只要计数器值到0x40就会发生中断。该中断仅在硬件复位后清楚。 ( o/ e: Y8 v, p- [ bit6:0 W[6:0](r/w),7位窗口值,用来与递减计数器比较的窗口值。8 m( a8 J/ F. b8 `6 U 状态寄存器(WWDG_SR)# _$ [6 K4 n0 z R & r6 c/ m/ Y" m l+ A: K 偏移值:0x008 * p2 X8 z* [( a! i7 s( r. l2 \ 复位值:0x0000 0000 bit0 EWIF(rc_w0) 提前唤醒中断标志,当计数器达到值0x40时,此位由硬件置1。 必须通过软件将其写入“ 0”来清除它。 写“ 1”无效。 如果未启用中断,则该位置1。2 j* }6 ]$ w4 n) Q 实验示例1 e# c9 a9 ?- {/ @5 F8 U- P 1、开启调试接口、HSE4 m; \3 K- x' d$ Q1 b
* `2 q& l# W/ e+ M" `- l/ y
2、 PA0设置为GPIO_Input,在NVIC中使能看门狗中断3 p" y: A5 T6 Y3 w; d" k
3、使能USART1,使用异步模式,波特率115200,8,none,13 j0 F7 C# L7 d6 J 3 f9 t# F7 m: U
2 d' K$ W1 P) f; ^ 4、激活WWDG,设置分频系数128,窗口值(64~127)=64,计数值=127 : L& N' n" _0 g+ n i3 u3 F
5、设置时钟树,HCLK=64MHz、PCLK=32MHz9 n/ E, l! \4 Z, ^ 3 r. h" r9 u( ]4 `6 w
6 ]2 \. n" l* w) [; y' m 6、利用上面的公式,计算当计数值T[6:0]到0x40的时间,引发EWI中断进入喂狗的时间2 y2 c3 q% @0 d$ n+ [ =1048.576ms: K7 f6 N5 z7 r: _* |. k' O7 N7 P - O7 F( v" W/ ~ E: M, R1 O 即每1048ms喂一次狗。- |4 |% i* A7 [6 m% } 7、设置工程文件属性,生成代码。
) H! v" x& }1 Z
3 f, T9 u% b# i- v$ d
+ R8 D2 i8 b6 g& \7 G/ L4 m- s , r* N& I/ J/ b# e: W r6 i( Z s 代码 1、在USART.c文件中加入串口打印代码
2、在main.c文件中加入开机打印代码,
加入EWI中断代码 . X+ I# F; D) ?3 k. {
3、编译,烧录之后就看到效果
( u8 ]1 E/ l, E% Z: d! U 1 F+ e8 \3 L* e1 H / \1 k& n0 ^# r; X |
实战经验 | 基于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库
微信公众号
手机版