当前位置: 首页 > news >正文

STM32F1 HAL库笔记2_HAL 系统驱动程序

1、HAL 固件驱动程序 API 

1.1、如何使用此驱动程序

        通用 HAL 驱动程序包含一组通用的 API,PPP 外设驱动程序可以使用这些 API 来开始使用 HAL。HAL 包含两个 API 类别: • 常见的 HAL API • 服务 HAL API

 1.2、初始化和去初始化函数

        本节提供的功能:

        • 初始化闪存接口、NVIC 分配和初始时钟配置。它还会在需要超时时初始化 systick,并在启用时初始化备份域。

        • 去初始化 HAL 的公共部分。

        • 将时基源配置为具有 1ms 时基和专用的 Tick 中断优先级。

        – 默认情况下,SysTick 计时器用作时基源,但用户最终可以实现他正确的时基源(例如通用计时器或其他时间源),请记住,时基持续时间应保持 1 毫秒,因为PPP_TIMEOUT_VALUEs是以毫秒为基础定义和处理的。

        – 时基配置函数 HAL_InitTick()在程序开始时由 HAL_Init()自动调用,或在 clock 配置的任何时间由 HAL_RCC_ClockConfig()自动调用。

        – 时基源配置为以固定的时间间隔生成中断。如果从外设 ISR 进程调用 HAL_Delay() ,则必须小心,Tick 中断行必须具有比外设中断更高的优先级(数值较低)。否则,调用方 ISR 进程将被阻止。

        ― 影响时基配置的函数被声明为 __weak 以便在用户文件中有其他实现的情况下进行覆盖。        

        本节包含以下 API:

HAL_Init()
HAL_DeInit()
HAL_MspInit()
HAL_MspDeInit()
HAL_InitTick()

1.3、HAL 控制功能

        本节提供的功能:

        • 提供以毫秒为单位的时钟周期值

        • 提供以毫秒为单位的阻塞延迟

        • 暂停时基源中断

        • 恢复时基源中断

        • 获取 HAL API 驱动程序版本

        • 获取设备标识符

        • 获取设备修订标识符

        • 在睡眠模式下启用/禁用调试模块

        • 在停止模式下启用/禁用调试模块

        • 在待机模式下启用/禁用调试模块

        本节包含以下 API:

HAL_IncTick()
HAL_GetTick()
HAL_GetTickPrio()
HAL_SetTickFreq()
HAL_GetTickFreq()
HAL_Delay()
HAL_SuspendTick()
HAL_ResumeTick()
HAL_GetHalVersion()
HAL_GetREVID()
HAL_GetDEVID()
HAL_GetUIDw0()
HAL_GetUIDw1()
HAL_GetUIDw2()
HAL_DBGMCU_EnableDBGSleepMode()
HAL_DBGMCU_DisableDBGSleepMode()
HAL_DBGMCU_EnableDBGStopMode()
HAL_DBGMCU_DisableDBGStopMode()
HAL_DBGMCU_EnableDBGStandbyMode()
HAL_DBGMCU_DisableDBGStandbyMode()

1.4、功能详细说明

HAL_Init

函数名称: HAL_StatusTypeDef HAL_Init(void) 
函数说明: 该函数用于初始化HAL Library;它必须是要在主程序中执行的第一条指令(在调用任何其他 HAL 函数之前),它会执行以下操作:配置 Flash 预取。
返回值:   HAL:状态
说明:     SysTick 用作 HAL_Delay()函数的时基,应用程序需要确保 SysTick 时基始终设置为 1 毫秒才能进行正确的 HAL 操作。

HAL_DeInit

函数名称: HAL_StatusTypeDef HAL_DeInit(void) 
函数描述: 此函数取消初始化 HAL 的公共部分并停止 systick。
返回值:   HAL:状态 
备注:     此函数是可选的

HAL_MspInit

函数名称: void HAL_MspInit(void)
函数说明: 初始化 MSP
返回值:   无

HAL_MspDeInit

函数名称: void HAL_MspDeInit(void) 
函数描述: 去初始化MSP
返回值:   无

HAL_InitTick

