# 软件stm32cubeIDE下配置STM32F103的独立看门狗iwdg-学习笔记-基础样例

  • (1)叙述
  • (2)环境说明
  • (3)学习流程说明
    • (1)了解网上资料
    • (2)查找手册
    • (3)测试逻辑说明
  • (4)具体测试步骤+代码粘贴
    • (1)工程建立,以及代码生成
      • 1)建立STM32cubeIDE工程,设置时钟引脚与下载引脚
      • 2)设置独立看门狗
      • 3)设置uart1串口
      • 4)设置时钟
      • 5)为了方便移植,将文件分开
    • (2)代码生成后,我们先让串口输出,别着急,一步步来。
    • (3)可以输出后,为了方便我们调试,我们加入printf重定向。
    • (3)加入看门狗进行测试。
  • (5)工程代码连接
  • (6)后期验证
    • (1)不加入喂狗,看是否会复位
    • (2)加入喂狗,看是否会复位
    • (3)喂狗时间的计算公式验证
  • (7)==细节==-注意事项
    • (1)移植问题-报错”error: unknow type name "IWDG_HandleTypeDef"“
    • (2)加入喂狗函数
    • (3)外接uart串口时注意共地
    • (4)勾选中断使能
    • (5)喂狗的放置位置,喂狗时机
    • (6)bootloader跳转问题,未初始化问题

(1)叙述

最近使用STM32F103调试看门狗程序,看门狗程序比较简单,但是最简单的,其中细节也很重要,本篇依旧使用”原理说明+样例程序“的方式。

(2)环境说明

  • 软件环境:STM32cubeIDE 1.8.0
  • 硬件环境:STM32F103VET6(野火指南者)
  • 硬件其它物品:j-link 和 串口转换器
    硬件拍摄照片

(3)学习流程说明

(1)了解网上资料

自己最开始的时候,也是先上网找些资料来看,像这种外设,肯定又很多人都尝试了,有非常多的资料,通过别人的笔记我们能够快速了解看门狗。

快速了解看门狗:

  1. STM32有两个看门狗,一个叫窗口看门狗(wwdg),一个叫独立看门狗(iwdg).
  2. 独立看门狗本质是一个定时器,计数器。时间到了,不喂狗,就给你复位。
  3. iwdg独立看门狗,有独立与系统的时钟,系统时钟出问题时,它基本不受影响,不过它的时钟本身不是很精准,会飘移,有范围。
  4. 独立看门狗,一共有5个寄存器,往寄存器写相应值,会有对应功能,比如启动,重装什么的。
  5. 独立看门狗,频率一般取40kHZ(大约值),实际应用时只要记住一个计算公式:预分频值/40*重装载值≈大概多少ms(注意:一般在此之前要喂狗) 如下图:预分频位256,重装载值为1250,那么就是256/40*1250≈8秒左右,我们要在此之前喂狗。

打个比方:你家有一条看家犬,平时正常吃饭,你就喂狗就行。
第一种情况:无论你家是一日吃三顿,还是一日吃两顿,只要合理,狗没饿坏,它就不会叫;
第二种情况:很不幸,你家着火了,对应单片机,就是你芯片内部逻辑死了,出问题了,它也会叫,让你单片机复位;
第三种情况:外面进贼了,或者其它外部情况,对应单片机,就是外部电磁干扰,总之是外部影响,它也会叫,让你单片机重新启动:
总结来看,它是一种保障,至少你的单片机出去后,不知道遇见什么问题,它能复位。

参考资料1:STM32的IWDG(独立看门狗)详细用法

参考资料2:STM32独立看门狗(IWDG)的使用

(2)查找手册

因为自己使用的是STM32F103系列,自然要查下手册STM32F10x中文参考手册是怎么说的,看看人家官方问题怎么说的,具体还是需要了解下的。具体手册网上实在太多了,自己就不搬运了,但是用一点还是想说下的。就是时钟和时间计算问题,它涉及我们后期计算喂狗时间,如下。

(3)测试逻辑说明

通过看网上资料,发现大部分验证看门狗的方式,就是加入一个按键和一个LED灯,一个核心板至少也会带这个两个外设,但是时间测试,感觉通过按键还是挺不方便的,自己手动按键,可能快了,可能慢了,按键没有防抖的话,还是挺难的。

所以后来想到通过串口的方式,打印信息,非常直观,用串口代替按键和灯。这样可以知道喂狗大约什么时候执行的,也方便计算时间。具体请看以下测试步骤。

(4)具体测试步骤+代码粘贴

(1)工程建立,以及代码生成

