RT_Thread_Learning_02_看门狗使用
在之前已经移植好的工程上操作:
1.打开CubeMX配置看门狗时钟
配置看门狗时钟,生成代码。
2.编辑Kconfig看门狗选项:
查询:STM32F407VET6_RTT\components\drivers\include\rtdevice.h文件查找需要开启的宏定义并在STM32F407VET6_RTT\bsp\stm32\STM32F407VET6_JT\board\kconfig中编辑对应配置:
3.在Menuconfig打开RTT看门狗功能
4.编译MDK5工程
6
5.打开生成的工程检查:
6.MDK5下出现看门狗文件:
7.编写应用层程序:
//app_wdt.c
#include <rtthread.h>
#include <rtdevice.h>
#include "app_wdt.h"
static rt_device_t wdg_dev;
rt_uint32_t i = 0;
rt_bool_t feedFull = RT_FALSE;
int idle_hook(void)
{
if(i < 20)
{
rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_KEEPALIVE, NULL);
rt_kprintf("feed %d dog!\n",i++);
return 0;
}
return -1;
}
int wdg_fun(void)
{
rt_err_t RT_Value = -1;
rt_uint32_t timeout = 1;
char device_name[RT_NAME_MAX]=WDT_DEVICE_NAME;
wdg_dev = rt_device_find(device_name);
if(RT_NULL == wdg_dev)
{
rt_kprintf("rt_device_find failed!\n");
return RT_Value;
}
RT_Value = rt_device_init(wdg_dev);
if(RT_EOK != RT_Value)
{
rt_kprintf("rt_device_init failed!\n");
return RT_Value;
}
RT_Value = rt_device_control(wdg_dev,RT_DEVICE_CTRL_WDT_SET_TIMEOUT,&timeout);
if(RT_EOK != RT_Value)
{
rt_kprintf("rt_device_control failed!\n");
return RT_Value;
}
/* 启动看门狗 */
RT_Value = rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_START, RT_NULL);
if (RT_Value != RT_EOK)
{
rt_kprintf("start %s failed!\n", device_name);
return -RT_ERROR;
}
return RT_Value;
}
MSH_CMD_EXPORT(wdg_fun, wdt sample);
//app_wdt.h
/****************************************************************************
File name : app_wdt.h
Author : JT
Description : 看门狗头函数
Version : 暂无说明
Function List :
1、添加打印功能
History:
<author> <time> <version> <desc>
JT 2021/02/21 V0.1 WDT
******************************************************************************/
#ifndef __APP_WDT_H__
#define __APP_WDT_H__
#define WDT_DEVICE_NAME "wdt" /* 看门狗设备名称 */
int wdg_fun(void);
int idle_hook(void);
//main.c
/****************************************************************************
File name : main.c
Author : JT
Description : 入口函数
Version : 暂无说明
Function List :
1、添加打印功能
History:
<author> <time> <version> <desc>
JT 2021/02/21 V0.1 WDT
******************************************************************************/
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
#include "app_wdt.h"
/****************************************************************************
Function : main.c
Description : 主函数
Input : 无
Output : 无
Return : int
Othre : 无
******************************************************************************/
int main(void)
{
wdg_fun();
while(1)
{
rt_thread_mdelay(500);
idle_hook();
}
}