STM32固件库例程解析

说明

  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计算结果和以下配置参数计算出的结果一致:
在这里插入图片描述

FLASH

参考:Flash Programming manual

  1. Flash不需要在CubeMx中配置,直接在代码中解锁使用就可以;
  2. 每个MCUFlash大小和页大小不一样,查看相应MCUReference manual获取详细信息;
  3. Flash操作出错时,可以通过HAL_FLASH_GetError()函数查看具体出错原因;
  4. 注意擦除Flash时不用擦除了已经烧录了代码的区域,否则会导致程序不能运行或出现莫名问题;
  5. Flash擦除时,可以按Page擦除,也可按Bank擦除;
  6. Flash写时,可以按Half-Word(16bit), Word(32bit), Double-Word(64bit)写;
    在这里插入图片描述
    参考Flash WRP相关代码
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值