前言
本文记录了我学习STM32CubeMX的过程,方便以后回忆。我们使用的开发板是基于STM32F103C6T6的。本章记录了窗口看门狗的使用配置。要学习的话,注意流程一说,省略的内容。
基础
- 窗口看门狗(WWDG)属于APB1上外设。
- 窗口看门狗(WWDG)的时钟源为PCLK1在经过窗口看门狗的分频器。
流程
窗口看门狗 实验目的:检测窗口看门狗超时后,复位有没有被触发。
-
以下省略LED引脚(PC13)的配置。工程文件输出keil工程配置省略。在引脚界面先开启外部高速时钟,在这里才能SYSCLK才能调到72MHz,这个就不讲了,其它文章讲过了。如图注意标志的地方。
窗口看门狗(WWDG)的时钟源为PCLK1,后面计算看门狗超时时间用到。
-
窗口看门狗的配置
- 分频器的作用,对时钟源为PCLK1进行分频给窗口看门狗的计数值自减提供周期。
- 窗口值的作用,窗口看门狗的喂狗时间只能是,窗口值>喂狗时间>0x3F,因为到达0x3F就复位重启了。超前喂狗可能会造成复位。
- 计数值的作用,因为是七位计数器,所以说计数值最大为128-1。
- 运作,计数值在窗口看门狗时钟下自减,达到0x3F就复位重启。
以下为官方手册的介绍:
超时公式在里面都有了。虽然我暂时也没想明白除4096是为啥,但是除就完了。
根据上述配置,超时时间为58.25ms。配置完成后,直接生成Keil工程文件。
-
keil中打开,生成的工程。
喂狗超时时间为58.25ms,两个测试:
测试1:不加喂狗程序。主程序,延时30ms后点灯,58.25ms后被复位。现象,小灯不断闪烁。
测试2:加喂狗程序。主程序,延时30ms后点灯,并加喂狗程序。现象,小灯一直亮。
上述两个测试我都以实验过,代码和现象是对的,下述是介绍代码。
-
测试1:
//关键代码,主函数中加上 //现象,小灯不断闪烁。 HAL_Delay(30); //延时30ms HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); //点灯
-
测试2:
//关键代码,主函数中加上 //现象,小灯一直亮 //窗口看门狗的数据结构,在窗口看门狗初始化中复制过来也行 WWDG_HandleTypeDef hwwdg; hwwdg.Instance = WWDG; hwwdg.Init.Prescaler = WWDG_PRESCALER_8; hwwdg.Init.Window = 100; hwwdg.Init.Counter = 128-1; hwwdg.Init.EWIMode = WWDG_EWI_DISABLE; //主函数循环中加上 HAL_Delay(30); //延时30ms HAL_WWDG_Refresh(&hwwdg); //喂狗 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); //点灯
-