591|1

55

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【STM32H7S78-DK】独立看门狗 [复制链接]

开发环境:
IDE:MKD 5.38a
STM32CubeMX: V6.12.0
开发板:STM32H7S78-DK开发板
MCU:STM32H7S7L8H6H

1 独立看门狗工作原理

独立看门狗用通俗一点的话来解释就是一个 12 位的递减计数器,当计数器的值从某个值一直减到 0 的时候,系统就会产生一个复位信号,即 IWDG_RESET。如果在计数没减到 0 之前,刷新了计数器的值的话,那么就不会产生复位信号,这个动作就是我们经常说的喂狗看门狗功能 VDD 电压域供电,在停止模式和待机模式下仍能工作
独立看门狗由内部专门的 32Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟是一个内部 RC 时钟,所以并不是准确的32Khz,而是在 30~60Khz 之间的一个可变化的时钟,只是我们在估算的时候,以32Khz 的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。
Figure 1-1 独立看门狗框图
独立看门狗的架构是很简单的,本质就是一个递减计数器,和Systick有些类似,只是运行在低速时钟下,另外还有寄存器访问保护功能。
【注】看门狗功能处于VDD供电区,即在停机和待机模式时仍能正常工作。
IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。 WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。
Table 1-1 看门狗超时时间(32kHz的输入时钟(LSI))
【注】这些时间是按照32kHz时钟给出。实际上,MCU内部的RC频率会在30kHz到60kHz之间变化。此外,即使RC振荡器的频率是精确的,确切的时序仍然依赖于APB接口时钟与RC振荡器时钟之间的相位差,因此总会有一个完整的RC周期是不确定的。通过对LSI进行校准可获得相对精确的看门狗超时时间。

2 独立看门狗的寄存器描述

首先是键值寄存器 IWDG_KR,该寄存器的各位描述如下图所示。
Figure 1-2 键寄存器(IWDG_KR)
在键值寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值 0xFFF 递减计数。当计数器计数到末尾 0x000 时,会产生一个复位信号(IWDG_RESET)。无论何时,只要键寄存器 IWDG_KR 中被写入 0xAAAA,IWDG_RLR 中的值就会被重新加载到计数器中从而避免产生看门狗复位。
IWDG_PR 和 IWDG_RLR 寄存器具有写保护功能。要修改这两个寄存器的值,必须先向IWDG_KR 寄存器中写入0x5555。将其他值写入这个寄存器将会打乱操作顺序,寄存器将重新被保护。重装载操作(即写入0xAAAA)也会启动写保护功能。预分频寄存器(IWDG_PR)用来设置看门狗时钟的分频系数。重装载寄存器用来保存重装载到计数器中的值,该寄存器也是一个 32位寄存器,但是只有低 12 位是有效的。
Figure 1-3 预分频寄存器(IWDG_PR)
Figure 1-4 重装载寄存器(IWDG_RLR)

3 独立看门狗的具体代码实现

3.1 STM32Cube生成工程

我们在串口的例子的基础上进行配置。IWDG时钟预分频系数64分频,计数器重装载值 800。
Figure 1-5 使能独立看门狗
  • IWDG counter clock prescaler:看门狗分频系数
  • IWDG window value:独立狗窗口阈值
  • IWDG down-counter reload value:独立狗复位阈值
  • IWDG Early Wakeup Interrupt:独立看门狗溢出的中断阈值,要比IWDG down-counter reload value小
即可得到相应超出(溢出)时间:
Tout=((4×2^PRER) ×RLR)/LSI时钟频率=800*64/32Khz=1.6s
如果配置了独立看门狗中断,可通过中断溢出喂狗。
独立看门狗的时钟由专用的低速时钟(LSI)驱动(40kHz),即使主时钟发生故障它仍有效。独立看门狗适合应用于需要看门狗作为一个在主程序之外 能够完全独立工作,并且对时间精度要求低的场合。默认配置即可。
Figure 1-6 配置时钟
生成工程即可。

3.2 独立看门狗的具体代码分析

独立看门狗一般用来检测和解决由程序引起的故障,比如一个程序正常运行的时间是50ms,在运行完这段程序之后紧接着进行喂狗,我们设置独立看门狗的定时溢出时间为60ms,比我们需要监控的程序 50ms 多一点,如果超过 60ms 还没有喂狗,那就说明我们监控的程序出故障了,跑飞了,那么就会产生系统复位,让程序重新运行。
这个程序很简单,只需要及时喂狗即可。
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MPU Configuration--------------------------------------------------------*/
MPU_Config();
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_UART4_Init();
MX_IWDG_Init();
/* USER CODE BEGIN 2 */
HAL_UART_Receive_IT(&huart4, (uint8_t *)&RxBuffer, 1);
printf("独立看门狗\r\n");
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_IWDG_Refresh(&hiwdg); //喂狗
printf("喂狗\r\n");
HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
/* Insert delay 1000 ms */
HAL_Delay(1000);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
主函数很简单,初始化独立看门狗后,在主循环里不断喂狗即可。HAL_IWDG_Refresh()函数就是喂狗操作,值得注意的是,本程序溢出时间是1.6s,我们喂狗时间要小于1.6s,毕竟LSI精度不高。

3.3 独立看门狗实现现象

编译无误,打开串口,现象如下:
当注释掉喂狗语句后,板子就会不断重启,因为没有喂狗就导致板子不断复位。
 
 
 
 
 

此帖出自stm32/stm8论坛

最新回复

感谢分享,说的不错,看门狗其实就是一个定时器,这样说   详情 回复 发表于 2024-10-17 13:46
点赞 关注
 

回复
举报

10

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

感谢分享,说的不错,看门狗其实就是一个定时器,这样说

此帖出自stm32/stm8论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
华为公司PCB设计规范

华为公司PCB设计规范

情有独钟,迷情电子三五年(三)

时间过得真快,转眼又是一岁入账了。和去年生日一样,今年的生日还是想简单的写一些东西来记录一下自己和电子的情感纠葛。    ...

关于旁路电容的深度对话(很好很强大)

关于旁路电容的深度对话,感觉“神”级的一些讨论,读后收获很大 31417-%-277733-%-

【TI原创】在任何上网的机器监测LM3S8962的温度

这个程序利用花生壳可以在任何一台能上互联网的电脑看到家里的开发板及板子周围的温度,我刚才测了下35度,呵呵呵,还算平安,若 ...

【TI原创】LM3S使用笔记之I2C总线(一)

STM32的IIC实在太难用了,一个很简单的东西,ST的人把它弄得很复杂,不得不说STM32的IIC很鸡肋。首先请大家不要吃惊,本文没有发 ...

颁奖:《5G直播回顾edm调查问卷》5元红包

恭喜以下网友获得《5G直播回顾edm调查问卷》5元红包。 请获奖网友在2020年8月7日前微信扫描下方二维码(关注电子工程世界 ...

【RPi PICO】爱好者Roberthh的一些例子

爱好者Roberthh的一些例子,包括了一些PIO和状态机的帮助 https://github.com/robert-hh/RP2040-Examples

负反馈放大电路设计

571054 答案采用的是电流串联负反馈。答案是考研资料的整理的, 有几点疑问 1、负载是50Ω输出电阻,不是应该采用输 ...

【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A 有运动识别的家庭门前安防模块

本帖最后由 六尘不改 于 2023-12-2 18:38 编辑 有运动识别的家庭门前安防模块 作者:六尘不改 一.项目背景 在社会 ...

8051还有学的必要吗?

好多教材还是写的8051,这个有学的必要吗?直接学32好一些不?

关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表