通过分析瑞萨已适配的看门狗驱动,我们可以得到以下信息:
1. 需要使用fsp生成一个名为g_wdt_ctrl的全局变量,用于维护看门狗所需配置
2. 看门狗时间不可动态设置,只能在fsp中默认设置
配置过程
配置代码
在emu中运行menuconfig,打开看门狗配置
 
 
运行scons --target=mdk5,把dac部分导入工程

配置看门狗
打开新生成的keil工程后运行RASC,增加看门狗相关配置


生成代码配置
修改代码
因为驱动对接上层的设备名称就叫wdt,因此我就直接使用rtt官网上的测试脚本做测试了,但是需要做以下修改:
1. 由于驱动使用fsp设置的超时时间,因此上层设置超时时间时会向上层报错,需要屏蔽上层设置超时时间的代码。
2. 测试程序默认看门狗正常工作,增加了不断喂狗的动作,反而不能判断看门狗是否工作,因此将喂狗回调去掉。
具体代码如下:
#define WDT_DEVICE_NAME    "wdt"    /* 看门狗设备名称 */
static rt_device_t wdg_dev;         /* 看门狗设备句柄 */
static int wdt_sample(int argc, char *argv[])
{
    rt_err_t ret = RT_EOK;
    char device_name[RT_NAME_MAX];
    /* 判断命令行参数是否给定了设备名称 */
    if (argc == 2)
    {
        rt_strncpy(device_name, argv[1], RT_NAME_MAX);
    }
    else
    {
        rt_strncpy(device_name, WDT_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;
    }
    /* 初始化设备 */
     rt_device_init(wdg_dev);
    /* 启动看门狗 */
    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;
    }
    return ret;
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(wdt_sample, wdt sample);编译固件
结果验证
\ | / - RT - Thread Operating System / | \ 5.2.0 build Feb 9 2025 22:38:00 2006 - 2024 Copyright by RT-Thread team Hello RT-Thread! msh > msh > msh > msh >wd wdt_sample msh >wdt_sample msh > \ | / - RT - Thread Operating System / | \ 5.2.0 build Feb 9 2025 22:38:00 2006 - 2024 Copyright by RT-Thread team Hello RT-Thread! msh >
其实这个位置使用动态图或者录视频的方式更加直观,具体效果为,运行wdt_sample后约2s,从打印上看,芯片重启,此时看门狗起作用。

 
					
				
 
			
			
			
						
			 
					
				 
					
				 我要赚赏金
 我要赚赏金 STM32
STM32 MCU
MCU 通讯及无线技术
通讯及无线技术 物联网技术
物联网技术 电子DIY
电子DIY 板卡试用
板卡试用 基础知识
基础知识 软件与操作系统
软件与操作系统 我爱生活
我爱生活 小e食堂
小e食堂

