前言:
今天我们来学习看门狗的配置与函数,看门狗可以有效解决程序的跑飞,在使用过程中比较常见,是防止芯片故障的有效外设,我们一起来学习下HAL库 STM32CubeMX的独立看门狗,靠窗看门狗的使用。本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用
所用工具:
1、芯片: STM32F407ZET6
2、STM32CubeMx软件
3、IDE: MDK-Keil软件
4、STM32F1xx/STM32F4xxHAL库
知识概括:
通过本篇博客您将学到:
STM32CubeMX创建看门狗例程
独立看门狗,靠窗看门狗 工作原理
看门狗
在由单片机构成的微型计算机系统中单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环;或者因为用户配置代码出现BUG,导致芯片无法正常工作,出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog)
简单说:看门狗的本质就是定时计数器,计数器使能之后一直在累加 而喂狗就是重新写入计数器的值,时计数器重新累加,
如果在一定时间内没有接收到喂狗信号(表示MCU已经挂了),便实现处理器的自动复位重启(发送复位信号)
STM32的内置看门狗
STM32内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗、窗口看门狗)可以用来检测和解决由软件错误引起的故障。当计数器达到给定的超时值时,触发一个中断(仅适用窗口看门狗)或者产生系统复位。
独立看门狗(IWDG)由专用的低速时钟(LSI)驱动(40kHz),即使主时钟发生故障它仍有效。独立看门狗适合应用于需要看门狗作为一个在主程序之外 能够完全独立工作,并且对时间精度要求低的场合。
窗口看门狗由从APB1时钟(36MHz)分频后得到时钟驱动。通过可配置的时间窗口来检测应用程序非正常的过迟或过早操作。 窗口看门狗最适合那些要求看门狗在精确计时窗口起作用的程序。
IWDG-独立看门狗
工程创建
1、设置RCC
设置高速外部时钟HSE 选择外部时钟源
2、配置IWDG
IWDG时钟预分频系数 4分频
计数器重装载值 4095 RLR
超出(溢出)时间计算:
Tout=((4×2^PRER) ×RLR)/LSI时钟频率
对应不同预分频系数的PRER值:
3、时钟源设置
1选择外部时钟HSE 8MHz
2PLL锁相环倍频72倍
3系统时钟来源选择为PLL
4设置APB1分频器为 /2
32的时钟树框图 如果不懂的话请看《【STM32】系统时钟RCC详解(超详细,超全面)》
4、项目文件设置
1 设置项目名称
2 设置存储路径
3 选择所用IDE
5、创建工程文件
然后点击GENERATE CODE 创建工程
配置下载工具
新建的工程所有配置都是默认的 我们需要自行选择下载模式,勾选上下载后复位运行
HAL库独立看门狗函数库讲解:
看门狗初始化函数
HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg)
喂狗函数:
HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg)
举例: HAL_IWDG_Refresh(&hiwdg); //看门狗喂狗
使用该函数定时喂狗即可
WWDG-窗口看门狗
窗口看门狗的定义
窗口看门狗跟独立看门狗一样,也是一个递减计数器不断的往下递减计数,当减到一个固定值 0x3F 时还不喂狗的话,产生复位,这个值叫窗口的下限,是固定的值,不能改变。
窗口看门狗之所以称为窗口,就是因为其喂狗时间是在一个有上下限的范围内(计数器减到某个值~计数器减到0x3F),在这个范围内才可以喂狗,可以通过设定相关寄存器,设定其上限时间(但是下限是固定的0x3F)
1计数器的初始值
2 是我们设置的上窗口(W[6:0]值
3是下窗口值(0x3F)
窗口看门狗计数器的值只有在2和3 之间(上窗口和下窗口之间)才可以喂狗
窗口看门狗中断:
并且窗口看门狗还可以使能中断,如果使能了提前唤醒中断,系统出现问题,喂狗函数没有生效,那么在计数器由减到0x40 (0x3f+1) 的时候,便会先进入中断,之后才会复位,你也可以在中断里面喂狗
WDGG窗口看门狗配置
1.点击WWDG
2.
WWDG时钟预分频系数 8
WWDG上窗口值 0x5F
WWDG计数器值 : 0x7F
设置看门狗提前唤醒中断
3.
使能窗口看门狗中断
其余配置与独立看门狗相同配置即可
HAL库独立窗口狗函数库讲解:
看门狗初始化:
HAL_WWDG_Init(WWDG_HandleTypeDef *hwwdg)
喂狗:
HAL_WWDG_Refresh(WWDG_HandleTypeDef *hwwdg)
看门狗中断处理函数:
HAL_WWDG_IRQHandler(WWDG_HandleTypeDef *hwwdg)
功能: 判断中断是否正常,并进入中断回调函数
看门狗中断回调函数:
__weak HAL_WWDG_EarlyWakeupCallback(hwwdg);
在HAL库中,每进行完一个中断,并不会立刻退出,而是会进入到中断回调函数中,
看门狗中断运行完成之后,便会进入看门狗的中断回调函数
例程实现:
本例程实现LED点亮延时300ms闪烁
在main.c下方添加中断回调函数
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(hwwdg);
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_15); //LED翻转 --闪烁表示喂狗成功
HAL_WWDG_Refresh(hwwdg); //喂狗
}
上一篇:怎样用STM32CAN总线接口发送和接收数据
下一篇:[HAL库学习之路]6.WWDG-窗口看门狗
推荐阅读
史海拾趣
我不知道做IC的大强如何? 我也不知大公司的技术员过的如何? 现在我知道我过的想当难? 我是科大毕业的,也不算太垃圾的学校。 为何这么难? 我想了好多: 1。我自已努力不足?这是大家都这样说我的(我自已不这样认为)。 2。中国式“圈地 ...… 查看全部问答∨ |
EVC下写入注册表的数据时 TCHAR szKey[ MAX_KEY_LENGTH ] = { L"ABCDEFGHIJKL" }; lRet = RegSetValueEx( hKey, REG_KEY, NULL, REG_SZ,(LPBYTE)szKey, (wcslen(szKey))* sizeof(TC ...… 查看全部问答∨ |
编写LPC2103串口裸程序,使用UART0,希望在上电初始化结束后串口发送字符串“Startup OK!”,并在按键时发送键号(这只是初期的功能,完成后还要加其他功能),串口通讯选择中断方式(发送和接受)。现在出现一个非常怪异的现象,在初始化后的发送 ...… 查看全部问答∨ |
|
急急?? 各位大虾 我想问一下在 Cortex-M3的内核下 我定义一个32位的指针P,我把P加一 是不是相当于加的4 如果是16位的地址指针 是不是相当于加的是2啊 &nbs ...… 查看全部问答∨ |
|
【玩转C2000 Launchpad】 四 TMS320F2802x外设指南 学习了解 TMS320F2802x 少不了的数据手册 http://www.ti.com/lit/ds/sprs523i/sprs523i.pdf PDF里面的结构框图有助理解 CPU User\'s Guides SPRU430 TMS320C28x CPU and Instruction Set Reference Guide Peripheral Guides 1.SPRUFN3 TMS320 ...… 查看全部问答∨ |
|
本帖最后由 dontium 于 2015-1-23 11:22 编辑 对于第二,三章讲的知识,是必须掌握的。手工算几次,心里也有一个大概的感觉。当然还可以用软件仿真偷懒和验证。跟着书中的办法重新学了一遍TINA,感觉比之前的好用了,中文版也不会出现该死的 ...… 查看全部问答∨ |
想用通用定时器产生PWM,不知什么原因程序一直不对,下面附上程序,求助。 void Init_Timer_PWM(void) { SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0); &nb ...… 查看全部问答∨ |
设计资源 培训 开发板 精华推荐
- Allegro MicroSystems 在 2024 年德国慕尼黑电子展上推出先进的磁性和电感式位置感测解决方案
- 左手车钥匙,右手活体检测雷达,UWB上车势在必行!
- 狂飙十年,国产CIS挤上牌桌
- 神盾短刀电池+雷神EM-i超级电混,吉利新能源甩出了两张“王炸”
- 浅谈功能安全之故障(fault),错误(error),失效(failure)
- 智能汽车2.0周期,这几大核心产业链迎来重大机会!
- 美日研发新型电池,宁德时代面临挑战?中国新能源电池产业如何应对?
- Rambus推出业界首款HBM 4控制器IP:背后有哪些技术细节?
- 村田推出高精度汽车用6轴惯性传感器
- 福特获得预充电报警专利 有助于节约成本和应对紧急情况