1)建立STM32cubeIDE工程,设置时钟引脚与下载引脚

时钟引脚

下载引脚

2)设置独立看门狗

3)设置uart1串口

参数默认就好,或者自己想调也行

注意:配置中断

4)设置时钟

(需要就是设置,F103一般都是设置72M),我这共工程要求不是很高,就没设置,需要的如下图所示,不影响。
PS:我这调试的时候,忘记设置了,用内部HSI 也跑起来了。

5)为了方便移植,将文件分开

(2)代码生成后,我们先让串口输出,别着急,一步步来。

如下,先在代码中添加如下,测试下uart1串口是否能输出,需要外接一个串口工具,232的模块,网上有买的,很便宜的。

如下图,通过串口工具与电脑相连,打印如下。

(3)可以输出后,为了方便我们调试,我们加入printf重定向。

‘关于重定向网上的资料也很多,自己也写了一篇,可以看下,或者直接看如下图。
关于软件stm32cubeIDE下配置printf重定向无法输出问题-解决方式之一

(3)加入看门狗进行测试。

在main函数中,我们需要加入测试代码段。

在iwdg.c函数中,我们需要加入喂狗函数,这快程序不会为我们生成。

由此具体代码就编写完成了,可进行测试了。

(5)工程代码连接

具体工程用的代码如下:
https://download.csdn.net/download/qq_22146161/85398467

(6)后期验证

(1)不加入喂狗,看是否会复位

如下图,我们让sum累加,10s后我们就不喂狗了,如果系统复位,那么会重新计数,并且打印”main star!!!“.

串口打印信息如下,可以看到10秒后就好复位一次,重新打印。

(2)加入喂狗,看是否会复位

这次我们一直喂狗,看看是不是会复位,代码如下

效果如下,可以看到计数超过10秒了还没复位,除非是按下复位按键。

(3)喂狗时间的计算公式验证

我们知道一个公式是正确的,要验证它是否正确,自已也要尝试下,之前我们知道,在分配256情况下,可以过很久,大约26s再次喂狗。那么我们来验证下。如下我们更改在main函数如下,和(1)测试一致。

更改喂狗函数从转载值,我们改为1250,理论上从10秒之后不喂狗后,大约过8秒会重启,更改如下图。

通过串口验证如下,基本是17秒左右就会复位,大约不出18数值。

至此实验就结束了。

(7)细节-注意事项

(1)移植问题-报错”error: unknow type name “IWDG_HandleTypeDef”“

实际应该中,先单独调试这个模块,然后移植用的,这也是为什么要分文件,这样在移植的时候,只要芯片型号近似,比如都是F103系列,只要拿走文件iwdg.c和iwdg.h就可以了。
自己使用的时候,其实是拿F407工程里的这两个文件往F103里移植的,但是移植完报了一个错误,如下。

