当前位置:   article > 正文

stm32f103c8t6外设——WWDG窗口看门狗_stm32f103c8t6看门狗

stm32f103c8t6看门狗

一、WWDG特性

  1. 递减的计数器。
  2. 复位条件(满足任一条件即复位):(1)计数器减至0x3F即产生复位;(2)大于W值(用户自行设定,必须大于0x3F,否则无窗口期)喂狗可复位。
  3. 提前唤醒中断(需要使能):减至0x40产生中断。

注意:需要在窗口期内进行“喂狗”操作,才不会复位。W[6:0]≥窗口期>0x3F

二、WWDG配置步骤及相关代码

1、wdg.c

  1. #include "./BSP/WDG/wdg.h"
  2. #include "./BSP/LED/led.h"
  3. #include "./SYSTEM/delay/delay.h"
  4. WWDG_HandleTypeDef g_wwdg_handle;
  5. /* 窗口看门狗初始化函数 */
  6. void wwdg_init(uint8_t tr, uint8_t wr, uint32_t fprer)
  7. {
  8. g_wwdg_handle.Instance = WWDG;
  9. g_wwdg_handle.Init.Counter = tr;
  10. g_wwdg_handle.Init.Window = wr;
  11. g_wwdg_handle.Init.Prescaler = fprer;
  12. g_wwdg_handle.Init.EWIMode = WWDG_EWI_ENABLE; /* 计数器达到0x40即产生中断 */
  13. HAL_WWDG_Init(&g_wwdg_handle);
  14. }
  15. /* WWDG MSP回调函数 */
  16. void HAL_WWDG_MspInit(WWDG_HandleTypeDef *hwwdg)
  17. {
  18. __HAL_RCC_WWDG_CLK_ENABLE();
  19. HAL_NVIC_SetPriority(WWDG_IRQn, 2, 3);
  20. HAL_NVIC_EnableIRQ(WWDG_IRQn);
  21. }
  22. /* WWDG中断服务函数 */
  23. void WWDG_IRQHandler(void)
  24. {
  25. HAL_WWDG_IRQHandler(&g_wwdg_handle); /* 调用回调函数 */
  26. }
  27. /* WWDG提前唤醒回调函数 */
  28. void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
  29. {
  30. //delay_ms(1);
  31. HAL_WWDG_Refresh(&g_wwdg_handle); /* 喂狗 */
  32. LED1_TOGGLE();
  33. }

2、main.c

  1. #include "./SYSTEM/sys/sys.h"
  2. #include "./SYSTEM/usart/usart.h"
  3. #include "./SYSTEM/delay/delay.h"
  4. #include "./BSP/LED/led.h"
  5. #include "./BSP/WDG/wdg.h"
  6. int main(void)
  7. {
  8. HAL_Init(); /* 初始化HAL库 */
  9. sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
  10. delay_init(72); /* 延时初始化 */
  11. usart_init(115200); /* 初始化串口 */
  12. led_init();
  13. if(__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST) != RESET) /* RCC_FLAG_WWDGRST=1时,表明窗口看门狗复位 */
  14. {
  15. printf("窗口看门狗复位!\r\n");
  16. __HAL_RCC_CLEAR_RESET_FLAGS(); /* 清零标志位 */
  17. }
  18. else
  19. {
  20. printf("外部复位!\r\n");
  21. }
  22. delay_ms(500);
  23. printf("请在窗口期内喂狗!\r\n");
  24. wwdg_init(0x7f, 0x5f, WWDG_PRESCALER_8); /* WWDG初始化,超时时间约等于29ms */
  25. while(1)
  26. {
  27. delay_ms(85); /* 在非窗口期内喂狗才会复位 */
  28. HAL_WWDG_Refresh(&g_wwdg_handle); /* 喂狗 */
  29. LED0_TOGGLE();
  30. }
  31. }

 if判断APB1 外设复位寄存器 (RCC_APB1RSTR)中的WWDGRST位来判断是否为窗口看门狗复位。

三、WWDG超时时间计算

 四、WWDG与IWDG的对比

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/437507
推荐阅读
相关标签
  

闽ICP备14008679号