函数名称: HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
函数说明: 该函数用于配置时基的来源。
参数:	  TickPriority:时钟周期中断优先级。
返回值:   HAL: 状态 
备注: • 此函数在 HAL_Init()复位后在程序开始时自动调用,或在 HAL_RCC_ClockConfig()重新配置时钟时随时自动调用。• 在默认实现中,SysTick 计时器是时基的来源。它用于以固定的时间间隔生成中断。如果从外设 ISR 进程调用 HAL_Delay(),则必须小心,SysTick 中断必须具有比外设中断更高的优先级(数值较低)。否则,调用方 ISR 进程将被阻止。该函数被声明为 __weak 以在用户文件中有其他实现的情况下被覆盖。

HAL_IncTick

函数名称: void HAL_IncTick(void)
函数说明: 调用此函数以递增用作应用程序时基的全局变量 “uwTick”。
返回值:   无
注释:    • 在默认实现中,此变量在 SysTick ISR 中每 1 毫秒递增一次。• 此函数被声明为 __weak 以在用户文件中存在其他实现时被覆盖。

HAL_Delay

函数名称: void HAL_Delay(uint32_t delay) 
函数说明: 此函数根据变量递增提供最小延迟(以毫秒为单位)。
参数:     Delay:指定延迟时间长度(以毫秒为单位)。
返回值:  无
注释: • 在默认实现中,SysTick 计时器是时基的来源。它用于以 uwTick 递增的固定时间间隔生成中断。• 此函数被声明为 __weak 以在用户文件中存在其他实现时被覆盖。

HAL_GetTick

函数名称: uint32_t HAL_GetTick(void)
函数描述: 提供以毫秒为单位的刻度值。
返回值:   tick: 值 
备注:    此函数被声明为 __weak,以便在用户文件中的其他实现的情况下被覆盖。

HAL_GetTickPrio

函数名称: uint32_t HAL_GetTickPrio(void)
函数说明: 此函数返回 tick 优先级。
返回值:   tick: priority

HAL_SetTickFreq

函数名称: HAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef 频率)
函数描述: 设置新的时钟周期频率
返回值:  状态:

HAL_GetTickFreq

函数名称: HAL_TickFreqTypeDef HAL_GetTickFreq(void) 
函数描述: 返回时钟周期频率。
返回值:  tick:以 Hz 为单位的周期 

HAL_SuspendTick

函数名称: void HAL_SuspendTick(void) 
函数描述: 暂停 Tick 增量。
返回值:   无:
注释: • 在默认实现中,SysTick 计时器是时基的来源。它用于以固定的时间间隔生成中断。一旦 HAL_SuspendTick()被调用,SysTick 中断将被禁用,因此 Tick 增量被暂停。• 此函数被声明为 __weak 以在用户文件中存在其他实现时被覆盖。

HAL_ResumeTick

函数名称: void HAL_ResumeTick(void) 
函数说明: 恢复 Tick 增量。
返回值:  无
注释: • 在默认实现中,SysTick 计时器是时基的来源。它用于以固定的时间间隔生成中断。一旦 HAL_ResumeTick()被调用,SysTick 中断将被启用,因此 Tick 增量恢复。• 此函数被声明为 __weak 以在用户文件中存在其他实现时被覆盖。

HAL_GetHalVersion

函数名称: uint32_t HAL_GetHalVersion(void) 
函数描述: 返回 HAL 修订版。
返回值: • 版本:0xXYZR(每个小数点为 8 位,R 代表 RC)

HAL_GetREVID

函数名称: uint32_t HAL_GetREVID(void) 
函数描述: 返回设备修订标识符。
返回值: • 设备:修订标识符 

HAL_GetDEVID 

函数名称: uint32_t HAL_GetDEVID(void) 
函数描述: 返回设备标识符。
返回值: • 设备:标识符 

HAL_GetUIDw0 

函数名称: uint32_t HAL_GetUIDw0(void) 
函数说明: 返回唯一设备标识符的第一个字(基于 96 位的 UID) 
返回值: • 设备:标识符 

HAL_GetUIDw1

