STMCU小助手
发布时间:2022-10-28 18:39
|
概述 系统窗口看门狗(WWDG)用于检测软件故障的发生,通常由外部干扰或无法预料的逻辑条件引起,导致应用程序放弃其正常顺序。 看门狗电路会在编程的时间段到期时生成MCU复位,除非程序在T6位清零之前刷新倒数计数器的内容。如果在递减计数器达到窗口寄存器值之前刷新递减计数器值,也会产生MCU复位。这意味着必须在有限的窗口中刷新计数器。WWDG时钟是从APB时钟预分频的,并具有可配置的时间窗口,WWDG最适合要求看门狗在准确的时序窗口内做出反应的应用。+ P& _0 s- g8 c" R" J7 d( I4 ` 7 r/ i ^) y/ [" T3 y 主要特性 1 [+ [5 m- C3 j: k! ^4 i, t( D 激活窗口看门狗后,如满足如下条件则重置芯片: 当递减计数器的值小于0x40时 窗口值外重新加载递减计数器 如果启动了窗口看门狗并允许中断,当递减计数器等于0x40时产生提前唤醒中断(EWI),可以被用于重装栽计数器以避免WWDG复位。9 e8 e: F+ L: S! s1 i3 d x( @. H# W 7 [* j( H0 `& B7 { 用法 如果看门狗被激活(WWDG_CR寄存器中的WDGA位置1),并且当7位递减计数器(T [6:0]位)从0x40递减到0x3F(T6被清除)时,它启动重置。 如果软件在计数器大于窗口寄存器中存储的值时重新加载计数器,则会产生复位。 在正常操作期间,应用程序必须定期在WWDG_CR寄存器中写入数据,以防止MCU复位。 仅当计数器值小于窗口寄存器值且大于0x3F时,才必须执行此操作。要存储在WWDG_CR寄存器中的值必须在0xFF和0xC0之间。 框图8 b, x( H; t9 j9 ^3 r
启用看门狗 当FLASH选项字节WWDG_SW选择“软件窗口看门狗”时,看门狗在复位后始终被禁用。通过将WWDG_CR寄存器中的WDGA位置1可以启用它,然后只能通过复位将其禁用。: R2 K; h, ?* c/ M2 h2 b9 d- F# C+ u 当FLASH选项字节WWDG_SW选择“硬件窗口监视程序”时,在复位后始终启用监视程序,因此不能将其禁用。 % t( q) Y( J& T* k& c) R 2 D* X: Q. \, i 递减计数器用法# K' F% G7 ^ ]% d0 z% y 该计数器可以自由运行,即使禁用了看门狗也可以递减计数。 当看门狗使能时,必须将T6bit置1以防止立即产生复位(即T[6:0]大于0x3F);' e7 x* D7 P3 g) Q" A% [ / Y& W6 e6 x" B3 V 为防止复位,当计数器的值小于窗口寄存器的值且大于0x3F时,必须重新装入递减计数器。 下图描述了过程:
提前唤醒中断(EWI). `. X& R. U5 W 通过将WWDG_CFR寄存器中的EWI位置1,可以使能EWI中断。当递减计数器达到值0x40时,将在重置芯片之前生成EWI中断,相应的中断服务程序(ISR)应该重新装入WWDG计数器以避免WWDG复位,然后触发所需的操作。通过将WWDG_SR寄存器的EWIF位写为0,可以清除EWI中断。当无法处理EWI中断时,例如由于较高优先级任务中的系统锁定,最终会产生WWDG重置。 - z" `. Z( B/ c! X% l! _3 c 计算超时时间+ v3 l/ z8 M( n( \% S% ]
0 n5 y* j" S6 B+ e4 O( Q 如:当APB=48MHz,WDGTB[1:0]=3,T[5:0]=63时; , O/ q/ ` v3 w$ ^& w6 {! z# z
寄存器 寄存器可通过半字(16位)或字(32位)进行访问。5 f p! A! B) y* z' W * ^! d; b: o: m6 G8 Y/ } 控制寄存器(WWDG_CR) ^$ V. X9 L; | 偏移地址:0x000 ' I* Q8 v2 h7 q9 l 复位值:0x0000 007F4 I$ E: C9 ~: C% x/ {5 ]$ W5 R / w3 U% f3 @- R- }6 r; C BIT7:WDGA(r/s),启用看门狗。由软件置1,只能通过复位让硬件清0。0:禁用看门狗、1:启用看门狗 " U0 h+ F2 W% E- ^7 J9 n BIT 6:0:T[6:0](r/w),7位计数器(msb to lsb),当值从0x40减到0x3F时产生复位(T6bit被清除)# j1 I. \# G+ [& y7 G. s, V 配置寄存器(WWDG_CFG) ( ~: Y& Y4 E$ |* ? 偏移地址:0x004: {3 V5 r" ?0 x) X- ^ 复位值:0x0000 007F bit 13:11 WDGTB[2:0] (r/w),时基/ U9 `; {9 n5 ]2 N, E. m ) u9 `% B) [( O" X9 V1 d 000: CK计数器时钟 (PCLK 分频4096) 除以1$ n" h$ F( J) W% @8 v: H 001: CK计数器时钟 (PCLK 分频4096) 除以2 010: CK计数器时钟 (PCLK 分频4096) 除以 4/ r6 e1 g: W n0 J) N% r 011: CK计数器时钟 (PCLK 分频4096) 除以81 h- E4 \# y: e" H Z 100: CK计数器时钟 (PCLK 分频4096) 除以163 o" I# e5 w1 l2 G7 ^9 @- a+ L 101: CK计数器时钟 (PCLK 分频4096) 除以32 110: CCK计数器时钟 (PCLK 分频4096) 除以643 I" ^5 E( X- _7 m. M+ Z/ l 111: CCK计数器时钟 (PCLK 分频4096) 除以128 6 F; _7 W$ o% I [% e bit9 EWI (r/s), 提前唤醒中断位,置1时,只要计数器值到0x40就会发生中断。该中断仅在硬件复位后清楚。 bit6:0 W[6:0](r/w),7位窗口值,用来与递减计数器比较的窗口值。4 E4 S3 q/ l& Y + h% Y+ H( u( F& P- y 状态寄存器(WWDG_SR) $ d/ W& f( p. |& i+ Z 偏移值:0x008; t$ I3 I* j- E3 p, p& C) ? 复位值:0x0000 0000 bit0 EWIF(rc_w0) 提前唤醒中断标志,当计数器达到值0x40时,此位由硬件置1。 必须通过软件将其写入“ 0”来清除它。 写“ 1”无效。 如果未启用中断,则该位置1。3 W6 ?) j: m2 L* U! O! ]8 J+ H- h: j 3 u% M" n$ @0 j @. X( d7 j! r5 K 实验示例 1、开启调试接口、HSE
2 _( K% h8 K: c 2、 PA0设置为GPIO_Input,在NVIC中使能看门狗中断 7 A5 n, g& _4 C: X6 A! H2 I
4 O( h" T! a2 C6 m5 ?! S 3、使能USART1,使用异步模式,波特率115200,8,none,14 }5 m2 g0 N& M# p4 F
" \. t. q2 M8 d& x) c 4、激活WWDG,设置分频系数128,窗口值(64~127)=64,计数值=127 a2 d% ~9 Q3 }' k& y3 W1 b, O6 \7 T
0 R% l! A4 R& G" c) U( H: C 5、设置时钟树,HCLK=64MHz、PCLK=32MHz 6 J/ q( |- j# N& a# C
/ n5 h. e+ Z3 a3 ]+ p 6、利用上面的公式,计算当计数值T[6:0]到0x40的时间,引发EWI中断进入喂狗的时间. {9 W$ ^7 M k j) ^1 { ; c% Q5 t6 ]7 N! h6 }7 S =1048.576ms4 m6 I7 E8 m+ K" ~5 F 即每1048ms喂一次狗。9 e0 Q7 _! Z' @0 R3 a+ j 4 g+ z. L1 k8 y 7、设置工程文件属性,生成代码。/ a+ s& P0 D* L; R5 ~ v, \
- ~2 n2 H+ W7 ~& p* X' J; d
8 f. R9 _+ x3 o% ~" B: ~: D1 e- { 代码 1 Q& H" E# K5 \2 z8 S( B2 X' O& s- o 1、在USART.c文件中加入串口打印代码( s2 v: G8 O; F. G$ ]
2、在main.c文件中加入开机打印代码, 1 [7 U& T# @: n
加入EWI中断代码
3、编译,烧录之后就看到效果6 B, L& r* V- _. S8 R$ f+ a
———————————————— 版权声明:SCCELE1 U7 ]- P+ 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库
微信公众号
手机版