Rtthread學習筆記(十三)RT-Thread Studio開啓硬件看門狗Watchdog

一、開啓硬件看門狗Watchdog

1、配置RT-Thread Settings

在這裏插入圖片描述

2、開啓stm32f1xx_hal_conf.h中的宏定義

在這裏插入圖片描述

3.使用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;
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章