【STM32Cube_00】初识 HAL固件库

举报
果果小师弟 发表于 2021/05/29 12:33:16 2021/05/29
【摘要】 一、CMSIS标准及库层次关系   因为基于Cortex 系列芯片采用的内核都是相同的,区别主要为核外的片上外设的差异,这些差异却导致软件在同内核,不同外设的芯片上移植困难。为了解决不同的芯片厂商生产的 Cortex 微控制器软件 的兼容性问题,ARM 与芯片厂商建立了 CMSIS 标准(Cortex MicroController Software Interfac...

一、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目录下的CMSISSTM32F1xx_HAL_Driver内核与外设的库文件添加到我们的工程中即可。


在Drivers目录下有两个文件夹CMSISSTM32F1xx_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.cstm32f1xx_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.hstm32f1xx_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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。