0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于RT-Thread对N32L40XCL的看门狗定时器进行测试

冬至子 来源:zealsoft 作者:zealsoft 2023-08-08 17:24 次阅读

模块介绍

N32L40XCL 内置独立看门狗(IWDG)和窗口看门狗(WWDG)定时器,解决软件错误导致的问题。看门狗定时器使用非常灵活,提高了系统的安全性和定时控制的准确性。

独立看门狗(IWDG)由运行在 40KHz 的低速内部时钟(LSI 时钟)驱动,在死循环事件或 MCU 卡死发生时,它仍然可以运行。这可以提供更高的安全级别、定时精度和看门狗的灵活性。它可以通过重置来解决由于软件故障引起的系统故障。IWDG 最适合需要看门狗在主应用程序之外作为完全独立进程运行但时序精度限制较低的应用程序。

窗口看门狗(WWDG)的时钟是由 APB1 时钟频率除以 4096 得到的,通过时间窗口的配置来检测程序运行是否异常。因此,WWDG 适用于精确定时,常用于监控因外部干扰或无法预见的逻辑条件导致应用程序偏离其正常操作顺序的软件故障。当 WWDG 递减计数器在达到窗口寄存器值之前或 WWDG_CTRL.T6 位变为 0 之后刷新时,系统复位发生。

官方WDT驱动实现的是独立看门狗(IWDG)。

开发软件
开发环境:
RT-Thread Studio 2.2.6
RT-Thread版本:4.0.2
下载工具:pyocd

步骤说明

新建工程

打开RT-Thread settings,使能Watchdog Timer,如下图所示。

1.jpg

添加保存后,进行编译,若无问题,则进行下一步。

编写测试程序

编写测试程序如下:

#include
#include
#include
/* defined the LED3 pin: PB5 /
#define LED3_PIN GET_PIN(B, 5)
#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 main(void)
{
/
set LED3 pin mode to output /
rt_pin_mode(LED3_PIN, PIN_MODE_OUTPUT);
rt_err_t ret = RT_EOK;
rt_uint32_t timeout = 3000; /
溢出时间,单位:毫秒 /
char device_name[RT_NAME_MAX];
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;
}
/
设置看门狗溢出时间 /
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;
}
/
根据设备名称查找看门狗设备,获取设备句柄 /
wdg_dev = rt_device_find(device_name);
if (!wdg_dev)
{
rt_kprintf("find %s failed!n", device_name);
return RT_ERROR;
}
/
设置空闲线程回调函数 */
rt_thread_idle_sethook(idle_hook);
while (1)
{
rt_pin_write(LED3_PIN, PIN_HIGH);
rt_thread_mdelay(500);
rt_pin_write(LED3_PIN, PIN_LOW);
rt_thread_mdelay(500);
}
}

代码验证

程序很简单,初始化看门狗后,在空闲线程回调函数中不断喂狗即可。在正式使用看门狗时,取消回调函数中的打印。

下载程序后运行。

如果终端打印提示“warning: tidle0 stack is close to end of stack address.”,请在rtconfig.h文件中搜索IDLE_THREAD_STACK_SIZE,并扩大该栈空间。默认值是256,可以扩大到512。

程序中使用RT_DEVICE_CTRL_WDT_SET_TIM命令设置超时时间,需要注意对于N32L40XCL开发板的驱动程序而言,这个超时时间的单位是毫秒,而有些RT-Thread的驱动程序这个超时时间的单位是秒。

此外,这个超时时间不能设置过长,因为过长会超过N32L40XCL寄存器的范围。对于默认配置,这个超时时间不能超过376ms。否则程序会打印如下错误信息

[W/DBG] wdg set timeout parameter too large, please less than 3276 ms

set wdt timeout failed!

具体的工作原理可以参考下面这段drv_wdt.c的代码:

case RT_DEVICE_CTRL_WDT_SET_TIMEOUT:
    {
        RT_ASSERT(*(uint16_t *)args != 0);
        reload_value = *(uint16_t *)args;
        if(reload_value >  0xFFF * 32 *1000 / LsiFreq)
        {
            LOG_W("wdg set timeout parameter too large, please less than %d msn", 0xFFF * 32 *1000 / LsiFreq);
            return -RT_EINVAL;
        }
        /* Enable write access to IWDG_PR and IWDG_RLR registers */
        IWDG_WriteConfig(IWDG_WRITE_ENABLE);
        /* IWDG counter clock: LSI/32 */
        IWDG_SetPrescalerDiv(IWDG_PRESCALER_DIV32);
        reload_value = ((uint32_t)reload_value * LsiFreq / 1000) / 32;
        IWDG_CntReload(reload_value);
        IWDG_WriteConfig(IWDG_WRITE_DISABLE);
    }

如果注释掉上面idle_hook中的喂狗语句,则可以看到程序每3秒重启一次。

章节总结

