Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
cubemx
Env
keil_MDK
WATCHDOG设备驱动开发
发布于 2025-01-02 15:24:14 浏览:44
订阅该版
[tocm] # WatchDog设备驱动开发 WDT (WatchDog Timer,看门狗定时器),看门狗从本质上来说就是一个带定时器的硬件复位电路。它一般有一个输入和一个输出,其中输入的操作叫作喂狗,输出一般连接着另外一部分(一般是单片机)的复位端。看门狗的功能是在定时器的计时时间到达阈值后发出重启信号,如果系统是正常运行的,则可以定时更新定时器的计时时间,以避免看门狗发出重启信号。因此对看门狗的基本操作包含初始化、设置溢出阈值、隔段时间喂狗(更新看门狗定时器计时时间)。 ## 开启WatchDog设备驱动 ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20250102/0ee0c669329e0926ae31dc6055873c0b.png) ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20250102/ca3e1cebee8c5d7e868606223574dc8a.png.webp) ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20250102/f9f58e756641a7a098b90c745ccea986.png) 配置完成之后,执行Scons命令 ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20250102/df77c11c9eb261b69a73fe726bcdd66c.png) 成功之后,工程内就会添加好了watchdog.c设备驱动代码。 ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20250102/e018da5c537efd8d48fe1c4792b1e808.png) ## WatchDog外设驱动添加 打开“\dist\project\board\CubeMX_Config”目录下CubeMx工程文件 使能看门狗,并生成代码 ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20250102/d04ebc219189c79f388fc4551729ad0c.png.webp) ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20250102/a1bdb7514909f1abb5c58e12daf9af04.png.webp) ## 修改Kconfig文件 打开 board 文件夹下的 Konfig 文件,拷贝 GPIO 的配置项,并重命名 GPIO为 WDT。 ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20250102/10a23e8a9ca19348fa43b4881e1be159.png.webp) menuconfig配置使能WDT: ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20250102/ec5f91a999738fb263fc3edee70789b3.png) ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20250102/63d62c3526b46867f7ce8f37cd22215b.png) ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20250102/003efba36561f0ba498a040b792dc9a8.png) Scons编译之后在Drivers目录下多出drv_wdt.c文件 ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20250102/46741de579e88a3fa59b2c3067b21321.png) ## 添加看门狗测试实例 在applications文件夹下添加测试实例代码iwdg_sample.c ```c /* * Copyright (c) 2006-2022, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2018-09-25 misonyo first edition. */ /* * 程序清单:这是一个独立看门狗设备使用例程 * 例程导出了 iwdg_sample 命令到控制终端 * 命令调用格式:iwdg_sample iwg * 命令解释:命令第二个参数是要使用的看门狗设备名称,为空则使用例程默认的看门狗设备。 * 程序功能:程序通过设备名称查找看门狗设备,然后初始化设备并设置看门狗设备溢出时间。 * 然后设置空闲线程回调函数,在回调函数里会喂狗。 */ #include
#include
#define IWDG_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 "); } static int iwdg_sample(int argc, char *argv[]) { rt_err_t ret = RT_EOK; rt_uint32_t timeout = 10; /* 溢出时间 10 秒 */ char device_name[RT_NAME_MAX]; /* 判断命令行参数是否给定了设备名称 */ if (argc == 2) { rt_strncpy(device_name, argv[1], RT_NAME_MAX); } else { rt_strncpy(device_name, IWDG_DEVICE_NAME, RT_NAME_MAX); } /* 根据设备名称查找看门狗设备,获取设备句柄 */ 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; } /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(iwdg_sample, iwdg sample); ``` ## 注意事项 1-注意要将CubeMx生成的系统时钟初始化函数,copy到board.c里面。否则工程中的时钟将初始化失败 ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20250102/ecddd28769bfa03bd28b3fba7da41ee4.png) ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20250102/3ddf3a46a26cf9799ff0c4d1c57f9742.png.webp)
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
Wade
这家伙很懒,什么也没写!
文章
3
回答
0
被采纳
0
关注TA
发私信
相关文章
1
用scons构建代码出现问题
2
求助用scons生成不了mdk工程
3
关于使用scons编译的问题
4
关于scons 编译CPP问题求教
5
scons编译出现警告信息
6
SCons生成MDK5工程出错
7
realtouch的scons问题
8
SCons的PreAction能用吗?
9
scons 编译时出错。
10
求教:关于scons构建rtt时的两个问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
keil_MDK
msh
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
812
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
2
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部