STM32CubeMx开发之路—15窗口看门狗

本教程详细讲解了如何使用STM32的窗口看门狗功能,包括配置步骤、工作原理及代码实现,通过实例演示了在中断中喂狗的正确方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


!!! 本文已同步到码云 - 点击此链接获取最新 - 可进入码云提交修改 !!!


附件

源码已放到码云 ! ! ! ( 请点击文首链接进入仓库 )


运行环境

  • Windows10
  • STM32CubeMX Version 5.2.0
  • Keil5(MDK5) Version 5.28.0.0

简介

本例程主要讲解如何使用STM32的窗口看门狗, 详情请参考官方的参考文档, 本教程教大家如何使用它.


STM32CubeMx基本配置

基础配置过程请参考 STM32CubeMx开发之路—配置第一个项目


使用printf功能

重定向printf的过程请参考 STM32CubeMx开发之路—3发送USART数据和printf重定向


CubeMX配置

查看时钟

  • 窗口看门狗挂载到PCLK1上面的:我的时钟是36MHZ

修改配置

  • 原理 下面是官方的图,你有两种喂狗方式
  • 在刷新窗口喂狗
  • 打开窗口看门狗中断,在中断中喂狗(这是最后的喂狗机会)

  • 1 选择窗口看门狗
  • 2 选中Activated
  • 3 设置分频值psc、窗口寄存器的值window value、递减计数器刷新值counter

计 数 频 率 = 36000000 p s c ∗ 4096 = 36000000 8 ∗ 4096 = 1098.6 H Z ( 记 一 次 数 需 要 时 间 约 910 u s ) 计数频率 = \frac{36000000}{psc*4096} = \frac{36000000}{8*4096} = 1098.6HZ(记一次数需要时间约910us) =psc409636000000=8409636000000=1098.6HZ(910us)
超 时 时 间 = 记 一 次 数 需 要 时 间 ∗ ( c o u n t e r − 64 ) = 910 u s ∗ ( 127 − 64 ) ≈ 58 m s 超时时间 = 记一次数需要时间 * (counter - 64) = 910us * (127 - 64) ≈ 58ms =(counter64)=910us(12764)58ms


  • 打开中断

代码修改

  • 修改主函数

  • 在中断中喂狗(运行正常)

  • 在中断中不喂狗(无限重启)

备注


### 使用STM32CubeMX配置窗口看门狗的方法 在嵌入式开发中,窗口看门狗(Window Watchdog, WWDG)是一种重要的机制,用于监控系统运行状态并防止死锁或异常情况的发生。以下是关于如何利用STM32CubeMX工具配置STM32微控制器上的窗口看门狗的具体说明。 #### 1. 打开STM32CubeMX并创建项目 启动STM32CubeMX软件后,在界面中点击 **ACCESS TO MCU SELECTOR** 来选择目标MCU型号。确认所使用的开发板对应的主控芯片型号无误后,点击页面右上角的 **Start Project** 按钮以开始新工程[^3]。 #### 2. 启用窗口看门狗外设 进入项目的主界面后,切换到 **Pinout & Configuration** 页面。在此页面左侧的功能框列表中找到 **RCC (Reset and Clock Control)** 和其他外设选项。展开 **System Core** 节点,定位至 **WWDG (Window Watchdog)** 并启用该功能。此时会弹出对话框提示是否更新时钟树结构,通常选择允许更新即可[^4]。 #### 3. 设置窗口看门狗参数 完成基本配置之后,双击已激活的 **WWDG** 外设图标或者转至右侧的 **Configuration Tab**, 进一步调整具体的参数设定: - **Prescaler**: 定义预分频系数,影响计数频率; - **Counter Value**: 初始计数值范围应位于指定窗体之内; - **Early Wakeup Interrupt(EWI)**: 可选开启此中断源以便提前预警即将发生的溢出事件。 以上各项均需依据实际应用场景需求精心考量后再做决定[^5]。 #### 4. 生成代码框架 当所有必要的硬件资源及其属性都定义完毕以后,就可以通过菜单栏中的 **Project -> Generate Code** 功能来自动生成初始化程序及相关驱动函数。这步操作将会把当前设计转换成可编译执行的形式,并提供给开发者进一步扩展逻辑的机会。 #### 示例代码片段展示 下面给出了一段简单的头文件声明例子,展示了如何对外暴露接口供应用程序调用: ```c #ifndef __WWDG_H__ #define __WWDG_H__ #include "stm32f1xx.h" extern WWDG_HandleTypeDef hwwdg; void wwdg_init(uint8_t tr, uint8_t wr, uint32_t fprer); #endif /*__WWDG_H__*/ ``` 上述代码来源于特定实例化过程的一部分,其中包含了全局句柄变量以及公共API原型定义等内容。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iot 小胡

从未指望过会有人打赏...

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值