STMCU小助手
发布时间:2021-12-9 11:07
|
概述 系统窗口看门狗(WWDG)用于检测软件故障的发生,通常由外部干扰或无法预料的逻辑条件引起,导致应用程序放弃其正常顺序。 看门狗电路会在编程的时间段到期时生成MCU复位,除非程序在T6位清零之前刷新倒数计数器的内容。如果在递减计数器达到窗口寄存器值之前刷新递减计数器值,也会产生MCU复位。这意味着必须在有限的窗口中刷新计数器。WWDG时钟是从APB时钟预分频的,并具有可配置的时间窗口,WWDG最适合要求看门狗在准确的时序窗口内做出反应的应用。# o1 F5 H0 l, j4 a. V/ O* t) Q 主要特性 激活窗口看门狗后,如满足如下条件则重置芯片:5 G7 ]* N. \8 [0 W& M* D 当递减计数器的值小于0x40时 窗口值外重新加载递减计数器 如果启动了窗口看门狗并允许中断,当递减计数器等于0x40时产生提前唤醒中断(EWI),可以被用于重装栽计数器以避免WWDG复位。 用法: \( e/ b, a7 H1 D" a k) s 如果看门狗被激活(WWDG_CR寄存器中的WDGA位置1),并且当7位递减计数器(T [6:0]位)从0x40递减到0x3F(T6被清除)时,它启动重置。 如果软件在计数器大于窗口寄存器中存储的值时重新加载计数器,则会产生复位。( S+ {1 \! R" G" G- D+ o; t 3 _% G4 [: a+ [8 S! I 在正常操作期间,应用程序必须定期在WWDG_CR寄存器中写入数据,以防止MCU复位。 仅当计数器值小于窗口寄存器值且大于0x3F时,才必须执行此操作。要存储在WWDG_CR寄存器中的值必须在0xFF和0xC0之间。1 s: `4 M& G4 u9 d; u 框图 2 D3 Y! Y% a6 v7 o: k
+ W5 Y- f h) \ O- p7 F7 r 启用看门狗 当FLASH选项字节WWDG_SW选择“软件窗口看门狗”时,看门狗在复位后始终被禁用。通过将WWDG_CR寄存器中的WDGA位置1可以启用它,然后只能通过复位将其禁用。 当FLASH选项字节WWDG_SW选择“硬件窗口监视程序”时,在复位后始终启用监视程序,因此不能将其禁用。 ; h& ~$ d, Q# @5 j( O* Y 递减计数器用法# Y U* r9 \( ?- c6 z 该计数器可以自由运行,即使禁用了看门狗也可以递减计数。 当看门狗使能时,必须将T6bit置1以防止立即产生复位(即T[6:0]大于0x3F); 为防止复位,当计数器的值小于窗口寄存器的值且大于0x3F时,必须重新装入递减计数器。 下图描述了过程: 3 `7 c/ k7 Z4 m$ Q
提前唤醒中断(EWI) 通过将WWDG_CFR寄存器中的EWI位置1,可以使能EWI中断。当递减计数器达到值0x40时,将在重置芯片之前生成EWI中断,相应的中断服务程序(ISR)应该重新装入WWDG计数器以避免WWDG复位,然后触发所需的操作。通过将WWDG_SR寄存器的EWIF位写为0,可以清除EWI中断。当无法处理EWI中断时,例如由于较高优先级任务中的系统锁定,最终会产生WWDG重置。 H5 T6 R3 Q$ f% K8 Y& b/ _/ C) v & |/ [8 Z/ n; g, K9 ?# c 计算超时时间0 Q0 z1 Z: o1 W+ b
如:当APB=48MHz,WDGTB[1:0]=3,T[5:0]=63时;! H; M4 I. |9 T- A2 B' @ % b5 \, S1 ?1 Z) V" s
寄存器) e/ d( z& |! L7 w! j, N 寄存器可通过半字(16位)或字(32位)进行访问。# x3 o$ T7 w3 k) A" J" P W 控制寄存器(WWDG_CR) ' W; R, v: o! C% g 偏移地址:0x000 复位值:0x0000 007F ! H9 p1 g- F8 ]; D' V+ | BIT7:WDGA(r/s),启用看门狗。由软件置1,只能通过复位让硬件清0。0:禁用看门狗、1:启用看门狗 ; p: ]& N3 n9 p7 t! [# b( q BIT 6:0:T[6:0](r/w),7位计数器(msb to lsb),当值从0x40减到0x3F时产生复位(T6bit被清除) / D7 f) n Q. ^. b. I' z R 配置寄存器(WWDG_CFG) 偏移地址:0x004. M' n( |" n9 D7 q6 f3 }" \9 [ V5 n- L: i 复位值:0x0000 007F( S1 \$ C+ L+ d8 q8 n! ? i bit 13:11 WDGTB[2:0] (r/w),时基3 _3 ~% T& l: h5 Y0 K 000: CK计数器时钟 (PCLK 分频4096) 除以1 001: CK计数器时钟 (PCLK 分频4096) 除以24 B, H( k' l( {2 X) m5 U5 B1 {/ B 010: CK计数器时钟 (PCLK 分频4096) 除以 4 011: CK计数器时钟 (PCLK 分频4096) 除以8! y. \. s& X; L z( I% K4 z 100: CK计数器时钟 (PCLK 分频4096) 除以16 101: CK计数器时钟 (PCLK 分频4096) 除以32# U2 B/ k3 u# R% @0 Q' G 110: CCK计数器时钟 (PCLK 分频4096) 除以64 111: CCK计数器时钟 (PCLK 分频4096) 除以128: Q, f, W, T3 ]$ i; d5 ~ 6 a& s- |& y5 X: Y+ N/ G) y9 o bit9 EWI (r/s), 提前唤醒中断位,置1时,只要计数器值到0x40就会发生中断。该中断仅在硬件复位后清楚。5 ^/ c3 J' l; h5 `& D 4 F* ~* c1 y3 x/ ?7 u* Y& i( j bit6:0 W[6:0](r/w),7位窗口值,用来与递减计数器比较的窗口值。 状态寄存器(WWDG_SR): Z P; W/ R. Y1 G8 b- m% l9 ^8 c( V ! J6 w2 F5 A8 w 偏移值:0x008& u# D1 R7 g6 _9 t& A7 d/ Q ' H) ^4 [- n. p 复位值:0x0000 0000, ?6 ~7 k1 ?: }, y8 l6 \ 7 Y2 z N* U7 n3 | bit0 EWIF(rc_w0) 提前唤醒中断标志,当计数器达到值0x40时,此位由硬件置1。 必须通过软件将其写入“ 0”来清除它。 写“ 1”无效。 如果未启用中断,则该位置1。 0 [5 W( ?4 p" c 实验示例2 u: L# f7 C6 B& o 1、开启调试接口、HSE* x7 s) D3 |: k1 n/ p ( ]: L9 i3 P) X C
. l# G+ i( H6 g6 u' A! I, g
2、 PA0设置为GPIO_Input,在NVIC中使能看门狗中断* l* l. e$ t; k% s; w; M5 V) T
5 ~* A! B2 T) p4 m9 [. m 3、使能USART1,使用异步模式,波特率115200,8,none,1" B5 P5 d4 O$ Z6 Q+ d E5 J+ T% X k$ y ' P# K! I( q- L& n# L+ N
1 i5 g5 z" r4 v5 M6 j
4、激活WWDG,设置分频系数128,窗口值(64~127)=64,计数值=127 5 Q2 f7 r- R8 ]
5、设置时钟树,HCLK=64MHz、PCLK=32MHz, h- k; t& J) ] L) Q
6、利用上面的公式,计算当计数值T[6:0]到0x40的时间,引发EWI中断进入喂狗的时间 =1048.576ms 即每1048ms喂一次狗。+ M2 }' A2 k# q$ b8 ?4 F5 ?; C3 k 1 r+ L: s" v# J7 Q3 T7 ?+ ]# T 7、设置工程文件属性,生成代码。# d% e3 a. Y q 1 U/ J: g( L7 O( x6 C9 }
$ `( r7 X: F+ ?+ c# B- b3 A, p " p, d; ^( a3 s# W
. u: c( I8 a8 d5 W9 H
$ S. f0 i) \/ y # n5 @" b z7 d; S$ h 代码 1、在USART.c文件中加入串口打印代码
2、在main.c文件中加入开机打印代码, 1 k5 X3 ?: T% S- u ^
加入EWI中断代码+ l6 m' Z: w1 W! O 0 F+ z2 F, z$ H3 Z
3、编译,烧录之后就看到效果
/ G, O1 K! ] I* T" i+ X X7 z# A/ T. f8 M- [ |
实战经验 | 基于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库
微信公众号
手机版