完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
第一部分 基础理论
1. WWDG 简介 (1)WWDG 窗口看门狗,所谓的 “Window 窗口”表示看门狗递减计数器只能在一个窗口时间内完成刷新,否则MCU将复位 (2)窗口看门狗一般用来监测由外部干扰或不可预见的逻辑条件造成的应用背离正常运行序列而产生的软件故障 (3)要求看门狗的递减计数器需要在一个有限的时间窗口被刷新 看门狗产生MCU复位的两种情况 (1)除非递减计数器的值在 T6位(WWDG_CR 寄存器第六位)变成0前刷新,看门狗到达预置的时间周期时,将会产生MCU复位 (2)在递减计数器到达窗口寄存器数值之前,如果7位的递减计数器数值(在WWDG_CR中)被刷新,那么也将产生MXU复位 2. WWDG 主要特性 (1)可编程的自由运行递减计数器 (2)条件复位 —— 当递减计数器的值小于0x40,将产生复位(若看门狗被启动) —— 当递减计数器在窗口外被重新装载,将产生复位(若看么狗被启动) (3)如果启动看门狗并且允许中断,当递减计数器等于0x40时产生 EWI (Early Wakeup Interrrupt),通过该中断可重新装载递减计数器以避免WWDG复位 3. WWDG 功能描述 (1)如果看门狗启动,即 WWDG_CR寄存器中 WDGA位置1,并且7位(位于WWDG_CR寄存器的0-6位)递减计数器从 0x40 转为 0x3F,即WWDG_CR 的 T6位置0,此时将产生复位。过程如下图蓝线所示。 (2)如果软件在递减计数器的值大于窗口寄存器的数值时,重新装载递减计数器,将产生一个复位。过程如下图红线所示。 应用程序在正常运行过程中必须定期写入 WWDG_CR 寄存器(即递减计数器的数值)以防止其变为 0x3F,产生MCU复位。且递减计数器只用当其值小于窗口寄存器(即WWDG_CFR)的值时,才能进行写操作。存储器在WWDG_CR寄存器中的数值必须在0xFF和0xC0之间(即可允许递减计数器刷新的时间窗口)。 —— 启动看门狗 在系统复位后,看门狗总是处于关闭状态,设置 WWDG_CR 寄存器的 WDGA 位能够开启看门狗,随后看门狗不再被关闭(即一直处于监测MCU的状态),除非发生复位(MCU 此时发生了故障)。 —— 控制递减计数器 递减计数器处于自由运行状态,即使看门狗被禁止,递减计数器仍然继续递减计数。当看门狗启用时,T6 位必须被设置,以防止立即产生一个复位。 T[5:0]位包含了看门狗产生复位之前的计时数目。由于写入 WWDG_CR 寄存器时,预分频的值是未知的,所以复位前的延时时间在一个最小值(00 0000)和一个最大值(11 1111)之间变化。 配置寄存器(WWDG_CFR)中包含了窗口的上线值,为了避免产生复位,递减计数器必须在其值小于窗口寄存器的数值并且大于0x3F时被重新加载。 —— 高级看门狗中断特性 另一个从装载递减计数器的方法是利用早期唤醒中断(EWI)。在WWDG_CFR寄存器中设置WEI位开启该中断。当递减计数器到达0x40时,则产生此中断,相应的中断服务程序(ISR)可以用来加载计数器以防止WWDG复位。在WWDG_SR寄存器中写“0”可以清除该中断。 Note:有时 EWI 不会产生,例如系统时钟正处于优先级更高的任务时,中断不会产生,此时 WWDG 将产生复位。这是因为 WWDG 的时钟 4. WWDG 超时计算 5. 寄存器描述 5.1 控制寄存器(WWDG_CR) 5.2 配置寄存器(WWDG_CFG) 5.3 状态寄存器(WWDG_SR) 5.4 WWDG 寄存器映像 第二部分 基础实验 本实验基于STM32CubeMX实现对STM32开发板的配置,通过 EWI 实现 LED闪烁。在 EWI中置标志位,在主函数中判断标志位,使得 LED状态反转。 1. 软件与硬件 1.1 硬件要求 (1)ALIENTEK ELITE STM32F103 开发板 (STM32F103ZET6 芯片) 1.2 软件要求 (1)Java Runtime Environment (JRE) 1.8.0 版本 (2)STM32CubeMX 5.6.1 版本 (3)IAR Embedded Workbench 8.0 2. STM32CubeMX配置开发板 2.1 Pinout & Configuration (1)GPIO 配置 (2)RCC 配置 (3)SYS 配置 (4)WWDG 2.2 Clock Configuration 2.3 Project Manage Code Generator 配置 3. 程序代码 main.c (1)宏定义 /* Private define ------------------------------------------------------------*//* USER CODE BEGIN PD */#define FeedDog 1#define NoFeedDog 0/* USER CODE END PD */ (2)定义变量 /* USER CODE BEGIN PV */uint8_t FeedDog_Flag = 0;/* USER CODE END PV */ (3)函数主体 /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { if (FeedDog_Flag == FeedDog) { FeedDog_Flag = NoFeedDog; HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_5); } /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } (4)EWI 回调函数 /* USER CODE BEGIN 4 */void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg){ UNUSED(hwwdg); FeedDog_Flag = FeedDog; HAL_WWDG_Refresh(hwwdg); /* Refresh the downcounter */}/* USER CODE END 4 */ 4. 程序分析 4.1 主要功能 通过 EWI 的回调函数实现递减计数器的刷新(喂狗),防止MCU产生复位,并且在其置标志位,主函数中判断标志位,实现 LED 状态反转。 4.2 主要函数 (1)HAL_WWDG_EarlyWakeCallback (2)HAL_WWDG_Refresh |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1800 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1629 浏览 1 评论
1096 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
735 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1684 浏览 2 评论
1944浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
744浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
578浏览 3评论
601浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
564浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 01:52 , Processed in 0.771767 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号