@[toc]

太长不看版:
修改这几行代码为下面这些
1 2 3
| #define IWDG_DEVICE_NAME "wdt"
rt_uint32_t timeout = 10;
|
代码参考
https://www.rt-thread.org/document/api/iwdg_sample_8c-example.html
下面是官方例程中的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
#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_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!打工人不加班。。。溜了