STMCU小助手
发布时间:2022-3-25 11:30
|
前言: 今天我们来学习看门狗的配置与函数,看门狗可以有效解决程序的跑飞,在使用过程中比较常见,是防止芯片故障的有效外设,我们一起来学**HAL库 STM32CubeMX的独立看门狗,窗口看门狗的使用。本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用6 ~: [ T2 F9 U* p ' a) ?6 ~) i j+ m' {7 P 所用工具: 1、芯片: STM32F407ZET6 6 u# `- R! `+ n0 a( ^$ X 2、STM32CubeMx软件 3、IDE: MDK-Keil软件 4、STM32F1xx/STM32F4xxHAL库 4 V$ c9 j% v9 ]2 d2 `! h 知识概括:* T; h0 W' \4 I; ~1 O( ^5 f' ^ ' I [: Y/ F) A/ f5 H+ A9 F 通过本篇博客您将学到:+ J+ B2 p M# G* P4 u3 f! K. }' s STM32CubeMX创建看门狗例程 $ Y) `5 e+ A& g. b! o+ U1 Q- U9 E 独立看门狗,靠窗看门狗 工作原理6 r% p$ j0 G3 f 看门狗4 W, b! Z; s5 B 在由单片机构成的微型计算机系统中单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环;或者因为用户配置代码出现BUG,导致芯片无法正常工作,出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog) , h4 F1 w/ s' d1 B7 I 简单说:看门狗的本质就是定时计数器,计数器使能之后一直在累加 而喂狗就是重新写入计数器的值,时计数器重新累加, 如果在一定时间内没有接收到喂狗信号(表示MCU已经挂了),便实现处理器的自动复位重启(发送复位信号) + m. {, C2 O! G' z5 F" a5 h STM32的内置看门狗 STM32内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗、窗口看门狗)可以用来检测和解决由软件错误引起的故障。当计数器达到给定的超时值时,触发一个中断(仅适用窗口看门狗)或者产生系统复位。 独立看门狗(IWDG)由专用的低速时钟(LSI)驱动(40kHz),即使主时钟发生故障它仍有效。独立看门狗适合应用于需要看门狗作为一个在主程序之外 能够完全独立工作,并且对时间精度要求低的场合。 窗口看门狗由从APB1时钟(36MHz)分频后得到时钟驱动。通过可配置的时间窗口来检测应用程序非正常的过迟或过早操作。 窗口看门狗最适合那些要求看门狗在精确计时窗口起作用的程序。( z. V+ e! Q$ M! }4 Z+ t
' P0 p1 `' E/ w' `' q1 j" W IWDG-独立看门狗( J0 O6 J/ f- S* e 工程创建/ ]( `5 }) K3 F1 W' _" y 1设置RCC / [) p& O. J; j9 | 设置高速外部时钟HSE 选择外部时钟源
6 t0 E- S9 W( O/ I 2配置IWDG & x6 t6 [5 X$ Z: W2 N
j2 B8 t0 m: i$ Q3 F% K IWDG时钟预分频系数 4分频 计数器重装载值 4095 RLR5 h1 t5 a# m" d1 Q7 q( I1 C0 m - s; ]4 J) m$ _0 n 超出(溢出)时间计算:: i: g* S) @+ g% k/ x8 p! ` Tout=((4×2^PRER) ×RLR)/LSI时钟频率 4 D' D8 d: F( q4 R 对应不同预分频系数的PRER值:2 F7 W8 k3 w% `! f$ u
3时钟源设置 $ d" g$ P, ]% w: \
1选择外部时钟HSE 8MHz ; B0 G) |' B0 |3 D5 [ 2PLL锁相环倍频72倍4 x7 B* F1 \2 Z) z 3系统时钟来源选择为PLL3 m3 A5 C, P; m2 d 4设置APB1分频器为 /2! q4 |3 y2 d2 @- V! b7 _ 32的时钟树框图 如果不懂的话请看《【STM32】系统时钟RCC详解(超详细,超全面)》 , o. e, z* w7 i. E+ B" U D+ z5 ~ 4项目文件设置
1 设置项目名称/ v5 a0 n& h. y S8 w 2 设置存储路径* I# f4 B# d7 I" z* d 3 选择所用IDE / U0 l. _# V1 Y( X3 K7 K. F" g0 q+ {
5创建工程文件1 I) `; `/ p* x1 A 然后点击GENERATE CODE 创建工程 配置下载工具 新建的工程所有配置都是默认的 我们需要自行选择下载模式,勾选上下载后复位运行9 V: _6 t4 e; s O2 c) G6 w2 | + s& u. z+ P- o6 h' n
HAL库独立看门狗函数库讲解: 看门狗初始化函数 2 i6 Q3 p! T0 e* a i3 D# s& c
喂狗函数:0 E$ g& H' B1 c3 x# P( H( I
+ I l7 B+ Z6 a9 B 9 O$ q2 f M ` WWDG-窗口看门狗' }& K2 i* |' v* l& f3 ~# _2 v# l 5 k5 a4 a4 j* }, Y- ] 窗口看门狗的定义 窗口看门狗跟独立看门狗一样,也是一个递减计数器不断的往下递减计数,当减到一个固定值 0x3F 时还不喂狗的话,产生复位,这个值叫窗口的下限,是固定的值,不能改变。 l$ z! r/ t9 E- m . M7 C5 N# W" c* x. _( K) { 窗口看门狗之所以称为窗口,就是因为其喂狗时间是在一个有上下限的范围内(计数器减到某个值~计数器减到0x3F),在这个范围内才可以喂狗,可以通过设定相关寄存器,设定其上限时间(但是下限是固定的0x3F)/ O, v" u! n0 y; S9 D* x
1计数器的初始值( F5 I. T0 f) ]+ v9 } | 2 是我们设置的上窗口(W[6:0]值) C) \: ^* P$ c. i2 E5 D 3是下窗口值(0x3F)+ I4 r* W; G4 l4 t% B 窗口看门狗计数器的值只有在2和3 之间(上窗口和下窗口之间)才可以喂狗 窗口看门狗中断:: x% v) y: A* D% q7 z" u" B5 \ 并且窗口看门狗还可以使能中断,如果使能了提前唤醒中断,系统出现问题,喂狗函数没有生效,那么在计数器由减到0x40 (0x3f+1) 的时候,便会先进入中断,之后才会复位,你也可以在中断里面喂狗( Z: @- x, k" g6 B6 I 1 h: q3 O) Z7 k8 R: b WDGG窗口看门狗配置9 M) v5 M4 n0 F5 \/ v) X
$ x4 ?7 B. q6 R4 a/ c7 Z! ?& [2 ` 1.点击WWDG$ r `* p) s9 Y% G% V; K 2.# h7 o/ T' A% R. i1 | WWDG时钟预分频系数 8% O b7 E3 L0 k# {8 S; S& G WWDG上窗口值 0x5F WWDG计数器值 : 0x7F 设置看门狗提前唤醒中断 3 # M9 K9 o& S! j( k f 使能窗口看门狗中断8 z: V9 n, W7 B$ S& | ) ]1 E. M$ W6 E: p 其余配置与独立看门狗相同配置即可( H+ ~8 T+ o8 k& a HAL库独立窗口狗函数库讲解: 看门狗初始化:. v' B$ a- A7 {+ O9 N: \, P! i
喂狗:# @! ^9 w- e0 r$ P$ ^2 F# ~- g
看门狗中断处理函数:
功能: 判断中断是否正常,并进入中断回调函数4 L p2 h0 b5 B7 U' w2 M8 a 看门狗中断回调函数:
在HAL库中,每进行完一个中断,并不会立刻退出,而是会进入到中断回调函数中, 看门狗中断运行完成之后,便会进入看门狗的中断回调函数8 p& O6 b' ^ z 例程实现:8 z/ @" z8 F- s5 P, ?& E& q 本例程实现LED点亮延时300ms闪烁% m' g& l$ \1 `/ C- G / M% I" M/ H6 M% U) ?9 M7 l% I 在main.c下方添加中断回调函数
![]() 4 V5 {2 L, S. |6 O7 ?3 P |
【经验分享】STM32语音识别的智能蓝牙音箱(源程序+原理图+PCB+设计说明书+PPT)
想找个ST芯片
[GPIO] 使用新型抽象开始C++嵌入式编程,从GPIO开始
技术手册stm32f1xx中的一个小问题
【经验分享】STM32 HAL库移植FreeModbus详细步骤
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
实战经验 | Keil工程使用NEAI库的异常问题
经验分享 | FDCAN数据段波特率增加后发送失败的问题分析
STM32几种流行开发环境的优缺点
好用软件推荐-TouchGFX Designer
微信公众号
手机版