HC32F460开发之看门狗功能


前言

在一些设备需要长时间稳定运行的场合中,看门狗功能可以说是必不可少的。但在一些低功耗设备中,硬件看门狗的启用又会增大设备的功耗。在实际的项目开发中,是否需要启用看门狗需要根据实际需求而定。大部分的MCU都带有看门狗计数器,HC32F460内置就有两个看门狗计数器,分别为专用的看门狗计数器(SWDT)和通用的看门狗计数器(WDT)。今天,我们主要就HC32F460来讲解下看门狗功能的使用。
在这里插入图片描述


一、看门狗是什么?

看门狗,又叫watchdog timer,是一个硬件计时电路,一般用来监测由软件故障导致的系统故障。在看门狗启动后,硬件计数器会开始计时,当计数溢出时,则会产生看门狗复位,使得MCU复位。在看门狗计数期间(产生看门狗复位信号之前),我们需要定时去刷新计数器(也就是我们常说的喂狗)。若是程序出现未知的逻辑错误导致程序跑飞或进入死循环,在设定的时间内没有及时喂狗,则会发生看门狗超时复位。因此,看门狗功能可以针对程序因一些潜在错误或外界恶劣环境等干扰导致的系统死机,在无人工干预情况下自动恢复系统工作状态。
在这里插入图片描述

二、看门狗的使用

在了解了看门狗的概念和功能后,下面还是一样,我们需要回到HC32F460的芯片用户手册,结合官方的DEMO来了解HC32F460看门狗功能的使用。

1.简介

首先是关于看门狗的简介,HC32F460有两个看门狗计数器,一种是计数时钟源为专用内部 RC(SWDTLRC:10KHz)的专用看门狗计数器(SWDT),另一种是计数时钟源为 PCLK3 的通用看门狗计数器(WDT)。这两种计数器的主要区别如下:
在这里插入图片描述
下面主要介绍SWDT的使用方法。

2.启动

从上面的表格中我们可以得知,看门狗的启动方式有两种,一种是硬件启动,一种是软件启动。SWDT专用看门狗计数器只支持硬件启动方式。硬件启动方式是指启动时从主闪存区域读取看门狗计数器的设定信息(ICG0 寄存器),计数器自动开始计数。
工程配置步骤如下:
在库函数配置文件ddl_config.h中打开宏定义

#define DDL_ICG_ENABLE                              (DDL_ON)
#define DDL_SWDT_ENABLE                             (DDL_ON)

工程中添加相关文件后,hc32f460_icg.h打开宏定义

#define ICG0_SWDT_HARDWARE_START                (ICG_FUNCTION_ON)

WDT_CR寄存器主要用于配置看门狗时钟分频系数,计数周期,刷新区域等,配置如下

/*!< SWDT register config */
#define ICG0_SWDT_AUTS                          (SWDT_AUTO_START_AFTER_RESET)
#define ICG0_SWDT_ITS                           (SWDT_RESET_REQUEST)
#define ICG0_SWDT_PERI                          (SWDT_COUNT_UNDERFLOW_CYCLE_256)
#define ICG0_SWDT_CKS                           (SWDT_COUNT_SWDTCLK_DIV256)
#define ICG0_SWDT_WDPT                          (SWDT_0To100PCT)
#define ICG0_SWDT_SLTPOFF                       (SWDT_SPECIAL_MODE_COUNT_STOP)

WDT_CR寄存器说明
在这里插入图片描述
在这里插入图片描述
这样配置完成后,SWDT看门狗就可以正常启动了。

3.刷新看门狗计数器

看门狗启动后,我们需要在工程中新增一个任务,定时去刷新看门狗计数器。
刷新动作如图所示
在这里插入图片描述
库函数中也有相关的函数封装实现

/**
 *******************************************************************************
 ** \brief SWDT refresh counter
 **
 ** \param [in] None
 **
 ** \retval Ok                          Process successfully done
 **
 ******************************************************************************/
en_result_t SWDT_RefreshCounter(void)
{
    en_result_t enRet = Ok;

    M4_SWDT->RR = SWDT_REFRESH_START_KEY;
    M4_SWDT->RR = SWDT_REFRESH_END_KEY_;

    return enRet;
}

在工程中创建一个看门狗任务,用于定时进行看门狗计数器的刷新操作

	/* 看门狗任务 */
	rt_thread_init(&swdt_thread,
					"swdt task",
					swdt_task,
					RT_NULL,
					&swdt_stack,
					sizeof(swdt_stack),
					swdt_priority,
					1000);
	rt_thread_startup(&swdt_thread);
/**
 * @brief 看门狗任务
 * 
 * @details 看门狗计数周期为1/(10KHz/256(div))*256=6.5536(s)
 * 
 * @param para 
 */
static void swdt_task(void * para)
{
	PRO_LOG(LOG_DEBUG, "Entry %s. \r\n", __func__);

	while(1)
	{
		/* 重置计数器 */
		SWDT_RefreshCounter();
		rt_thread_delay(5000);
	}
}

SWDT专用看门狗复位将 RMU_RSTF0.SWDRF 置位,我们可以根据这个标志位来判断是否看门狗复位信号产生。

RMU_GetResetCause(&stcRmuRstCause);
if (Set == stcRmuRstCause.enSwdt)
{
    printf("RESET_SWDT_TRIGGER. \r\n");
}
else
{
    printf("RESET_OTHER_TRIGGER\r\n");
}
RMU_ClrResetFlag();

总结

关于看门狗的使用,官方用户手册和例程介绍也较为详细(例程:icg\icg_swdt_reset_hw_startup),这里就不再提供源码。以上就是今天要讲的内容,若是有什么地方理解错误,也欢迎大家留言指出。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: hc32f460库函数开发手册是用于hc32f460芯片的库函数开发的指南。hc32f460是一款32位高性能微控制器,它的库函数开发手册提供了针对该芯片的各种库函数的详细说明和使用方法。 该手册包含了hc32f460的各个功能模块的库函数,包括IO口、ADC、UART、SPI、I2C、定时器、中断控制器等等。对于每个库函数,手册提供了函数原型、参数说明、返回值等详细的描述,以及示例代码和应用场景。 通过阅读hc32f460库函数开发手册,开发人员可以了解到如何使用库函数来实现各种功能。例如,如果想要配置一个IO口的输入输出方向和电平状态,可以通过查找手册中GPIO模块的库函数相关信息来完成。如果想要使用定时器来实现定时中断功能,同样可以通过手册中定时器模块的库函数相关信息来完成。 在进行hc32f460库函数开发时,手册可以作为开发人员的重要参考资料。它可以帮助开发人员正确使用库函数,提高开发效率,减少开发错误。同时,手册还包含了大量的示例代码和应用场景,对于初学者来说,可以通过这些示例代码更好地理解库函数的使用方法。 总的来说,hc32f460库函数开发手册是一本对于hc32f460微控制器库函数开发非常有帮助的指南,它提供了详细的库函数说明和示例代码,帮助开发人员快速掌握并使用hc32f460的库函数,从而实现各种功能。 ### 回答2: HC32F460库函数开发手册是一本详细介绍HC32F460系列微控制器库函数的手册。HC32F460是一款32位高性能微控制器,集成了丰富的外设模块和强大的处理能力,适用于工业控制、汽车电子、消费电子等领域。 该开发手册首先介绍了HC32F460系列微控制器的硬件架构和特性,包括芯片封装、内部外设、主频和存储器等方面的详细说明。接着,手册针对各个外设模块,如GPIO、定时器、串口等,详细介绍了每个模块的主要功能、寄存器的配置方法和实现技巧,并给出了相应的示例代码。 手册还详细介绍了HC32F460库函数的使用方法和注意事项。库函数是封装了芯片底层硬件操作的一种高级编程接口,可以极大地简化开发者的程序编写工作。该手册通过详细的代码说明和示例,指导开发者如何正确地使用库函数进行驱动开发和应用程序编写。 此外,手册还包含了HC32F460系列微控制器的软件开发环境的配置和使用方法,包括编译器、调试器和编程器的设置和使用。通过阅读该手册,开发者可以全面理解HC32F460系列微控制器的功能和使用方法,从而更高效地进行开发工作。 总之,HC32F460库函数开发手册是HC32F460系列微控制器开发的重要参考资料,通过阅读和理解手册内容,开发者可以掌握HC32F460的硬件和软件开发技术,进而进行高效、可靠的嵌入式应用程序开发。 ### 回答3: HC32F460是华大基于ARM Cortex-M4内核的一款32位微控制器芯片系列。开发手册是华大提供给开发者的一份重要文档,其中包含了HC32F460系列芯片的库函数开发指南和详细资料。 HC32F460库函数开发手册是为了帮助开发者更好地使用和了解这款芯片的库函数而编写的。库函数是一组事先编写好的代码库,集成了各种功能功能模块的函数接口,有助于开发者快速开发应用程序。 开发手册详细介绍了HC32F460系列芯片的库函数的使用方法和功能特点,通过详细的函数说明和示例代码,开发者可以了解不同功能模块的库函数调用方法和参数设置。开发手册还提供了丰富的应用场景案例,帮助开发者理解不同函数在实际应用中的作用和用法。 在开发手册中,开发者可以学习到如何初始化芯片和外设、如何访问芯片的不同寄存器和功能模块、如何使用中断和定时器等功能、如何与外部设备进行通信等。手册还提供了详细的时序图和电路框图,帮助开发者更好地理解和设计应用电路。 总之,HC32F460库函数开发手册对于开发者来说是一份不可或缺的工具,它提供了详细的指导和参考资料,帮助开发者快速上手和开发应用程序。通过学习和使用开发手册,开发者可以充分发挥HC32F460芯片的功能和性能,实现更高效、可靠的应用开发

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Top0_0lll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值