RT-Thread 使用设备驱动框架 驱动看门狗例程中 MSH命令后提示“find iwg failed“”解决办法

太长不看版:
修改这几行代码为下面这些
#define IWDG_DEVICE_NAME “wdt” /* 看门狗设备名称 */

    rt_uint32_t timeout = 10;    /* 溢出时间 */

代码参考

https://www.rt-thread.org/document/api/iwdg_sample_8c-example.html

下面是官方例程中的代码

/*
 * Copyright (c) 2006-2018, 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 <rtthread.h>
#include <rtdevice.h>
#define IWDG_DEVICE_NAME    "iwg"    /* 看门狗设备名称 */
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 = 1000;    /* 溢出时间 */
    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;
    }
    /* 设置空闲线程回调函数 */
    rt_thread_idle_sethook(idle_hook);
    return ret;
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(iwdg_sample, iwdg sample);

要想这个例程能用。首先需要初始化IIWDG。我使用RT-Thread Studio开发
cube生成看门狗设置后添加到主函数。保证初始化设置正确
在这里插入图片描述
第二
打开RT-Thread Settings【也可以用env设置】
找到WDT(窗口看门狗)。可以右键搜索查找
在这里插入图片描述
第三
将官方例程放入工程中
在这里插入图片描述
第四
编译下载
输入命令后报错找不到iwg
在这里插入图片描述
经过debug调试后,发现。。。压根没有iwg这个设备。要么你自己重新给独立看门狗编一套。
要么。。。修改设备名。变成窗口看门狗来用。
我用的芯片是ST32F7,独立看门狗也可以作为窗口看门狗来用。
在这里插入图片描述
再次编译运行
wc!这是啥错误。设置超时时间过长???在这里插入图片描述
找到报错代码段查看,发现是timeout有问题在这里插入图片描述
这不是设置1000吗?怎么会超过32s呢?在这里插入图片描述
第一步查看iwdg初始化设置是不是设置有问题
在这里插入图片描述
发现没有后,查看这个宏
在这里插入图片描述
这TM设置的时间是以秒为单位的。。。。
在这里插入图片描述
修改一下
在这里插入图片描述
编译运行
在这里插入图片描述
ok!打工人不加班。。。溜了

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值