Ⅰ
、概述
对于看门狗,我觉得做单片机或者嵌入式开发的人员来说并不陌生,今天总结
STM32F0
看门狗的功能,
F0
的看门狗有两种:独立和窗口看门狗。
今天提供两种看门狗的软件工程实例,供大家下载。
两种看门狗各有各的特点,应用在不同的场合,下面将分别简单总结一下独立和窗口看门狗的功能。
本着免费分享的原则,
方便大家手机学习知识,每天在微信分享技术知识。
如果你觉得分享的内容对你有用,
又想了解更多相关
的文章,请用微信搜索“
EmbeddDeveloper
” 或者扫描下面二维码、关注,
将有
更多精彩内容等着你。
文章提供的“软件工程”都是在硬件板子上进行多次测试、并保证没问题才上传至360云盘,请放心下载测试,如有问题请检查一下你的板子是否有问题。
ST标准外设库和参考手册、数据手册等都可以在
ST官网
下载,你也可以到我的360云盘下载。关于F0系列芯片的
参考手册
有多个版本(针对F0不同芯片),但有一个通用版本,就是“
STM32F0x128参考手册V8(英文)2015-07
”建议参考该手册,以后如果你换用一种型号芯片也方便了解。
今天的
软件工程
下载地址(360云盘):
IWDG独立看门狗:
https://yunpan.cn/cRfa8Qhi9g48Y
访问密码 2c3e
WWDG窗口看门狗:
https://yunpan.cn/cRfa5DvT9syUm
访问密码 7bf1
STM32F0xx的资料可以在我360云盘下载:
https://yunpan.cn/cS2PVuHn6X2Bj
访问密码 8c37
Ⅲ、准备工作
对于看门狗的编程,建议大家准备
F0
的参考手册和数据手册,方便查阅相关知识,没有的请到
ST官网
或到我
360
云盘下载。
今天总结的软件工程是基于“
TIM
基本延时配置详细过程”修改而来,因此需要将该软件工程下载准备好。我每次都是提供整理好的软件工程供大家下载,但是,如果你是一位学习者,建议自己亲手一步一步操作。
Ⅳ、看门狗原理
①IWDG独立看门狗
独立看门狗由内部低速时钟
LSI
提供计数时钟,
8
位分频,
12
位计数,需要定期喂狗(重载数值
ReloadCounter
),如果计数值减为
0
了,还没有重载数值,则会响应复位事件。
②WWDG窗口看门狗
窗口看门狗由
APB1(RCC_APB1Periph_WWDG)
提供计数时钟,
2
位分频,
7
位计数,需要定期喂狗(更新计数值),如果计数值减为
0x40
了,还未更新计数值,则会响应复位事件。
Ⅴ、代码描述
今天提供两种看门狗软件工程,下面分别来总结一下,主要讲解配置的函数接口。
①IWDG独立看门狗
该函数位于
main.c
文件上面;
重载数值的计算请结合上面的结构框图配合函数源代码,从函数中可以看的出来,只要0.5s。
运行效果
:
喂狗最大时间500ms(理论值),但内部低速时钟LSI存在误差,建议修改测试时间:小于450,大于550;
小于450ms: 正常喂狗,串口间隔打印"Running..."LED变化;
大于550ms: 喂狗超时,系统复位,串口打印"System Reset..."
②WWDG窗口看门狗
该函数位于
main.c
文件上面;
这里的时钟和上面IWDG的时钟不同,结合框图也看得出了经过分频之后计数的值也是计算的出来的。
运行效果
:
喂狗最大时间43ms(理论值),但串口打印需要一两毫秒,建议修改测试时间:小于41,大于43;
小于41ms: 正常喂狗,串口间隔打印"Running..."LED变化;
大于43ms: 喂狗超时,系统复位,串口打印"System Reset..."
③总结一下二者的区别
1)、IWDG使用内部低速时钟LSI,WWDG使用系统时钟APB1ENR
2)、IWDG没有中断,WWDG有中断
3)、IWDG是12位递减的。WWDG是7位递减的
4)、IWDG只有下限,WWDG有下限和上限
5)、IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。 WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。
看门狗在长期工作的产品中用到比较多,作用很简单,防止死机。看门狗的功能也可用于定时计数等。
或许你硬件芯片不是提供工程里面的芯片,但是STM32F0的芯片软件兼容性很好,可以适用于F0其他很多型号的芯片,甚至是F2、F4等芯片上(具体请看手册、或者亲自测试)。
本文章提供的软件工程是基于ST标准外设库为基础建立而成,而非使用STM32CubeMX建立工程。个人觉得使用ST的标准外设库适合与学习者,STM32CubeMX建立工程结构复杂,对于学习者,特别是初学者估计会头疼。
今天的工程是基于工程“
STM32F0xx_TIM
基本延时配置详细过程”修改而来,以上实例总结仅供参考,若有不对之处,敬请谅解。
关注微信,回复“更多内容”,将获得更多内容(如:
UCOS
实例等,不断更新中
......)。
如果你喜欢我分享的内容,你又想了解更多相关内容,请关注文章开头的微信公众号,新内容持续更新中,后期将会有更多精彩内容出现。
最近学习遇到需要用到
看门
狗
的地方,整理了一些资料笔记,记录一下以供后期项目使用。
1 什么是
看门
狗
?
看门
狗
主要是用来监测单片机运行状态和解决程序引起的故障的模块。根据功能不同,通常分为
独立
看门
狗
和
窗口
看门
狗
。因为
独立
看门
狗
受工作场合因素的影响会多一点,仅适用于一些对时间精度要求较低的场合;
窗口
看门
狗
适用于对时间精度高的场合。
2
看门
狗
如何操作?基本工作流程是怎样的?
看门
狗
怎么使系统复位?在
看门
狗
函数中设置一个函数,每间隔一段时间发送给CPU一次复位信号,CPU进行复位操作。如果系统正常运行不想让系统产
在嵌入式开发中, 可靠性和稳定性是至关重要的. 这就是为什么许多单片机, 比如
STM
32, 提供了
窗口
看门
狗
(Window Watchdog, WWDF) 的功能. WWDG 是一种硬件定时器, 其目的在于防止软件错误导致的系统故障. WWDG 是通过监控软件运行的正常新, 并在检测到异常情况时自动重启系统, 从而防止系统长时间处于错误状态.
看门
狗
分和 软件
看门
狗
。硬件
看门
狗
是利用一个定时器电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零(俗称“喂
狗
”),因此程序正常工作时, 定时器总不能溢出,也就不能产生复位信号。如果程序出现故障,不在定时周期内复位
看门
狗
,就使得
看门
狗
定时器溢出产生复位信号并重启系统。软件
看门
狗
原理 上一样,只是将硬件电路上的定时器用处理器的内部定时器代替,这样可以简化硬件电路设计,但在可靠性方...
事件标志组是实现多任务同步的有效机制之一。任务间事件标志组的实现是指各个任务之间使用事件标志组实现任务的通信或者同步机制。FreeRTOS在event_groups.c/h文件中提供了事件标志组的具体实现。
根据具体平台的不同,FreeRTOS根据 configUSE_16_BIT_TICKS定义的不同,事件组支持的数量有些区别,具体如下:#define configUSE_16_BIT
“
看门
狗
定时器”是这样一种东西,从功能上说它可以让微控制器在意外状况下(比如软件陷入死循环)重新回复到系统上电状态,以保证系统出问题的时候重启一次。就跟我们现在用电脑一样,死机了你就按一下reset键重启一次电脑,
看门
狗
就是负责干这个事儿的。它是52单片机增加的一个功能,以前Intel 8031、……、AT 89C51时代单片机片内都没有“
看门
狗
”功能,需要我们外扩
看门
狗
芯片,比如X5045。
......
在嵌入式系统中,为了使系统在异常情况下能自动恢复,一般都会引入
看门
狗
电路。
看门
狗
电路其实就是一个计数器。当
看门
狗
启动后,计数器开始自动计数,经过一定时间计数器溢出就会对CPU产生一个复位信号使系统重启。系统正常运行时,需要在
看门
狗
允许的时间间隔内对
看门
狗
计数器清零也即喂
狗
,不让复位信号产生。
...
但当系统死机时,将无法执行正常的喂
狗
操作,
看门
狗
的计数值就会一直递减到0,使系统复位,程序正常工作。例如我们将分频系数的寄存器
配置
为8,将定时器重载值的寄存器
配置
为4095,rc振荡器的时钟位32kHZ,32kHZ八分频等于4kHZ,4kHZ的周期是0.25ms,然后0.25*(4095+1)=1024ms,1024ms就是
看门
狗
的超时复位时间。如果系统发生死机了,即使喂
狗
操作在定时器中断服务函数中,依然无法正常喂
狗
,因为如果系统发生死机,整个程序的执行都会停止,包括中断的触发和执行。
在嵌入式系统中,由于MCU(微控制单元:Microcontroller Unit)的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测程序运行状态的模块,俗称"
看门
狗
"(watchdog)
在系统运行以后也就启动...