通过测试,可以验证N32L40XCL芯片的WDT驱动程序可以正常运行。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5357

    浏览量

    120718
  • RT-Thread
    +关注

    关注

    31

    文章

    1296

    浏览量

    40245
  • MCU控制器
    +关注

    关注

    0

    文章

    27

    浏览量

    6910
  • WWDG
    +关注

    关注

    0

    文章

    19

    浏览量

    5517
  • IWDG
    +关注

    关注

    0

    文章

    21

    浏览量

    5230
收藏 人收藏

    评论

    相关推荐

    一文详解看门狗定时器

    看门狗定时器由独立的1 Mhz 片内振荡驱动。这是VCC = 5V 时的典型值。请参见特性数据以了解其他VCC 电平下的典型值。通过设置看门狗定时
    发表于 09-02 16:40 4040次阅读
    一文详解<b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>

    STM32看门狗定时器的工作原理和作用 看门狗定时器的特性

    看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数,一般来说都是向下计数的,给看门狗一个数字,程序开始运行后
    的头像 发表于 07-27 16:30 6216次阅读
    STM32<b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>的工作原理和作用 <b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>的特性

    N32L40XCL-STB的I2C测试步骤

    本人基于 rt-thread studio 对 N32L40XCL 进行I2C测试。具体表现为使用 N32L40XCL 的 I2C1 (PA
    的头像 发表于 09-18 17:35 1475次阅读
    <b class='flag-5'>N32L40XCL</b>-STB的I2C<b class='flag-5'>测试</b>步骤

    RT-Thread Nano入门:独立看门狗(IWDT)

    本文主要介绍怎么用RT-Thread Nano实现独立看门狗IWDT驱动,创建一个喂狗线程,实现定时喂狗功能。
    的头像 发表于 11-22 11:04 2380次阅读
    <b class='flag-5'>RT-Thread</b> Nano入门:独立<b class='flag-5'>看门狗</b>(IWDT)

    内部与外部看门狗定时器的比较

    摘要:本文对内部(集成在处理内部)看门狗定时器(WTD)与外部(基于硬件) WDT的优势和劣势进行了对比。内部看门狗便于设计,但容易失效。
    发表于 05-02 10:34 4674次阅读

    看门狗定时器的设计、工作原理及看门狗定时器的操作

    看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数,一般给看门狗一个数字,程序开始运行后看门狗
    发表于 05-23 09:14 7790次阅读
    <b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>的设计、工作原理及<b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>的操作

    看门狗定时器的作用

    看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数,一般给看门狗一个数字,程序开始运行后看门狗
    发表于 10-20 14:41 6722次阅读

    基于VxWorks的看门狗定高效定时机制设计实现

    VxWorks提供了一个看门狗定时器(watchDog timer),它由以下四个函数维护: wdCreate( ) 创建并初始化一个看门狗定时器;wdDelete( ) 终止并
    发表于 03-06 09:22 4840次阅读
    基于VxWorks的<b class='flag-5'>看门狗</b>定高效<b class='flag-5'>定时</b>机制设计实现

    TB3123 - PIC®单片机的窗口看门狗定时器

    窗口看门狗定时器(Windowed Watchdog Timer,WWDT)是PIC单片机的增强型看门狗定时器。该定时器是PIC单片机现有
    发表于 03-26 14:35 0次下载
    TB3123 - PIC®单片机的窗口<b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>

    什么是看门狗定时器?为何看门狗定时器如此重要?

    的MCU故障可能无意中使看门狗定时器丧失功用,因此整合看门狗可能不会总是按预期的方式运作。同样地,虽然软件以内部看门狗能够侦测所有冻结或停机的方式编写,但是,采取额外的步骤以冗余方式监
    的头像 发表于 08-29 08:13 2.4w次阅读
    什么是<b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>?为何<b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>如此重要?

    看门狗定时器的相关问题和实验说明

    看门狗的作用: 看门狗定时器是一个计数,基本功能是在发生软件问题和程序跑飞后使系统重新启动。看门狗计数
    的头像 发表于 10-06 12:59 4601次阅读
    <b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>的相关问题和实验说明

    LPC2294看门狗定时器

    导致复位/中断5.指示看门狗复位的标志6.可编程的32位定时器与内部预分频。7.可选择时间段,从(T PCLK x 256 x 4)到(TPCLK x 232 x4)应用看门狗的目的是在微控制
    发表于 12-04 10:36 8次下载
    LPC2294<b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>

    使用高速微型看门狗定时器

    在恶劣环境中使用的高速微控制应用的设计人员将使用看门狗定时器来防止软件失控。DS80C320高速微控制集成了看门狗
    的头像 发表于 02-09 11:54 960次阅读

    内部和外部看门狗定时器的比较

    本文比较了内部(与微处理集成)和外部(基于硬件)看门狗定时器(WDT)的优缺点。它解释了内部看门狗定时器易于实现,但容易发生故障。MAXQ
    的头像 发表于 04-03 11:15 3103次阅读

    抄作业!看门狗定时器必备知识

    Air201在模组内部集成了硬件看门狗,今天就一起来聊聊~ 本文将带你了解看门狗的工作原理、应用架构、定时时间设置、软硬件看门狗的区别,以及看门狗
    的头像 发表于 12-30 14:44 176次阅读
    抄作业!<b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>必备知识