资料介绍
描述
STM32F401xD/E 有两个看门狗定时器——独立看门狗 (IWDG) 和窗口看门狗 (WWDG)。在这个项目中,我们将看到如何激活并定期抚摸狗,我的意思是刷新看门狗。此外,如果您不在窗口内抚摸您的看门狗,例如太晚或太早抚摸(刷新),我们也会看到会发生什么。
假定读者了解 STM32CubeMX、Keil MDK、GPIO、计数器的一些知识。
理论
顾名思义,看门狗正在监视 MCU 上运行的应用程序。这是一个监控功能。如果程序执行的正常顺序出现任何异常-软件故障,看门狗会检测到它。然后它会启动 MCU 复位,这将有助于重新启动软件。
从功能的角度来看,IWGD 和 WWDG 之间有两个主要区别。
- IWDG 不提供刷新窗口。[这意味着,IWDG 不在乎,只要在递减计数器之前刷新它(WWDG_CR[6:0],翻转]
- IWDG 没有像 WWDG 那样提供中断服务程序 (ISR)。[这意味着,就在启动重置之前,会生成一个中断,您可以在其中编写例程以安全退出。]
与 IWDG 不同,WWDG 由 APB1 外设时钟提供时钟。下图显示了 STM32CubeMX 的快照形式。
在这个项目中,我们将配置和测试这些案例。
- 情况 1:激活 WWDG,我们不会刷新 WWDG 并通过倒计时计数器 WWDG_CR[6:0] 来检查是否触发了复位。我们将使用 Digilent-Analog Discovery (Legacy) 仪器监控复位线。
- 案例 2:包括我们的例程以在窗口中刷新它,并看到 WWDG 没有启动重置。[此时我还没有解释这个窗口是什么。过段时间就会熟悉]
- 案例 3:我们将过早刷新 WWDG 并检查是否触发了重置。
- 案例 4:我们将启用 EWI 中断并编写一个程序来切换那里的板载绿色 LED。我们将在示波器上观察到 ISR 在启动 MCU 复位之前执行。这是 WWDG 中的一项高级功能,在 IWDG 中不可用。
启动项目..
1. 通过板选择器在 STM32CubeMX 中创建一个项目。有关详细信息,请参阅附件 - “创建 STM32CubeMX 项目”。
2. 在左侧窗格中,展开 - System Core 并选择 - WWDG。将出现一个显示 WWDG 配置的窗口。那里点击激活。这将使用下图中第 3 部分中显示的默认配置激活 WWDG。
让我们了解这些 WWDG 时钟参数。
WWDG 计数器时钟预分频器:时钟的结果值等于(PCLK1/4096)/预分频器
- PCKL1为 APB1 时钟(STM32F401RE 为 42MHz)
- 4096为内分频器
[预分频器只是一个时钟分频器。预分频器越高,计数器的时钟频率就越低。因此计数需要更长的时间。]
让我们选择预分频器为 8: (PCLK1/4096)/ 8
这导致递减计数器的 WWDG 时钟为 (42MHz/4096)/8 = 1281.738 Hz。因此时钟周期(1 个时钟周期)约为。780us
tClkWwdg = 780us
窗口:WWDG 中的这个术语是指允许刷新看门狗的时间范围。超出该区域被解释为软件故障,并且 MCU 复位由 WWDG 启动。现在让我们配置这个窗口。请在下面找到图片。
突出显示的 3 个参数定义了窗口。
T[6:0] 是递减计数器的 WWDG_CR[6:0] 寄存器。最大值为 127。一旦看门狗被激活 WWDG_CR[7] 被设置,倒计时以 tClkWWDG 的速率开始。在这种情况下,它是 780us。
W[6:0] 是 WWDG_CFR[6:0] 寄存器,用于在运行时与递减计数器进行比较的窗口值。
0x3F 是向下计数器计数的最低限制。一旦计数器达到该值,就会触发复位。
当递减计数器值大于 W[6:0] 且小于 0x3F 时,服务(刷新/更新)WWDG 很重要。未能在此窗口中刷新被 WWDG 解释为软件故障并启动复位。
让我们为看门狗窗口选择一些值。
预分频器 = 8;W = 94; T = 127。
现在让我们计算时间。
递减计数器从 127 递减到 63 所用时间为 tWWDG = tClkWWDG * (127 - 63) = 49.92ms
从递减计数器 127 开始直到达到 94 都不允许刷新,即 tNoRefr = tClkWWDG * (127-94) = 25.74ms
在 tNoRefr 和 tWWDG 之前允许刷新。
让我们回到 CubeMX,切换到 Project Manager 视角并选择 Keil MDK,保存项目并点击 - 'Generate code'。
请注意,看门狗中断(Early Wakeup Interrupt-EWI)保持禁用状态。我们将在稍后部分讨论它。
选择 Open project 并打开 Keil MDK IDE。如下图所示,打开main.c文件。
构建项目,看看没有错误。
右键单击看门狗初始化函数并选择转到定义。
static void MX_WWDG_Init(void);
请注意,参数与我们在 CubeMX 中指定的一样。
也可以随意查看源文件stm32f4xx_it.c
,用于 EXTI(外部中断/事件控制器)例程。目前我们还没有配置任何中断。在后面的部分中,我们将更深入地了解它。
部署和测试:
无需浪费太多时间,只需构建项目并将其部署到我们的 ST32F401RE Nucleo 板即可。
情况1:
由于我们尚未为 WWDG 提供服务,因此在递减计数器达到 0x3F 后,将触发 MCU 复位。我们将超级有用的 Digilent Analog Discovery 的示波器通道 1 连接到复位线并对其进行监控。
我们的预期是,WWDG 每大约 50 毫秒触发一次复位。
请参阅下面的两张图片以供参考。
打开 Digilent 波形。我已经为通道 1 配置了一些测量选项 - x 光标,这将有助于我们查看复位发生的频率。
构建项目并点击调试按钮。
让我们从 RCC 外设监控 CRC 寄存器。窗口看门狗复位标志 (WWDGRRSTF) 和删除复位标志 (RMVF) 在 CRC 寄存器中很重要。详情请阅读 STM32 MCU 参考手册。为了方便起见,我刚刚提供了这两个 RCC_CRC 寄存器的图像。
回到凯尔..
代码仍然停止。您会注意到我们设置了一些重置标志。在继续进行干净设置之前清除所有重置。
Click RMVF bit
Hit
运行 (F5) 启动程序
您将立即看到 WWDGRSTF 设置。
我们可以看到,正如预期的那样,每 ca 都会切换一次重置线。52 毫秒。
案例二:
让我们抚摸我们的狗,让它不叫。好的..我的意思是让我们在窗口中刷新我们的 WWDG 看看会发生什么..
转到 main.c。如果您仍处于调试模式,请退出调试透视图。在无限的while循环中包含这段代码。
HAL_Delay(30);
HAL_WWDG_Refresh(&hwwdg);
HAL_Delay(30) 将 MCU 暂停 30 毫秒。我们等待 30ms 并刷新 WWDG。现在可能很清楚,我们无法在 tNoRefr(25.74 毫秒)的持续时间内刷新看门狗。
结果..应该有由WWDG触发的任何重置。让我们构建项目并检查它..
按照与之前相同的步骤构建项目并在调试模式下打开它。设置 RMVF 位以清除复位标志并运行程序。您应该看到 WWDGRSTF 标志始终是清除的。
没有重置。我们的狗很高兴:)
案例3:
我们将过早刷新 WWDG 并检查是否触发了重置。
将延迟值从 30ms 修改为小于 tNoRefr (25.74ms) 的任何值。
我选择 15 毫秒。
结果:
由于我们很快就会刷新 WWDG,因此每 18 毫秒触发一次重置。
案例4:
最有趣的部分。我们不应该忘记 WWDG 有一个漂亮的特性——它会在触发休息之前产生一个中断。这将帮助我们以安全状态退出,比如说拍摄系统快照并存储到 EEPROM 中。
让我们通过启用 EWI 中断并编写一个例程来切换板载绿色 LED 来检查此功能。我们将在示波器上观察到 ISR 在启动 MCU 复位之前执行。这是 WWDG 中的一项高级功能,在 IWDG 中不可用。
您可以使用 CubeMX 以图形方式启用 EWI,如下所示。
这还不够。我们需要在 NVIC 设置中启用看门狗中断。如果不启用全局看门狗中断,仅启用 EWI 不起作用,因为中断将无法通过中断控制器-NVIC。我强烈建议您阅读参考手册中的 EXTI 部分以了解更多详细信息,因为这超出了本文的范围。
保存项目并构建。这次当您切换回 Keil 时,它应该会询问您文件是否已更新以及是否要加载它们。说,是的。
现在你应该在你的 Keil 项目中拥有最新的文件。转到文件 stm32f4xx_it.c。您将在最后看到添加了这段额外的代码(在红色框中)。它是 WWDG 中断处理程序。
转到 HAL_WWDG_IRQHandler(&hwwdg);
蓝色框中指示的定义。
我们可以看到启用了早期唤醒回调并为我们创建了 __weak 函数。复制该函数并将其粘贴到 main.c 并删除 __weak。这就是我们将编写例程以切换板载绿色 LED 以查看 ISR 是否在启动复位之前执行的地方。请参阅下图,指示它必须在 main.c 中复制的位置。在所有外设初始化功能完成后以及在用户代码开始和结束之间执行此操作。
让我们从函数体中删除所有内容并切换我们的板载 LED。
另外,注释掉写在 while(1) 无限循环中的代码。这次我们将让递减计数器过去,并期望 WWDG 重置 MCU。但在此之前,我们希望它服务于我们的中断。我们将通过每 20 毫秒切换一次 LED 来监控这一点。
请按照与之前相同的步骤构建项目并在调试模式下打开它。设置 RMVF 位以清除复位标志并运行程序。
结果:
请参阅显示切换板载绿色 LED 的视频-
示波器:
Ch1:NRST
通道 2:LED
我们可以看到中断是在大约生成的。复位前 780us,正好是之前的一个 WWDG 时钟周期。但是每 52ms 触发一次复位,即只有在递减计数器倒数到 0x3F(十进制:63)之后。
注意:如果您需要有关 STM32F4 的 HAL 库以及如何使用它们的完整信息,请参阅手册 UM1725。STM32F4 HAL 和底层驱动说明
结论
我们已经在各种场景下对STM32F401RE的Window看门狗进行了配置和测试。在案例 4 中,我们看到了一些非常有趣的东西。板载 LED 不是每 20 毫秒切换一次。复位迫使 LED 关闭,因为 WWDG 只给 MCU 1 个时钟周期来做任何重要的事情。由于每 52ms 发生一次复位,我们可能会将 LED 切换误解为我们的 ISR 例程。事实上,HAL_GPIO_TogglePin()
甚至没有完全执行。它被重置破坏了。尝试注释掉HAL_Delay()
,尝试替换HAL_GPIO_TogglePin()
to HAL_GPO_WritePin()
,看看会发生什么。
同样在启用 EWI 的情况下,尝试过早刷新 WWDG 并查看是否执行了 ISR。如果您有任何问题,请告诉我。我很高兴听到您的反馈。感谢您的阅读!
- 基于STM32单片机窗口看门狗使用库文件设计 0次下载
- 窗口看门狗是什么?与独立看门狗有啥区别?
- STM32:独立看门狗、窗口看门狗的配置
- STM32L051使用HAL库操作实例(7)-(WWDG)窗口看门狗实验
- STM32L051使用HAL库操作实例(6)-(IWDG)独立看门狗实验
- MCU学习笔记_WWDG窗口看门狗
- 【STM32】窗口看门狗
- STM32开发,使用HAL库函数实现窗口看门狗WWDG功能
- 【MCU】基于STM32CubeMX 实现窗口看门狗 WWDG
- MCU独立看门狗与窗口看门狗的区别
- 对于MCU看门狗IIWDG WWDG喂狗时间的配置参考
- STM32 ADC模拟看门狗及其应用
- 单片机看门狗有两种:分别为独立看门狗和窗口看门狗,它们有什么区别?资料下载
- STM32开发板教程之窗口看门狗(WWDG)的详细资料概述 1次下载
- ALIENTEK_MINISTM32_实验6_窗口看门狗实验 4次下载
- 什么是模拟看门狗?模拟看门狗有什么用处? 1406次阅读
- MCU如何集成看门狗的功能 1424次阅读
- STM32单片机看门狗的配置方法 2615次阅读
- STM32中的独立看门狗和窗口看门狗 1212次阅读
- STM32中的独立看门狗和窗口看门狗 1882次阅读
- 窗口看门狗的基础知识 2167次阅读
- STM32芯片如何使用片内参考电压实现模拟看门狗 6596次阅读
- STM32单片机中的独立看门狗与窗口看门狗有哪些不同之处 3318次阅读
- 一文了解STM32窗口看门狗的真正作用 3.1w次阅读
- 一文读懂STM32之独立看门狗/窗口看门狗的原理 9264次阅读
- 窗口看门狗的作用是什么?窗口看门狗复位分析 2.3w次阅读
- STM32看门狗WWDG和IWDG的区别是什么 1.4w次阅读
- stm32看门狗复位技巧编辑 1.5w次阅读
- STM32看门狗配置(独立看门狗IWDG和窗口看门狗WWDG) 8286次阅读
- stm32看门狗时间计算 独立看门狗和窗口看门狗的特性是什么 8660次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多