【STM32Cube_00】初识 HAL固件库
一、CMSIS标准及库层次关系
因为基于Cortex 系列芯片采用的内核都是相同的,区别主要为核外的片上外设的差异,这些差异却导致软件在同内核,不同外设的芯片上移植困难。为了解决不同的芯片厂商生产的 Cortex 微控制器软件 的兼容性问题,ARM 与芯片厂商建立了 CMSIS 标准(Cortex MicroController Software Interface Standard)。
所谓 CMSIS 标准,实际是新建了一个软件抽象层。
1.1库目录、文件简介
STM32Cube_FW_F1_V1.8.0
Documentation
:文件夹下是 HAL 库帮助文档,主要讲述如何使用驱动库来编写自己的应用程序。说得形象一点就是告诉我们:ST 公司已经为你写好了每个外设的驱动了,想知道如何运用这些例子就来向我求救吧。不幸的是,这个帮助文档是英文的,这对很多英文不好的朋友来说是一个很大的障碍。但这里要告诉大家,英文仅仅是一种工具,绝对不能让它成为我们学习的障碍。其实这些英文还是很简单的,我们需要的是拿下它的勇气。Drivers
:文件夹下是官方的 CMSISI库,HAL库,板载外设驱动。Middlewares
:中间件,包含 ST 官方的 STemWin、 STM32_Audio、STM32_USB_Device_Library、STM32_USB_Host_Library;也有第三方的 fatfs文件系
统等等。Project
:文件夹下是用驱动库写的针对官方发行 demo 板的例子和工程模板。Utilities
:实用的公用组件比如 LCD_LOG 实用液晶打印调试信息。Release_Note.html
:库的版本更新说明。
在使用库开发时,我们需要把Drivers目录下的CMSIS
、STM32F1xx_HAL_Driver
内核与外设的库文件添加到我们的工程中即可。
在Drivers目录下有两个文件夹CMSIS
、STM32F1xx_HAL_Driver
。我们先看CMSIS
、文件夹。
二、CMSIS文件夹
先看=include=文件
在 Include 文件夹中包含了 的是位于 CMSIS 标准的核内设备函数层的 Cortex-M 核通用的头文件,它们的作用是为那些采用 Cortex-M 核设计 SOC 的芯片商设计的芯片外设提供一个进入内核的接口,定义了一些内核相关的寄存器(类似我们前面写的 stm32F103xx.h 文件,但定义的是内核部分的寄存器)。
2.1 stm32F103xx.h 文件
文件目录:Drivers \CMSIS\Device\ST\stm32f1xx\Include
stm32F103xx.h 这个文件非常重要,是一个 STM32 芯片底层相关的文件。包含了 STM32 中所有的外设寄存器地址和结构体类型定义,在使用到 STM32 HAL库的地方都要包含这个头文件。
再看=Source=文件
2.2 system_stm32f1xx.c 文件
文件目录:STM32Cube_FW_F1_V1.8.0\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates
这个文件包含了 STM32芯片上电后初始化系统时钟、扩展外部存储器用的函数,例如供启动文件调用的“SystemInit”函数,用于上电后初始化时钟,该函数的定义就存储在system_stm32f1xx.c
文件。STM32F103 系列的芯片,调用库的这个SystemInit
函数后,系统时钟被初始化为72MHz
,如有需要可以修改这个文件的内容,设置成自己所需的时钟频率。
2.3 启动文件
文件目录:STM32Cube_FW_F1_V1.8.0\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates
在这个目录下,还有很多文件夹,如“ARM”、“gcc”、“iar”等,这些文件夹下包含了对应编译平台的汇编启动文件,在实际使用时要根据编译平台来选择。我们使用的MDK 启动文件在“ARM”文件夹中。其中的“strartup_STM32F103xx.s”即为 STM32F103芯片的启动文件,前面两章工程中使用的启动文件就是从这里复制过去的。如果使用其它型 号 的 芯 片 , 要 在 此 处 选 择 对 应 的 启 动 文 件 , 如 STM32F103 型 号 使 用“startup_stm32f103x.s”文件。
三、STM32F1xx_HAL_Driver文件夹
文件目录:Drivers\STM32F1xx_HAL_Driver
进入 Drivers 目录下的 STM32F1xx_HAL_Driver 文件夹
STM32F1xx_HAL_Driver 文件夹下有 inc(include 的缩写)跟 src(source 的简写)这两个文件夹,这里的文件属于 CMSIS 之外的的、芯片片上外设部分。src 里面是每个设备外设的驱动源程序,inc 则是相对应的外设头文件。src 及 inc 文件夹是 ST 的 HAL 库的主要内容,甚至不少人直接认为 ST的 HAL库就是指这些文件,可见其重要性。
在src和inc文件夹里的就是ST公司针对每个STM32 外设而编写的库函数文件,每个外设对应一个.c
和.h
后缀的文件。我们把这类外设文件统称为:stm32f1xx_hal_ppp.c
或stm32f1xx_hal_ppp.h
文 件 。如针对模数转换(ADC)外设,在 src 文件夹下有一个 stm32f1xx_hal_adc.c
源文件,在inc 文件夹下有一个 stm32f1xx_hal_adc.h
头文件。
stm32f1xx_it.c、 stm32f1xx_hal_conf.h文件
文件目录:STM32Cube_FW_F4_V1.19.0\Projects\STM32F103ZI-Nucleo\Templates
在这个文件目录下,存放了官方的一个库工程模板,我们在用库建立一个完整的工程时,还需要添加这个目录下 src 文件夹中stm32f1xx_it.c
和 inc 文件夹中和stm32f1xx_it.h
、stm32f1xx_hal_conf.h
这三个文件。
stm32f1xx_it.c:这个文件是专门用来编写中断服务函数的,在我们修改前,这个文件已经定义了一些系统异常(特殊中断)的接口,其它普通中断服务函数由我们自己添加。但是我们怎么知道这些中断服务函数的接口如何写?是不是可以自定义呢?答案当然不是的,这些都有可以在汇编启动文件中找到,在学习中断和启动文件的时候我们会详细介绍stm32f1xx_hal_conf.h
:这个文件被包含进stm32f103xx.h
文件。STM32HAL 库支持所有 STM32F1 型号的芯片,但有的型号芯片外设功能比较多,所以使用这个配置文件根据芯片型号增减 ST库的外设文件,另外时钟源配置也是在这里进行设置。
文章来源: blog.csdn.net,作者:果果小师弟,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq_39400113/article/details/109463285
- 点赞
- 收藏
- 关注作者
评论(0)