银杏科技有限公司旗下技术文档发布平台 |
技术支持电话 | 0379-69926675-801 |
技术支持邮件 | Gingko@vip.163.com |
版本 | 日期 | 作者 | 修改内容 |
V1.0 | 2020-07-04 | gingko | 初次建立 |
实验七:WWDG看门狗实验——复位ARM
一、 实验目的与意义
了解STM32 WWDG结构。
了解STM32 WWDG特征。
掌握WWDG的使用方法。
掌握STM32 HAL库中WWDG属性的配置方法。
掌握KEIL MDK 集成开发环境使用方法。
二、 实验设备及平台
-
-
Micro USB线缆。
Keil MDK 开发平台。
STM32CubeMX开发平台。
装有WIN XP(及更高版本)系统的计算机。
三、 实验原理
1、WWDG看门狗简介
2、WWDG主要特性
3、WWDG功能说明
4、WWDG寄存器
该寄存器用来记录当前是否有提前唤醒的标志。该寄存器仅有位0有效,其他都是保留位。当计数器值达到40h时,此位由硬件置1。它必须通过软件写0来清除。对此位写1无效。即使中断未被使能,在计数器的值达到0X40的时候,此位也会被置1。
本次实验使用的是常开带复位按键,当按键没有按下时,ARM芯片的ARM_KEY引脚读取到的值是高电平,按键按下后读取到的值为低电平,按键没有按下是正常喂狗,当按键按下后停止喂狗,从而产生复位。
四、 实验程序
1、主函数
int main(void)
{
/* MCU 配置*/
/* 重置所有外围设备,初始化Flash接口和Systick */
HAL_Init();
/* 配置系统时钟 */
SystemClock_Config();
HAL_Delay(300);
/* 初始化所有已配置的外围设备 */
MX_GPIO_Init();
MX_WWDG_Init();
LED_RED_ON; //初始化LED状态,红灯亮
/* 无限循环 */
while (1)
{
while(ARM_KEY_STATE == KEY_DOWN);
HAL_Delay(30); //30ms喂狗一次
HAL_WWDG_Refresh(&hwwdg); //喂狗
}
}
2、WWDG初始化配置函数
/* WWDG初始化函数 */
void MX_WWDG_Init(void)
{
hwwdg.Instance = WWDG;
hwwdg.Init.Prescaler = WWDG_PRESCALER_8; //选择WWDG的预分频系数。
hwwdg.Init.Window = 100; //窗口值
hwwdg.Init.Counter = 127; //计数器值
hwwdg.Init.EWIMode = WWDG_EWI_DISABLE;//禁用提前唤醒中断
if (HAL_WWDG_Init(&hwwdg) != HAL_OK)//初始化WWDG
{
_Error_Handler(__FILE__, __LINE__);
}
}
#define __HAL_WWDG_ENABLE(__HANDLE__)
SET_BIT((__HANDLE__)->Instance->CR, WWDG_CR_WDGA)
3、喂狗函数
HAL_StatusTypeDef HAL_WWDG_Refresh(WWDG_HandleTypeDef *hwwdg)
{
/* 将WWDG计数器值写入WWDG CR以刷新 */
WRITE_REG(hwwdg->Instance->CR, (hwwdg->Init.Counter));
/* 返回函数状态 */
return HAL_OK;
}
4、WWDG中断服务函数
void HAL_WWDG_IRQHandler(WWDG_HandleTypeDef *hwwdg)
{
/* 检查是否启用了提前唤醒中断*/
if(__HAL_WWDG_GET_IT_SOURCE(hwwdg, WWDG_IT_EWI) != RESET)
{
/* 检查是否发生了WWDG提前唤醒中断 */
if(__HAL_WWDG_GET_FLAG(hwwdg, WWDG_FLAG_EWIF) != RESET)
{
/* 清除WWDG提前唤醒标志 */
__HAL_WWDG_CLEAR_FLAG(hwwdg, WWDG_FLAG_EWIF);
/* 提前唤醒回调 */
HAL_WWDG_EarlyWakeupCallback(hwwdg);
}
}
}
五、 实验步骤
把仿真器与iCore4的SWD调试口相连(直接相连或者通过转接器相连);
把iCore4通过Micro USB线与计算机相连,为iCore4供电;
打开Keil MDK 开发环境,并打开本实验工程;
烧写程序到iCore4上;
也可以进入Debug 模式,单步运行或设置断点验证程序逻辑。
六、 实验现象