这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 有奖活动 » 【分享开发笔记,赚取电动螺丝刀】FPB-RA6E2开发板的WDT功能测试

共3条 1/1 1 跳转至

【分享开发笔记,赚取电动螺丝刀】FPB-RA6E2开发板的WDT功能测试

菜鸟
2026-01-07 17:10:30     打赏

所谓WDT”即是指看门狗定时器,从本质上来讲它就是一个计数器,在使用的时候,需要给它一个数值, 随后看门狗的计数器开始计时看门狗计数器达到预设值前,可执行重置看门狗计数器的操作,简称喂狗在计数器发生溢出之前没有及时喂狗的话,看门狗就会产生复位请求或不可屏蔽中断请求。

根据该特点,可防止程序在运行期间跑飞的异常情况发生。

FPB-RA6E2开发板上要进行WDT功能测试,可利用板载的2LED灯及按键来测试。

RASC中对LED引脚P206P207的配置见图1所示,对按键引脚P304的配置如图2所示。

image.png

1 配置引脚P206

image.png

2 配置按键引脚 

为使用WDT,需在栈中添加WDT,见图3和图4所示。

image.png

3 添加WDT

image.png

4完成添加 

WDT的属性配置见图5所示,随后即可生成项目工程。

image.png

5 属性配置

在进入生成的KEIL工程后,需添加的程序如下:

喂狗函数:

void WDT_Feed(void){
   //喂狗,刷新递减计数器的值
   R_WDT_Refresh(&g_wdt0_ctrl);
}

看门狗NMI发生时中断回调函数:

void wdt_callback (wdt_callback_args_t * p_args){
   //防止编译器产生关于函数中没有使用形参的警告
   (void) p_args;
   //ED1亮,在这里LED灯函数代指实际应用中应该放置重要的函数,如保存重要数据等
   R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_02_PIN_07, BSP_IO_LEVEL_HIGH);
   R_BSP_SoftwareDelay(3, BSP_DELAY_UNITS_SECONDS);
   // 通过软件复位MCU
   __NVIC_SystemReset();
}

看门狗初始化函数:

void WDT_Init(void)
{
   //如果使用J-Link调试器进行调试的话需要加上这一句话
   R_DEBUG->DBGSTOPCR_b.DBGSTOP_WDT = 0;
   //初始化看门狗(WDT)模块
   R_WDT_Open(&g_wdt0_ctrl, &g_wdt0_cfg);
   //刷新看门狗计数器,其作用是初次启动寄存模式下的看门狗计数器,除非是在刷新允许的范围内,否则自启动模式下不应该使用该函数。
   R_WDT_Refresh(&g_wdt0_ctrl);
}

测试主程序:

void hal_entry(void)
{  
   R_BSP_PinAccessEnable();
   R_BSP_PinWrite(BSP_IO_PORT_02_PIN_06, BSP_IO_LEVEL_LOW);
   R_BSP_PinWrite(BSP_IO_PORT_02_PIN_07, BSP_IO_LEVEL_LOW);
   R_BSP_PinWrite(BSP_IO_PORT_03_PIN_04, BSP_IO_LEVEL_HIGH);
   R_BSP_PinAccessDisable(); 
   //LED2亮3秒
   R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_02_PIN_06, BSP_IO_LEVEL_HIGH);
   R_BSP_SoftwareDelay(3,BSP_DELAY_UNITS_SECONDS);
   //初始化看门狗并开启计数器
   WDT_Init();
   while(1)
   {
      //LED2灯灭代指实际应该写的需要被WDT监控的程序
          R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_02_PIN_06, BSP_IO_LEVEL_LOW);
          if(R_BSP_PinRead(BSP_IO_PORT_03_PIN_04)==BSP_IO_LEVEL_LOW)
          {
          WDT_Feed();
          }
   }
}

经程序的编译和下载,其测试效果为:

先是点亮LED2,在延时3秒后会熄灭LED2。随后会点亮LED1,表示已发生看门狗NMI事件,经3秒的延时系统将进行复位重启。也就是因为没有及时的喂狗,意味着程序已出现异常被强制重启运行。

而在LED2熄灭后,若按下按键,则强制进行喂狗会导致系统无法进入看门狗NMI事件,即不会出现重启的现象。




关键词: FPB-RA6E2    

专家
2026-01-13 22:17:17     打赏
2楼

这是使用瑞萨自己的IDE开发的?看起来不错啊。


专家
2026-01-15 17:18:03     打赏
3楼

看门狗是嵌入式开发的一个保障。


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]