函数名称: uint32_t HAL_GetUIDw1(void) 
函数说明: 返回唯一设备标识符的第二个字(基于 96 位的 UID) 
返回值: • 设备: 标识符 

HAL_GetUIDw2

函数名称: uint32_t HAL_GetUIDw2(void) 
函数说明: 返回唯一设备标识符的第三个字(基于 96 位的 UID) 
返回值: • 设备:标识符 

HAL_DBGMCU_EnableDBGSleepMode 

函数名称: void HAL_DBGMCU_EnableDBGSleepMode(void) 
函数描述: 在 SLEEP 模式下启用调试模块。
返回值: • 无

HAL_DBGMCU_DisableDBGSleepMode

函数名称: void HAL_DBGMCU_DisableDBGSleepMode(void) 
函数说明: 在睡眠模式下禁用调试模块  
注意:在器件 STM32F10xx8 和 STM32F10xxB、STM32F101xC/D/E 和 STM32F103xC/D/E、STM32F101xF/G 和 STM32F103xF/G STM32F10xx4 和 STM32F10xx6 调试寄存器 DBGMCU_IDCODE 和 DBGMCU_CR只能在调试模式下访问(在正常模式下用户软件无法访问)。
返回值: • 无

HAL_DBGMCU_EnableDBGStopMode

函数名称: void HAL_DBGMCU_EnableDBGStopMode(void) 
函数说明: 在停止模式下启用调试模块 
注意:在设备 STM32F10xx8 和 STM32F10xxB、STM32F101xC/D/E 和 STM32F103xC/D/E、STM32F101xF/G 和 STM32F103xF/G STM32F10xx4 和 STM32F10xx6 调试寄存器 DBGMCU_IDCODE 和 DBGMCU_CR 只能在调试模式下访问(在正常模式下用户软件无法访问)。
返回值: • 无

HAL_DBGMCU_DisableDBGStopMode 

函数名称: void HAL_DBGMCU_DisableDBGStopMode(void) 
函数说明: 在停止模式下禁用调试模块 
注意:在设备 STM32F10xx8 和 STM32F10xxB、STM32F101xC/D/E 和 STM32F103xC/D/E 上,STM32F101xF/G 和 STM32F103xF/G STM32F10xx4 和 STM32F10xx6 调试寄存器 DBGMCU_IDCODE 和 DBGMCU_CR 只能在调试模式下访问(在正常模式下用户软件无法访问)。
返回值: • 无

HAL_DBGMCU_EnableDBGStandbyMode

函数名称: void HAL_DBGMCU_EnableDBGStandbyMode(void) 
功能描述: 在待机模式下启用调试模块 
注意:在器件 STM32F10xx8 和 STM32F10xxB、STM32F101xC/D/E 和 STM32F103xC/D/E、STM32F101xF/G 和 STM32F103xF/G STM32F10xx4 和 STM32F10xx6 调试寄存器 DBGMCU_IDCODE 和 DBGMCU_CR 只能在调试模式下访问(用户无法访问)软件处于正常模式)。
返回值: • 无

HAL_DBGMCU_DisableDBGStandbyMode 

函数名称: void HAL_DBGMCU_DisableDBGStandbyMode(void) 
函数说明: 在待机模式下禁用调试模块 
注意:在设备 STM32F10xx8 和 STM32F10xxB、STM32F101xC/D/E 和 STM32F103xC/D/E、STM32F101xF/G 和 STM32F103xF/G STM32F10xx4 和 STM32F10xx6 调试寄存器 DBGMCU_IDCODE 和 DBGMCU_CR 只能在调试模式下访问(在正常模式下用户软件无法访问)。
返回值: • 无

2、HAL 固件驱动程序定义

2.1、 在调试模式下冻结和解冻外设

__HAL_DBGMCU_FREEZE_TIM2
__HAL_DBGMCU_UNFREEZE_TIM2
__HAL_DBGMCU_FREEZE_TIM3
__HAL_DBGMCU_UNFREEZE_TIM3
__HAL_DBGMCU_FREEZE_TIM4
__HAL_DBGMCU_UNFREEZE_TIM4
__HAL_DBGMCU_FREEZE_TIM5
__HAL_DBGMCU_UNFREEZE_TIM5
__HAL_DBGMCU_FREEZE_TIM6
__HAL_DBGMCU_UNFREEZE_TIM6
__HAL_DBGMCU_FREEZE_TIM7
__HAL_DBGMCU_UNFREEZE_TIM7
__HAL_DBGMCU_FREEZE_WWDG
__HAL_DBGMCU_UNFREEZE_WWDG
__HAL_DBGMCU_FREEZE_IWDG
__HAL_DBGMCU_UNFREEZE_IWDG
__HAL_DBGMCU_FREEZE_I2C1_TIMEOUT
__HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT
__HAL_DBGMCU_FREEZE_I2C2_TIMEOUT
__HAL_DBGMCU_UNFREEZE_I2C2_TIMEOUT
__HAL_DBGMCU_FREEZE_CAN1
__HAL_DBGMCU_UNFREEZE_CAN1
__HAL_DBGMCU_FREEZE_CAN2
__HAL_DBGMCU_UNFREEZE_CAN2
__HAL_DBGMCU_FREEZE_TIM1
__HAL_DBGMCU_UNFREEZE_TIM1
__HAL_DBGMCU_FREEZE_TIM9
__HAL_DBGMCU_UNFREEZE_TIM9
__HAL_DBGMCU_FREEZE_TIM10
__HAL_DBGMCU_UNFREEZE_TIM10
__HAL_DBGMCU_FREEZE_TIM11
__HAL_DBGMCU_UNFREEZE_TIM11

相关文章:

STM32F1 HAL库笔记2_HAL 系统驱动程序

1、HAL 固件驱动程序 API 1.1、如何使用此驱动程序 通用 HAL 驱动程序包含一组通用的 API,PPP 外设驱动程序可以使用这些 API 来开始使用 HAL。HAL 包含两个 API 类别: • 常见的 HAL API • 服务 HAL API 1.2、初始化和去初始化函数 本节提供的功能&a…...

el-table实现当内容过多时,el-table显示滚动条,页面不显示滚动条

估计有不少小伙伴在开发公司的ERP使用el-table都会遇到这么一个问题,就是产品经理提出,页面不出现滚动条,因为不美观。但是当el-table内容过多,超过页面的宽度时候,页面就会有滚动条。那应该如何解决呢?能不能让滚动条…...

Java面试篇基础部分-Java中的异常以及异常处理

导语   在实际的开发过程中,往往会遇到各种各样的编程异常,如何处理这些异常,直接会影响到整个程序和系统的稳定性,如果不能在合适的地方抛出合适的异常或者是对异常进行捕获。那么就会影响到整个程序的运行。所以如何处理异常,是作为每个开发者来说必不可少的开发技能。…...

win11 MySQL的坑

最近升级了系统,导致以前的安装的两个版本MySQL服务无法启动,只能在mysql的bin目录,执行mysqld --console才能启动,mysqld都无法启动, 所幸进行了数据库初始化,这次在MySQL的bin目录执行 mysqld或者mysqld …...

stm32单片机个人学习笔记1(简单介绍)

前言 本篇文章属于stm32单片机(以下简称单片机)的学习笔记,来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记,只能做参考,细节方面建议观看视频,肯定受益匪浅。 STM32入门教程-2023版 细…...

python中@staticmethod、@classmethod用法

1、类的基础介绍 类对象:定义的类就是类对象 类属性:定义在__init__ 外部的变量 类方法:定义在类中,且被classmethod 装饰的方法 实例对象:类对象实例化后就是实例对象 实例属性:定义在__init__内部带…...

Harmony Next 文件命令操作(发送、读取、媒体文件查询)

查询文件位置 hdc shell mediatool query IMG_20240902_204224.jpg 输出示例 拉取文件 hdc file recv /storage/cloud/100/files/Photo/4/IMG_1725281044_036.jpg aa.jpg 发送文件 hdc file send aa.jpg /storage/media/100/local/files/Docs/Download/ab.jpg 下载目录位置…...

Go语言中的链表与双向链表实现

