STM32固件库例程解析

发布时间:2023年12月21日

说明

  1. 安装HAL固件库后,本地例程的路径为C:\Users\userName\STM32Cube\Repository\STM32Cube_FW_Fx_Vx.x.x\Projects\boardName\Examples;
  2. 也可以在github在线查看:STM32CubeF1例程

RTC

WatchDog

看门狗其实就是一个定时器,从功能上说它可以让微控制器在程序发生意外(程序进入死循环或跑飞)的时候,能重新回复到系统刚上电状态,以保障系统出问题的时候可以重启一次。说的复杂一点,看门狗就是能让程序出问题是能重新启动系统。

STM32F103 有两个看门狗,一个是独立看门狗,一个是窗口看门狗。我们知道独立看门狗的工作原理就是一个递减计数器不断的往下递减计数,当减到 0 之前如果没有喂狗的话,产生复位。窗口看门狗跟独立看门狗一样,也是一个递减计数器不断的往下递减计数,当减到一个固定值 0X40 时还不喂狗的话,产生复位,这个值叫窗口的下限,是固定的值,不能改变。这个是跟独立看门狗类似的地方,不同的地方是窗口看门狗的计数器的值在减到某一个数之前喂狗的话也会产生复位,这个值叫窗口的上限,上限值由用户独立设置。窗口看门狗计数器的值必须在上窗口和下窗口之间才可以喂狗,这就是窗口看门狗中窗口两个字的含义.

STM32F103系列MCU中,独立看门狗IWDG的时钟由LSI提供,而且不能产生中断;而窗口看门狗WWDG的时钟由PCLK1提供,且在发送复位前能产生一个中断,用于执行用户代码。(其他系列MCU(比如STM32H743)的IWDG可能也有简单的窗口功能。)

WWDG

在这里插入图片描述
喂狗通过HAL_WWDG_Refresh()函数实现。
还可以通过以下代码排队复位是否有没有及时喂狗引起的:

if(__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST) != RESET) {
	LOG_DBG("reset by window watchdog\n");
    __HAL_RCC_CLEAR_RESET_FLAGS();
}

IWDG

在这里插入图片描述
喂狗通过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

在线计算CRC
STM32F103CRC模块不能自定义参数,而且只能计算32位的CRC.

uint32_t dat = 0x00001021;
uwCRCValue = HAL_CRC_Accumulate(&hcrc, dat, 1);		// 0x4BB7ED3F

以上代码输出的CRC计算结果和以下配置参数计算出的结果一致:
在这里插入图片描述

文章来源:https://blog.csdn.net/qq_29506411/article/details/135129402
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。