| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> STM32F1xx HAL库 中文详解 之 综合概述(一) -> 正文阅读 |
|
[嵌入式]STM32F1xx HAL库 中文详解 之 综合概述(一) |
????????现阶段学习hal库,发现网上竟然没有对HAL库全面详细的解析,在学习的过程中把我所学到的记录下来,分享给大家,一起学习,一起进步!第一次写博文,有不足之处希望大家能在评论区指出。 HAL库驱动程序概述:????????HAL驱动程序被设计成提供一套丰富的API,并且易于与上层应用程序。每个驱动程序由一组函数组成,涵盖了最常见的外围设备特性。每个驱动程序的开发都是由一个通用的API驱动的,该API对驱动程序进行了标准化结构、函数和参数名称。 ? ????????HAL驱动程序包括一组驱动模块,每个模块连接到一个独立的模块外围。?然而,在某些情况下,模块链接到外围功能模式。例如,USART外围设备有几个模块:UART驱动模块、USART驱动模块,智能卡驱动模块,IRDA驱动模块。HAL的主要特点如下: ? ● 跨家族的可移植API集,涵盖了常见的外围功能扩展API用于特定的外围特性。 ● 三种API编程模型:轮询、中断和DMA:?? ? ? ----API是RTOS兼容的完全可重入的API? ? ? ----轮询模式中超时的系统使用情况?? ● 支持外设多实例,允许多个并发API调用给定外围设备的实例(USART1, USART2…) ? ● 所有HAL API都实现用户回调函数机制: ? ? ? ----外设Init/DeInit HAL api可以调用用户回调函数来执行初始化/去初始化(时钟,gpio,中断,DMA) ? ? ----外设中断事件错误的事件。 ? ● 对象锁定机制:安全硬件访问,防止多重伪访问共享资源。 ● 用于所有阻塞进程的超时:超时可以是一个简单的计数器或时基。 ? ????????本文重点对hal库做一个综合的概述,后续还会更新其他外设! ? ? ? ? 本文将从以下几个方面介绍HAL库: 综合概述(一):1 HAL库常用名词缩写及HAL库用户应用程序文件2 HAL库数据结构3 API分类4 HAL驱动支持的设备综合概述(二):5 HAL驱动规则6 HAL通用API7 HAL扩展API8文件包含方式综合概述(三):9 HAL公共资源10 HAL配置11 HAL系统外设处理12 如何使用HAL驱动程序1 HAL库常用名词缩写及HAL库用户应用程序文件1.1常用名词缩写与定义
1.2HAL和用户应用程序文件????????接下来说一下HAL库的文件组成,HAL库用户应用程序文件分为两部分,一部分是HAL库驱动程序文件,另一部分是用户应用程序文件。 1.2.1 hal库驱动程序文件
1.2.2 用户应用程序文件
????????STM32Cube包附带了现成的项目模板,每个模板对应一个型号的支持。?每个项目包含上面列出的文件和一个预先配置的项目用于支持的工具链。每个项目模板的main()中都提供了空的主循环函数,可以作为开始点来熟悉STM32Cube的项目设置。?他们的特点是: ? ????????1. 它包含HAL, CMSIS和BSP驱动的来源是最小的组件来在给定的开发板上开发代码。 ? ????????2. 它包含所有固件组件的包含路径。 ? ????????3. 它定义了支持的STM32设备,并允许配置CMSIS和HAL相应的驱动程序。 ? ????????4. 它提供了准备使用预先配置如下定义的用户文件: ? ? ????????????????? ----HAL初始化 ? ????????????????? ? ----实现HAL_Delay()的SysTick ISR ? ???????????????? ? ----系统时钟配置为设备的最大频率 ? 2 HAL库数据结构每个HAL驱动程序可以包含以下数据结构: ? ? ? ? ? ----外围处理结构 ? ? ? ? ? ----初始化和配置结构 ? ? ? ? ? ----特定的流程结构? 2.1外围处理结构这些API有一个模块化的通用多实例体系结构,允许使用同时存在多个IP实例。 ? PPP_HandleTypeDef *句柄是HAL中实现的主要结构驱动程序。?它处理外设/模块配置,寄存器和嵌入所有的遵循外围设备流程所需的结构和变量。 外围句柄用于以下目的: ? ? ? ? ? ----多实例支持:每个外设/模块实例都有自己的句柄。?作为一个结果实例资源是独立的。 ? ? ? ? ? ----外围进程间通信:句柄用于管理共享数据流程例程之间的资源。 ? ????????????????例如:全局指针,DMA句柄,状态机。 ? ? ? ? ? ----存储:这个句柄也用于管理给定HAL驱动中的全局变量。 ? 外围结构示例如下: ?
1)多实例特性意味着应用程序中使用的所有api都是重入并避免使用全局变量,因为子例程可能无法重入如果它们依赖于一个全局变量保持不变,但那个变量是在递归调用子例程时修改。?由于这个原因,下面尊重规则: ? ? ? ? ? ----可重入代码不包含任何静态(或全局)非常量数据函数可以处理全局数据。?例如,可重入对象 ?中断服务程序可以获取一块硬件状态来进行工作它不仅是全局的,而且是volatile的。?不过,典型的不建议使用静态变量和全局数据在这些变量中应该使用原子的读-修改-写指令。?它在执行过程中是否不可能出现中断或信号这样的指令。 ? ? ? ? ? ----可重入代码不修改它自己的代码。 ? 2)当一个外设可以同时管理多个进程使用的DMA(全双工情况),每个进程的DMA接口句柄被添加到PPP_HandleTypeDef。 ? 3)对于共享和系统外围设备,不使用句柄或实例对象。 这个例外所涉及的外围设备如下: ? ? ? ? ?● GPIO 2.2 初始化和配置结构这些结构在通用驱动头文件中定义,当它对所有部分都是通用的数字。?当它们可以从一个零件号码转换到另一个时,结构是在每个零件号的扩展头文件中定义。
配置结构用于初始化子模块或子实例。?看到下面的例子: ?
2.3具体的工艺结构 ?特定的流程结构用于特定的流程(通用API),他们是在通用驱动头文件中定义。 ? 例如:
3 PAI的分类HAL api分为三类: ? ? ? ? ?● 通用api:应用于所有STM32设备的通用api。?这些api是因此出现在所有STM32微控制器的通用HAL驱动文件中。 ?
????????● 扩展API:这组API分为两个子类: ? ? ? ? ? ? ? ? ? ----特定于家族的api:应用于给定家族的api。?它们位于扩展HAL驱动文件(参见下面与ADC相关的示例)。 ?
? ? ? ????????? ----设备部件号特定的api:这些api在扩展文件,并由相对于给定部分的特定定义语句分隔号码。 ?
与特定API相关的数据结构由设备部分分隔数定义语句。?它位于相应的扩展头C中文件。 4 HAL驱动程序支持的设备?以下是来自st官网HAL库手册的图片,详细的说明了HAL库中的驱动程序文件所支持的芯片型号。 ? ? ? ?????????以上就是STM32F1xx?HAL库驱动程序概述的前4小节内容,剩下的部分将在综合概述(二)和综合概述(三)中更新。 ? ? ? ? 第一次发文,希望大家多多支持,一起学习,一起进步!!! |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 1:42:14- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |