打印
[其他]

华大HC32F460看门狗的使用

[复制链接]
6968|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nawu|  楼主 | 2021-7-6 16:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
HC32F460有两个看门狗:SWDT和WDT
SWDT使用的是内部专用RC时钟源,大约为10KHz,精度低,不受外部晶振和PLL的影响,可靠性较高
WDT使用的是系统时钟PCLK3,精度高,但如果晶振或PLL故障,看门狗会停止计数。

做为系统死机守护的看门狗,建议选用SWDT。

SWDT是16位递减计数器,
计数值只能选择:256、4096、16384、65536这几种,不能任意设置。
时钟分频可选 :1、16、32、64、128、256、4096。
看门狗复位时间(秒)=分频 * 计数值 / 10K

下面就是HC32460的特别之处了:
SWDT的初始化和启动是完全由硬件完成的。
参数配置是由一个叫ICG的特殊FLASH区域来完成。
ICG地址0x00000400 - 0x0000041F,可以看作是8个32位的只读寄存器,其中只有前2个有作用。



使用特权

评论回复
沙发
nawu|  楼主 | 2021-7-6 16:36 | 只看该作者

要启动SWDT看门狗,就要配置ICG0寄存器,ICG0的BIT[12:0]如图所示:


使用特权

评论回复
板凳
nawu|  楼主 | 2021-7-6 16:37 | 只看该作者

只要把ICG0的最低位由1改为0,SWDT就会自动启动。
关于ICG寄存器的配置方法,官方SDK已经提供了一个文件:hc32f460_icg.c和hc32f460_icg.h
修改hc32f460_icg.h的如下内容:


使用特权

评论回复
地板
nawu|  楼主 | 2021-7-6 16:42 | 只看该作者
最后,还要记得修改ddl_config.h,打开配置开关。

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

至此,SWDT看门狗就会自动自动启动了,程序要运行的时候,需要定时刷新看门狗计数值,
刷新计数值使用以下函数就可以了:

SWDT_RefreshCounter();


使用特权

评论回复
5
match007| | 2021-7-8 16:15 | 只看该作者
学习了,大佬辛苦

使用特权

评论回复
6
刘永生| | 2021-8-19 10:11 | 只看该作者
请问 修改 ICG0_SWDT_PERI 和 ICG0_SWDT_CKS 值后,为什么 复位时间不可调?
始终在 1.5s 左右 复位.

使用特权

评论回复
评论
martinhu 2021-8-23 08:58 回复TA
@刘永生 :你是不是喂错狗了,SWDT和WDT是两个模块,喂狗的寄存器也不一样。 
刘永生 2021-8-20 10:22 回复TA
@martinhu :一致反复重启; 自动复位. 
martinhu 2021-8-19 15:21 回复TA
重新上电试试 
7
tayouxunmeng| | 2021-8-19 12:12 | 只看该作者
学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

3307

帖子

3

粉丝