|**银杏科技有限公司旗下技术文档发布平台** |||| |技术支持电话|**0379-69926675-801** ||| |技术支持邮件|Gingko@vip.163.com ||| ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | V1.0 | 2020-11-14 | gingko | 初次建立 | \\ \\ ===== 实验九:WWDG看门狗实验——复位ARM ===== ==== 一、实验目的与意义 ==== - 了解GD32 WWDG结构 - 了解GD32 WWDG特征 - 掌握WWDG的使用方法 - 掌握GD32固件库中WWDG属性的配置方法 - 掌握KEIL MDK集成开发环境使用方法 ==== 二、实验设备及平台 ==== - iCore3L双核心板 - JLINK(或相同功能)仿真器 - Micro USB线缆 - Keil MDK开发平台 - 装有WIN XP(及更高版本)系统的计算机 ==== 三、实验原理 ==== **窗口看门狗 WWDG 简介** * IWDG 看门狗存在这样一个问题,如果在喂狗的间隔期间,程序跑飞后又正确归位,独立看门狗无法发现这样的错误,程序将存在很大的危险。与 IWDG 看门狗不同,WWDG 看门狗需要在一个规定的时间范围内喂狗才有效,这样可以较为有效的解决IWDG 看门狗存在的问题。可以根据 WWDG 看门狗通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。 * WWDG 通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在 T6 位(WWDG->CR 的第六位)变成 0 前被刷新,看门狗电路在达到预置的时间周期时,会产生一个 MCU 复位。在递减计数器达到窗口配置寄存器(WWDG->CFR)数值之前,如果 7 位的递减计数器数值(在控制寄存器中)被刷新,那么也将产生一个 MCU 复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。他们的关系可以用下图说明 {{ :icore3l:icore3l_arm_hal_9_1.png?400 |}} * 图中,T[6:0]就是 WWDG_CR的低七位, W[6:0]即是 WWDG->CFR的低七位。 T[6:0]就是窗口看门狗的计数器,而 W[6:0]则是窗口看门狗的上窗口,下窗口值是固定的( 0X40)。当窗口看门狗的计数器在 上窗口值之外被刷新,或者低于下窗口值都会产生复位。上窗口值(W[6:0])是由用户自己设定的,根据实际要求来设计窗口值,但是一定要确保窗口值大于 0X40,否则窗口就不存在了。 * 窗口看门狗的超时公式如下 : * 𝑇𝑊𝑊𝐷𝐺=𝑇𝑃𝐶𝐿𝐾1×4096×2𝑊𝐷𝐺𝑇𝐵×(𝑇[5:0]+1)𝑚𝑠 * 其中: * 𝑇𝑊𝑊𝐷𝐺:WWDG 超时时间 * PCLK1:PCLK1 的时钟频 * WDGTB:WWDG 的预分频系数 * T[5:0]:窗口看门狗的计数器低 6 位 **WWDG框图** {{ :icore3l:icore3l_arm_hal_9_2.png?400 |}} **WWDG寄存器** * 控制寄存器(WWDG_CR) {{ :icore3l:icore3l_arm_hal_9_3.png?400 |}} * 位31:8 保留,必须保持复位值。 * 位7 WDGA:激活位 (Activation bit) * 此位由软件置1,只有复位后才由硬件清零。当 WDGA = 1 时,看门狗可产生复位。 * 0:禁止看门狗 * 1:使能看门狗 * 位6:0 T[6: 7 位计数器 (7-bit MSB 到 LSB * 这些位用来存储看门狗计数器的值,每隔(4096 x 2WDGTG[1:0]) PCLK 个周期递减一次。当它从 0x40 递减到 0x3F T6 清零)时会产生复位。 配置寄存器 {{ :icore3l:icore3l_arm_hal_9_4.png?400 |}} * 位31:13 保留,必须保持复位值。 * 位12:11 WDGTB[1: 定时器时基 (Timer base) * 可按如下方式修改预分频器的时基: * 000 CK 计数器时钟 (PCLK div 4096) 分频器 1 * 001 CK 计数器时钟 (PCLK div 4096) 分频器 2 * 010 CK 计数器时钟 (PCLK div 4096) 分频器 4 * 011 CK 计数器时钟 (PCLK div 4096) 分频器 8 * 位10 保留,必须保持 复位值。 * 位9 EWI 提前唤醒中断 (Early wakeup interrupt) * 置1 后,只要计数器值达到 0x40 就会产生中断。此中断只有在复位后才由硬件清零。 * 位8:7 保留,必须保持复位值。 * 位6:0 W[6: 7 位窗口值 (7-bit window value) * 这些位包含用于与递减计数器进行比较的窗口值。 * 状态寄存器(WWDG_SR) {{ :icore3l:icore3l_arm_hal_9_5.png?400 |}} * 位31:1 保留,必须保持复位值。 * 位0 EWIF 提前唤醒中断标志 (Early wakeup interrupt flag) * 当计数器值达到0x40 时此位由硬件置 1。它必须由软件通过写入 0 来清零。写入 1 不起作用。如果不使能中断,此位也会被置 1。 * 本实验中iCore3L使用的是常开带复位按键,当按键没有按下时, ARM芯片的ARM_KEY引脚读取到的值是高电平,按键按下后读取到的值为低电平,按键没有按下时正常喂狗,当按键按下后停止喂狗。 ====四、实验步骤==== - 把仿真器与iCore3L的SWD调试口相连(直接相连或者通过转接器相连); - 把iCore3L通过Micro USB线与计算机相连,为iCore3L供电; - 打开Keil MDK 开发环境,并打开本实验工程; - 烧写程序到iCore3L上; - 也可以进入Debug 模式,单步运行或设置断点验证程序逻辑。 ====五、实验现象==== 在没有按下ARM_KEY按键时,绿灯点亮,当一直按下ARM_KEY按键,ARM不断复位,绿灯闪烁。