一看以为是什么库文件没有添加(没有#include),后来才发现另有原因。
对照代码,原来是有个定义需要打开。

(2)加入喂狗函数

因为喂狗函数不会自动生成,还是需要自己在iwdg.c中添加的。

/*** @brief   feed watch dog* @details*/
//第三步加喂狗函数
void iwdg_feeddog(void)
{HAL_IWDG_Refresh(&hiwdg); // feed dog
}

(3)外接uart串口时注意共地

在使用串口是注意共地,否则之前出现过打印信息是错的,或者乱码现象。

(4)勾选中断使能

中断使能一定要勾选,否则串口不输出。

(5)喂狗的放置位置,喂狗时机

自己想找到相关喂狗应该放置在哪里,喂狗的时间我们已经会算了。

但是实际项目中,带有Ucos,RT-thread这种多线程系统时,应该放在哪里呢?
这个问题感觉有两种解法,一种是哪里需要放哪里,觉得哪些线程出问题,就放在哪里,让喂狗看着。另一种是听大佬说的,放在线程优先级最低的那里,如果那个线程也能正常喂狗,说明系统是稳定运行的。

这块欢迎讨论。

(6)bootloader跳转问题,未初始化问题

这个是在实际项目中遇到的,就是使用了bootloader程序,在boot里初始化了看门狗,但是在APP里没有初始化,导致野指针问题,不断复位APP程序。

# 软件stm32cubeIDE下配置STM32F103的独立看门狗iwdg-学习笔记-基础样例相关推荐

  1. STM32F103五分钟入门系列(十三)独立看门狗IWDG

    参考:STM32F103五分钟入门系列(十三)独立看门狗IWDG 作者:自信且爱笑' 发布时间:2021-07-31 19:50:28 网址:https://blog.csdn.net/Curnane ...

  2. STM32—独立看门狗(IWDG)

    STM32-独立看门狗(IWDG) 独立看门狗(IWDG) STM32-独立看门狗(IWDG) 独立看门狗(IWDG) IWDG 简介 IWDG 功能框图剖析 独立看门狗时钟 计数器 重装载寄存器 键 ...

  3. STM32 - 独立看门狗IWDG - 使用注意事项+代码

    一.包含头文件 #include "stm32f10x_iwdg.h" 二.设置 独立看门狗 的超时时间 1.配置代码 /** 设置 IWDG 的超时时间* Tout(ms) = ...

  4. 独立看门狗IWDG详细解析

    目录 独立看门狗IWDG详细解析 为什么要有看门狗? 看门狗的定时原理 寄存器功能简介 看门狗定时器计数原理 看门狗相关寄存器 KR寄存器 PR寄存器 RLR寄存器 SR寄存器 看门狗相关基础知识 什 ...

  5. STM32F1笔记(六)独立看门狗IWDG

    STM32F1内置了两个看门狗,独立看门狗IWDG和窗口看门狗WWDG,可以用来检测和解决由软件错误引起的故障. IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精 ...

  6. stm32专题三十四:独立看门狗 IWDG

    独立看门狗简介 IWDG结构框图 (1)独立看门狗时钟 独立看门狗的时钟由独立的 RC 振荡器 LSI 提供, 即使主时钟发生故障它仍然有效,非常独立. LSI 的频率一般在 30~60KHZ 之间, ...

  7. cubeIDE开发, stm32独立看门狗IWDG的CubeMX配置及HAL库底层实现分析

    一.STM32 的IWDG简介 2.1 看门狗原理 看门狗本质上就是一种计数器,和我们现实生活中一炷香现象.沙漏现象等是同理的,计数器一般有两种做法,一种是递增,超过固定阀值报警:一种是递减,通常值降 ...

  8. 从零实现 独立看门狗IWDG STM32的待机与唤醒,在待机过程中如何喂狗

    欢迎大家留言交流~ 前言: 最近在学习原子的阿波罗,进行到待机实验,实验目的是摁下KEY_UP的时候就可以让MCU从待机模式唤醒了.而KEY1在按下的时候进入休眠.(验证过程比较繁琐,只看结论的小伙伴 ...

  9. 独立看门狗 IWDG

    一,独立看门狗 二,独立看门狗的时钟源 独立看门狗拥有自己的时钟源,不依赖PLL时钟输出的分频信号,能够独立运行,这样子的好处就是PLL假如受到干扰, 导致运行异常,独立的看门狗还能正常地进行工作,如 ...

最新文章

  1. [你必须知道的.NET]第十三回:从Hello, world开始认识IL
  2. MySql - GROUP BY 和 HAVING关键字
  3. (软件工程复习核心重点)第二章可行性研究-第一节:可行性研究基本介绍
  4. kafka整合ldap权限管理
  5. 关于原生AJAX和jQueryAJAX的编程
  6. linux登录交换机备份脚本,如何从Linux上备份和恢复许多Cisco路由器和交换机的配置?...
  7. C++直接修改std::set元素的方法
  8. 撤消git update-index --assume-unchanged file
  9. PTA—比较大小(C语言)
  10. 剑指offer面试题54. 二叉搜索树的第k大节点(逆中序遍历)
  11. 每周荐书:京东架构、Linux内核、Python全栈
  12. 豆瓣高分JAVA书籍,你都读过吗?
  13. BPNN-Belief Propagation Neural Networks
  14. B. Silly Mistake(模拟、思维)
  15. 厦门大学计算机系研究生课程《数据科学》课程主页
  16. 【Android Tricks 6】ViewPager首页与尾页的滑动动作响应
  17. 中国卸扣市场趋势报告、技术动态创新及市场预测
  18. Airbnb新用户的民宿预定结果预测
  19. Alpha冲刺——事后诸葛亮
  20. vue 音乐进度条拖拽

热门文章

  1. iOS系统定位基础使用
  2. faiss python安装_faiss安装及使用
  3. 久违的Meetup丨云和恩墨联合openGauss社区与您相约重庆
  4. vue如何加入百度联盟广告
  5. python快速画图_python画图教程|无所不能的python编程是怎么快速画图的呢
  6. 创业公司的市场如何做?
  7. 数据库的断言是什么?
  8. C语言:1~100内的猜数游戏
  9. C++游戏开发实战视频教程
  10. 如何在saface laptop 中开区intel vt-x 虚拟化 | Exception 0xc0000005 (access violation) has occurred