链表基础 链表是一种由有限元素组成的数据结构,其中每个元素至少使用两个内存空间:一个存储实际数据,另一个存储指向下一个元素的指针,从而形成一个元素序列构成链表。链表的第一个元素称为头结点,而最后一个元素通常…...

开始一个WPF项目时的记忆重载入

目前在工业软件的UI开发方案选择中,WPF仍然是一个重要的选项。 但是其固有的复杂性,对于像我这样,并不是一直在从事界面开发的人来说,每次重启,都需要一两天的适应的时间。所以这里稍微写一个笔记。 还是老办法&…...

用go语言实现树和哈希表算法

算法复杂度 判断一个算法的效率通常基于其计算复杂度,这主要与算法访问输入数据的次数有关。计算机科学中常用大O表示法来描述算法的复杂度。例如,O(n)的算法只需访问一次输入数据,因此优于O(n)的算法,后者则优于O(n)的算法&…...

基于SpringBoot+Vue+MySQL的校园健康驿站管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 本文设计并实现了一个基于SpringBoot后端、Vue前端与MySQL数据库的校园健康驿站管理系统。该系统旨在通过数字化手段,全面管理学生的健康信息,包括体温监测、疫苗接种记录、健康状况申报等,为…...

深入理解MATLAB中的事件处理机制

在MATLAB中,事件处理机制是一种强大的工具,它允许对象之间的交互和通信。这种机制基于观察者设计模式,其中一个对象(观察者)监听另一个对象(发布者)的状态变化。当发布者的状态发生变化时&#…...

线程--线程同步

这里写目录标题 同步概念线程同步概念数据混乱原因 互斥量原理锁的注意事项1、cpu时间轮片2、建议锁总结 使用锁来管理线程同步问题产生主要函数init、destorylock、unlock代码注意事项(锁的粒度) try锁死锁出现原因图解 读写锁特性图解函数总览init、de…...

【QT】Qt窗口

欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:QT 目录 👉🏻菜单栏设置👉🏻QToolBar练习 👉🏻QStausBar👉🏻Q…...

场外个股期权怎么给股票加杠杆?

今天期权懂带你了解场外个股期权怎么给股票加杠杆?场外期权交易通过向证券公司支付一定额度的股票期权费,然后买入大额的股票持仓,从而实现的杠杆交易。 买入看涨期权 操作:支付权利金购买看涨期权。 杠杆作用: 期…...

【Docker部署ELK】(7.15)

1、拉取镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.15.0 docker pull docker.elastic.co/kibana/kibana:7.15.0 docker pull docker.elastic.co/logstash/logstash:7.15.02、配置文件(解压资源到D盘DOCKER目录下) 2.1 配置文件…...

UE4_后期处理_后期处理材质及后期处理体积一

后期处理效果 在渲染之前应用于整个渲染场景的效果。 后期处理效果(Post-processing effect)使美术师和设计师能够对影响颜色、色调映射、光照的属性和功能进行组合选择,从而定义场景的整体外观。要访问这些功能,可以将一种称为…...

【PyQt6 应用程序】基于QtDesigner做一个用户登录页面

在当今的软件开发领域,用户界面(UI)设计和后端编程是创建现代、互动应用程序的两大重要组成部分。尤其是在开发具有用户登录功能的应用程序时,不仅要注重外观和用户体验的设计,还要确保后端逻辑的安全性和可靠性。 本文将介绍如何使用PyQt6框架结合UI设计,实现一个简单而…...

Ollama—87.4k star 的开源大模型服务框架!!

这一年来,AI 发展的越来越快,大模型使用的门槛也越来越低,每个人都可以在自己的本地运行大模型。今天再给大家介绍一个最厉害的开源大模型服务框架——ollama。 项目介绍 Ollama 是一个开源的大语言模型(LLM)服务工具…...

MySQL表的操作与数据类型

目录 前言 一、表的操作 1.创建一个表 2.查看表的结构 3.修改表 4.删除一个表 二、 MySQL的数据类型 0.数据类型一览: 1.整数类型 2.位类型 3.小数类型 4.字符类型 前言 在MySQL库的操作一文中介绍了有关MySQL库的操作,本节要讲解的是由库管理的结构——…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...