
前言: 今天我们来学习看门狗的配置与函数,看门狗可以有效解决程序的跑飞,在使用过程中比较常见,是防止芯片故障的有效外设,我们一起来学**HAL库 STM32CubeMX的独立看门狗,窗口看门狗的使用。本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用& p) J( W- A. j' i8 h6 j% Z y: M0 i& Y* h8 F& f 所用工具:2 q3 S1 W! G* P" ?2 B( H Q5 _ 1、芯片: STM32F407ZET6/ ^1 ]/ F6 N8 C" } 2、STM32CubeMx软件 3、IDE: MDK-Keil软件 $ e B+ o6 q) N2 I- _, m' g$ b 4、STM32F1xx/STM32F4xxHAL库 知识概括:0 N! O) C* O# w: }+ u! r4 L Y9 W# S) k0 {( c 通过本篇博客您将学到:. I2 r) e- c! A6 L+ Q ' A! Y/ J$ y# v3 d3 y8 s. N STM32CubeMX创建看门狗例程- ?" K- C6 O! R + s' S1 A* W. U, z* B' v 独立看门狗,靠窗看门狗 工作原理 看门狗 在由单片机构成的微型计算机系统中单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环;或者因为用户配置代码出现BUG,导致芯片无法正常工作,出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog) " q0 o. n! d% p# t. G1 s5 D 简单说:看门狗的本质就是定时计数器,计数器使能之后一直在累加 而喂狗就是重新写入计数器的值,时计数器重新累加,! [7 Y7 W2 g7 x8 v# o' _ 如果在一定时间内没有接收到喂狗信号(表示MCU已经挂了),便实现处理器的自动复位重启(发送复位信号)2 s- f4 h( C# ^& D9 i , J4 F4 X2 ]; M% C STM32的内置看门狗" ~. {3 \) T. {4 d* V. Z) F* g S: \# _ STM32内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗、窗口看门狗)可以用来检测和解决由软件错误引起的故障。当计数器达到给定的超时值时,触发一个中断(仅适用窗口看门狗)或者产生系统复位。- u2 D% n2 H8 W# }' k 独立看门狗(IWDG)由专用的低速时钟(LSI)驱动(40kHz),即使主时钟发生故障它仍有效。独立看门狗适合应用于需要看门狗作为一个在主程序之外 能够完全独立工作,并且对时间精度要求低的场合。 窗口看门狗由从APB1时钟(36MHz)分频后得到时钟驱动。通过可配置的时间窗口来检测应用程序非正常的过迟或过早操作。 窗口看门狗最适合那些要求看门狗在精确计时窗口起作用的程序。. g1 Y% y7 s: ^3 {& z ![]() y( J O' w* {4 X . V& [: U/ B B4 J6 Q* K IWDG-独立看门狗 工程创建$ m, T" r' M- {4 p 1设置RCC2 y, n f$ j8 M5 H& R% P , P8 L/ z3 P+ J' j$ k y 设置高速外部时钟HSE 选择外部时钟源$ o* Z5 ^( F- Q. U; ]5 b4 N 0 E; P5 b- p6 _" T3 q2 ?% x$ @ ![]() 2配置IWDG, b6 f* H& c7 a+ h) R; k( i5 m, p ![]() * ]3 [+ T4 {4 i2 Z) } IWDG时钟预分频系数 4分频 计数器重装载值 4095 RLR9 C8 G6 ?. ^3 f0 v 7 F6 M/ U5 d. e$ s8 R; h# V, i6 \ 超出(溢出)时间计算:# |- u, v- c' ^& i Tout=((4×2^PRER) ×RLR)/LSI时钟频率 对应不同预分频系数的PRER值: & A0 q, }; ^5 }. q ![]() 3时钟源设置 2 u. r4 W! X8 @% ^3 p* s3 k6 _ ![]() 6 g3 I, H- v- A" K9 X0 l 1选择外部时钟HSE 8MHz # c2 Z8 E3 `8 F; ^: U4 |: P) J4 r 2PLL锁相环倍频72倍 3系统时钟来源选择为PLL( T, y3 ]& _0 N, v 4设置APB1分频器为 /20 }" E" F+ G( F/ X5 O 32的时钟树框图 如果不懂的话请看《【STM32】系统时钟RCC详解(超详细,超全面)》 4项目文件设置 ![]() 1 设置项目名称 2 设置存储路径 3 选择所用IDE6 w8 C% v A* k2 u# ^7 p3 S+ z 5 s* m: V: I* i& r( f i- P9 [) d ![]() # n8 _! `, p& c4 S 5创建工程文件 7 h( i8 m( J. `( K 然后点击GENERATE CODE 创建工程 配置下载工具 新建的工程所有配置都是默认的 我们需要自行选择下载模式,勾选上下载后复位运行" O3 a" [4 J% H3 ~: p * q& a8 z5 b3 R ![]() HAL库独立看门狗函数库讲解:, \* q5 z8 H0 Z) e8 Z; p 看门狗初始化函数 6 r1 ^1 H8 U `$ Q6 g% R9 x y p+ V
喂狗函数:- O5 n4 T2 M) ^. P; N8 v( W
WWDG-窗口看门狗 窗口看门狗的定义4 T6 s% T( v8 C 窗口看门狗跟独立看门狗一样,也是一个递减计数器不断的往下递减计数,当减到一个固定值 0x3F 时还不喂狗的话,产生复位,这个值叫窗口的下限,是固定的值,不能改变。 6 h* L5 U8 p# k. l. I 窗口看门狗之所以称为窗口,就是因为其喂狗时间是在一个有上下限的范围内(计数器减到某个值~计数器减到0x3F),在这个范围内才可以喂狗,可以通过设定相关寄存器,设定其上限时间(但是下限是固定的0x3F) : A j2 } `9 k2 A. K8 L ![]() 1计数器的初始值' T4 F5 D# r/ I! n* i8 V+ D 2 是我们设置的上窗口(W[6:0]值3 i: h2 O. K5 S! J! [ 3是下窗口值(0x3F) 窗口看门狗计数器的值只有在2和3 之间(上窗口和下窗口之间)才可以喂狗! ]9 e6 n9 s/ y* v* d6 g 窗口看门狗中断: ~# }: Z# S8 I- ] 并且窗口看门狗还可以使能中断,如果使能了提前唤醒中断,系统出现问题,喂狗函数没有生效,那么在计数器由减到0x40 (0x3f+1) 的时候,便会先进入中断,之后才会复位,你也可以在中断里面喂狗 WDGG窗口看门狗配置 ![]() 1.点击WWDG 2. WWDG时钟预分频系数 8 J( |6 Q0 S3 J3 L: m WWDG上窗口值 0x5F WWDG计数器值 : 0x7F 设置看门狗提前唤醒中断' p2 L8 p- w; m) k 3 使能窗口看门狗中断; x- _3 y8 `8 {5 M : Q/ |3 ]7 l5 ]4 P 其余配置与独立看门狗相同配置即可' p% D# j x6 }; l " k+ r6 y |! G( k/ p HAL库独立窗口狗函数库讲解: 看门狗初始化:
喂狗:" z X6 V& z6 P- H8 i
看门狗中断处理函数:9 g' p; L( j0 V. H# P# f5 B: u
功能: 判断中断是否正常,并进入中断回调函数 看门狗中断回调函数:
在HAL库中,每进行完一个中断,并不会立刻退出,而是会进入到中断回调函数中, $ e2 q% v# f) k; }# H 看门狗中断运行完成之后,便会进入看门狗的中断回调函数: Q. b- p" C) y, { $ ^9 g" |' O3 I- v' z* G& N4 V& S2 `4 D 例程实现: 本例程实现LED点亮延时300ms闪烁 在main.c下方添加中断回调函数0 i9 N! k# k8 ^! c
7 g5 W7 e+ {# q ![]() ( Z. r6 }2 B/ W. R S |
【2025·STM32峰会】GUI解决方案实训分享2-编译运行TouchGFX咖啡机例程(含桌面仿真)
实战经验 | Keil工程使用NEAI库的异常问题
STM32 ISP IQTune:真正零门槛的免费ISP调整软件
【经验分享】STM32 新建基于STM32F40x 固件库的MDK5 工程
意法半导体MCU双供应链策略,打消中国客户后顾之忧
【经验分享】基于STM32使用HAL库实现USB组合设备CDC+MSC
2024意法半导体工业峰会:赋能智能电源和智能工业,构筑可持续未来
ST推出灵活、面向未来的智能电表通信解决方案,助力能源转型
意法半导体 x Qu-Bit Electronix:推动新一轮的数字声音合成革命
从STM32 MPU产品看嵌入式系统中微处理器的新变化