本文主要是介绍【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】详细使用教程十五:独立看门狗使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!