【RTT-Studio】详细使用教程十五:独立看门狗使用

2024-09-03 09:28

本文主要是介绍【RTT-Studio】详细使用教程十五:独立看门狗使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 一、简介
    • 二、初始化配置
    • 三、实际使用

一、简介

  STM32 有两个看门狗,独立看门狗窗口看门狗,独立看门狗又称宠物狗,窗口看门狗又称警犬。可用来检测和解决由软件错误引起的故障。两个看门狗的原理都是当计数器达到给定的超时值时,产生系统复位,对于窗口型看门狗同时会产生一个中断。
  独立看门狗 (IWDG) 由专用的内部低速时钟 (LSI) 驱动,即使主时钟发生故障它也仍然有效。
  窗口看门狗由从APB1 时钟分频后得到的时钟驱动。

区别:
在这里插入图片描述


二、初始化配置

1.配置RT-Thread Settings—》组件—》设备驱动程序—》使用WDT设备驱动程序。
在这里插入图片描述

2.开启stm32f1xx_hal_conf.h中的宏定义
在这里插入图片描述


三、实际使用

1.使用RT接口函数初始化硬件看门狗

#define WDT_DEVICE_NAME    "wdt"    /* 看门狗设备名称 */static rt_device_t wdg_dev;         /* 看门狗设备句柄 */static void idle_hook(void)
{/* 在空闲线程的回调函数里喂狗 */rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_KEEPALIVE, NULL);rt_kprintf("feed the dog!\n ");//正式使用时去掉
}int wdt_sample(void)
{rt_err_t ret = RT_EOK;rt_uint32_t timeout = 1;        /* 溢出时间,单位:秒 */char device_name[RT_NAME_MAX]=WDT_DEVICE_NAME;/* 根据设备名称查找看门狗设备,获取设备句柄 */wdg_dev = rt_device_find(device_name);if (!wdg_dev){rt_kprintf("find %s failed!\n", device_name);return RT_ERROR;}/* 初始化设备 */ret = rt_device_init(wdg_dev);if (ret != RT_EOK){rt_kprintf("initialize %s failed!\n", device_name);return RT_ERROR;}/* 设置看门狗溢出时间 */ret = rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_SET_TIMEOUT, &timeout);if (ret != RT_EOK){rt_kprintf("set %s timeout failed!\n", device_name);return RT_ERROR;}/* 启动看门狗 */ret = rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_START, RT_NULL);if (ret != RT_EOK){rt_kprintf("start %s failed!\n", device_name);return -RT_ERROR;}/* 设置空闲线程回调函数 */rt_thread_idle_sethook(idle_hook);return ret;
}

2.main.c

#include <rtthread.h>
#include <drv_common.h>
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>extern int wdt_sample(void);
int main(void)
{int count = 1;while (count++){LOG_D("Hello RT-Thread!");rt_thread_mdelay(1000);}return RT_EOK;
}

这篇关于【RTT-Studio】详细使用教程十五:独立看门狗使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1132624

相关文章

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

prometheus如何使用pushgateway监控网路丢包

《prometheus如何使用pushgateway监控网路丢包》:本文主要介绍prometheus如何使用pushgateway监控网路丢包问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录监控网路丢包脚本数据图表总结监控网路丢包脚本[root@gtcq-gt-monitor-prome

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与