目录

银杏科技有限公司旗下技术文档发布平台
技术支持电话0379-69926675-801
技术支持邮件Gingko@vip.163.com
版本 日期 作者 修改内容
V1.0 2020-11-06 gingko 初次建立

STM32CubeMX教程九——WWDG看门狗实验

1.在主界面选择File–>New Project或者直接点击ACCEE TO MCU SELECTOR 2.出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置 在搜索栏的下面,提供的各 种查找方式,可以选择芯片内核,型号等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32F429IGHx。 3.配置RCC,使用外部时钟源 4. 调试选择Serial Wire,时基源选择SysTick 5.将PI3,PI4,PH14设置为GPIO_Output,PG9设置为GPIO_Input 6.引脚模式配置 7.配置WWDG 8.开启中断 9.时钟源设置,选择外部高速时钟源,配置为最大主频 10.工程文件的设置, 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可,IDE我们使用的是 MDK V5.27 11.点击Code Generator,进行进一步配置

12.然后点击GENERATE CODE创建工程 创建成功,打开工程。



实验九:WWDG看门狗实验——复位ARM

一、实验目的与意义

  1. 了解STM32 WWDG结构
  2. 了解STM32 WWDG特征
  3. 掌握WWDG的使用方法
  4. 掌握STM32 HAL库中WWDG属性的配置方法
  5. 掌握KEIL MDK 集成开发环境使用方法

二、实验设备及平台

三、实验原理

1.窗口看门狗WWDG简介

窗口看门狗的超时公式如下: 其中:

2.WWDG框图

3.WWDG寄存器

控制寄存器( WWDG_CR) 位 31:8 保留,必须保持复位值。 位 7 WDGA:激活位 (Activation bit)

位 6:0 T[6:0]: 7 位计数器 (7-bit counter)( MSB 到 LSB)

配置寄存器 (WWDG_CFR) 位 31:13 保留,必须保持复位值。 位 12:11 WDGTB[1:0]: 定时器时基 (Timer base) 可按如下方式修改预分频器的时基:

位 10 保留,必须保持复位值。 位 9 EWI: 提前唤醒中断 (Early wakeup interrupt)

位 8:7 保留,必须保持复位值。 位 6:0 W[6:0]: 7 位窗口值 (7-bit window value)

状态寄存器 (WWDG_SR) 位 31:1 保留,必须保持复位值。 位 0 EWIF: 提前唤醒中断标志 (Early wakeup interrupt flag)

当计数器值达到 0x40 时此位由硬件置 1。它必须由软件通过写入 0 来清零。写入 1 不起作用。如果不使能中断,此位也会被置 1。

本实验中iCore3L使用的是常开带复位按键,当按键没有按下时,ARM芯片的ARM_KEY引脚读取到的值是高电平,按键按下后读取到的值为低电平,按键没有按下时正常喂狗,当按键按下后停止喂狗。

四、实验程序

1.主函数

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  HAL_Delay(300);
  MX_GPIO_Init();
  MX_WWDG_Init();
  LED_RED_ON;     //初始化LED状态,红灯亮
  while (1)
  {
    while(ARM_KEY_VALUE == KEY_DOWN){ //按键没按下则正常喂狗
    }
    HAL_Delay(30);                  //30ms喂一次狗,19.6ms<喂狗时间<46.5ms
    HAL_WWDG_Refresh(&hwwdg);	   //喂狗
  }
}

2.窗口看门狗初始化函数:

void MX_WWDG1_Init(void)
{
  hwwdg1.Instance = WWDG;
  hwwdg1.Init.Prescaler = WWDG_PRESCALER_8;//窗口看门狗预分频系数为8
  hwwdg1.Init.Window = 100;//上限窗口值为100
  hwwdg1.Init.Counter = 127;//计数器的值为127
  hwwdg1.Init.EWIMode = WWDG_EWI_ENABLE;//打开提前唤醒
  if (HAL_WWDG_Init(&hwwdg) != HAL_OK)
  {
    Error_Handler();
  }
}

WWDG配置:

喂狗函数:

HAL_WWDG_Refresh(WWDG_HandleTypeDef *hwwdg)

3.看门狗中断处理函数:

HAL_WWDG_IRQHandler(WWDG_HandleTypeDef *hwwdg)

4.提前唤醒中断服务函数:

HAL_WWDG_IRQHandler(WWDG_HandleTypeDef *hwwdg)

用户可写入代码,在MCU死前,执行重要操作

五、实验步骤

  1. 把仿真器与iCore3L的SWD调试口相连(直接相连或者通过转接器相连);
  2. 把iCore3L通过Micro USB线与计算机相连,为iCore3L供电;
  3. 打开Keil MDK 开发环境,并打开本实验工程;
  4. 烧写程序到iCore3L上;
  5. 也可以进入Debug 模式,单步运行或设置断点验证程序逻辑。

六、实验现象

在没有按下ARM_KEY按键时,红灯点亮,当一直按下ARM_KEY按键,ARM不断复位,红灯闪烁。