C:\Users\userName\STM32Cube\Repository\STM32Cube_FW_Fx_Vx.x.x\Projects\boardName\Examples
;github
在线查看:STM32CubeF1例程看门狗其实就是一个定时器,从功能上说它可以让微控制器在程序发生意外(程序进入死循环或跑飞)的时候,能重新回复到系统刚上电状态,以保障系统出问题的时候可以重启一次。说的复杂一点,看门狗就是能让程序出问题是能重新启动系统。
STM32F103 有两个看门狗,一个是独立看门狗,一个是窗口看门狗。我们知道独立看门狗的工作原理就是一个递减计数器不断的往下递减计数,当减到 0 之前如果没有喂狗的话,产生复位。窗口看门狗跟独立看门狗一样,也是一个递减计数器不断的往下递减计数,当减到一个固定值 0X40 时还不喂狗的话,产生复位,这个值叫窗口的下限,是固定的值,不能改变。这个是跟独立看门狗类似的地方,不同的地方是窗口看门狗的计数器的值在减到某一个数之前喂狗的话也会产生复位,这个值叫窗口的上限,上限值由用户独立设置。窗口看门狗计数器的值必须在上窗口和下窗口之间才可以喂狗,这就是窗口看门狗中窗口两个字的含义.
STM32F103
系列MCU
中,独立看门狗IWDG
的时钟由LSI
提供,而且不能产生中断;而窗口看门狗WWDG
的时钟由PCLK1
提供,且在发送复位前能产生一个中断,用于执行用户代码。(其他系列MCU
(比如STM32H743
)的IWDG
可能也有简单的窗口功能。)
喂狗通过HAL_WWDG_Refresh()
函数实现。
还可以通过以下代码排队复位是否有没有及时喂狗引起的:
if(__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST) != RESET) {
LOG_DBG("reset by window watchdog\n");
__HAL_RCC_CLEAR_RESET_FLAGS();
}
喂狗通过HAL_IWDG_Refresh(&hiwdg);
实现;
还可以通过以下代码排队复位是否有没有及时喂狗引起的:
if(__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) != RESET) {
LOG_DBG("Independent WatchDog reset\n");
__HAL_RCC_CLEAR_RESET_FLAGS();
}
在线计算CRC
STM32F103
的CRC
模块不能自定义参数,而且只能计算32
位的CRC
.
uint32_t dat = 0x00001021;
uwCRCValue = HAL_CRC_Accumulate(&hcrc, dat, 1); // 0x4BB7ED3F
以上代码输出的CRC
计算结果和以下配置参数计算出的结果一致: