当前位置:网站首页>HAL 固件库
HAL 固件库
2022-07-16 05:28:00 【总结所学】
学习自记:
基于 Cortex 系列芯片采用的内核都是相同的,区别主要为核外的片上外设的差异,这些差异
导致程序在同内核,不同外设的芯片上移植困难。为了解决不同的芯片厂商生产的 Cortex 微
控制器软件兼容性问题,ARM 与芯片厂商建立了 CMSIS 标准 (Cortex MicroController Software
Interface Standard)。
所谓 CMSIS 标准,实际是一个软件抽象层,一套函数库,提供用户程序与arm内核和厂商外设的接口

CMSIS函数库 主要包括:
• 内核函数层:其中包含用于访问内核寄存器的名称、地址定义,主要由 ARM 公司提供。
• 设备外设访问层:提供了片上的核外设的地址和中断定义,主要由芯片生产商提供。
可见 CMSIS 层位于硬件层与操作系统或用户层之间,提供了与芯片生产商无关的硬件抽象层,可
以为接口外设、实时操作系统提供简单的处理器软件接口,屏蔽了硬件差异,这对软件的移植是
有极大的好处的。STM32 的库,就是按照 CMSIS 标准建立的。
1.固件库目录

- Documentation:文件夹下是 HAL 库帮助文档
- Drivers:HAL 内核库,外设驱动库;
- Middlewares:中间件,包含ST官方的STemWin、STM32_Audio、TM32_USB_Device_Library、
- STM32_USB_Host_Library;也有第三方的 fatfs 文件系统等等。
- Project :用HAL库写的针对官方发行 demo 板的例子和工程模板。
- Utilities:实用的公用组件比如 LCD_LOG 实用液晶打印调试信息。
- Release_Note.html::库的版本更新说明。
2.STM32Cube_FW_F1_V1.8.0\Drivers\CMSIS\文件夹下内容

2.1 Include文件夹:
- Include文件夹中是核内设备 函数层通用头文件,定义内核寄存器(进入内核的接口)(类似stm32F103xx.h 文件,但定义的是内核部分的寄存器)。
- 内核的寄存器说明,查阅《cortex_M3_Technical Reference Manual》及《Cortex-M3 内核编程手册》文档,《STM32F103xxx 参考手册》只包含片上外设说明,不包含内核寄存器。
- STM32F1 工程四个文件:core_cm3.h、core_cmFunc.h、corecmInstr.h、core_cmSimd.h,其它的文件是属于其它内核的,还有几个文件是 DSP 函数库使用的头文件。
- core_cm3.h 文件有一些与编译器相关条件编译语句,用于屏蔽不同编译器的差异;core_cm3.h文件中包含了“stdint.h”这个头文件,位于 RVMDK 这个软件的安装目录下,主要作用是提供一些类型定义。

2.2 Device 文件夹:
- 启动文件 startup_stm32f103xx.s
文件目录:\Drivers\CMSIS\Device\ST\stm32f1xx\Source\Templates
文件内汇编语言,包含所有中断服务函数的名称,引导至SystemInit初始化函数和main函数;
- system_stm32f1xx.c文件
文件目录:\Drivers\CMSIS\ Device\ST\stm32f1xx\Source\Templates
启动文件调用的“SystemInit”初始化系统时钟函数;
- stm32f1xx.h,stm32F103xx.h ,system_stm32f1xx.h文件
文件目录:\Drivers\CMSIS\Device\ST\stm32f1xx\Include
stm32f1xx.h,根据芯片型号选择不同stm32F103xx.h;
stm32F103xx.h,STM32 中所有的外设寄存器地址和结构体类型定义;
2.STM32Cube_FW_F1_V1.8.0\Drivers\STM32F1xx_HAL_Driver\文件夹下内容

芯片片上外设部分,src 外设的驱动源程序,inc 相对应的外设头文件。
3.Templates及其它文件夹下
stm32f1xx_it.c/h:用来编写中断服务函数
stm32f1xx_hal_conf.h:芯片外设功能比较多,使用这个配置文件根据芯片型号增减 ST 库的外设文件, 另外时钟源配置也是在这里进行设置。
小结:
- core_cm3.h屏蔽编译器差异、定义变量类型、内核寄存器地址定义-——>
- 汇编语言启动文件startup_stm32f103xx.s-——>
- 系统初始化system_stm32f1xx.c/h-——>
- stm32f1xx.h型号选择文件-——>
- 外设寄存器地址和结构体类型定义stm32F103xx.h-——>
- stm32f1xx_hal_conf.h选择所需外设驱动函数及时钟源配置,这个文件被包含进 stm32f103xx.h 文件,这个文件还可配置是否使用“断言”编译选项-——>
- STM32F1xx_HAL_Driver外设驱动函数
4.常用官方资料
- 《STM32F10X-中文参考手册》
- 《STM32 数据手册》
- 《STM32F103xG_User_Manual.chm》HAL库函数使用手册
Cortex-M内核:
•《Cortex-M3 内核编程手册》
•《Cortex-M3 权威指南》。
边栏推荐
- If you don't want to step on those holes in SaaS, you must first understand the "SaaS architecture"
- Blue Hat Cup 2022 part WP
- 第一章 环境配置
- nn. Gru() use
- Nxopen UG secondary development
- Pointer constant and constant pointer
- 二进制搭建 Kubernetes
- In depth learning (2020 Li Hongyi) learning records
- Basic use of Anaconda
- 基于单片机的可燃气烟雾系统设计(#0488)
猜你喜欢

【leetcode刷题】

Codeforces Round #803 (Div. 2) A. XOR Mixup

Huawei ECS cloud database creation read-only process
![[phantom engine UE] package abnormal problem collection](/img/99/0db3caf19fafdec17b05b863f23903.png)
[phantom engine UE] package abnormal problem collection

QT使用多线程

通用分页2.0

Chinese garbled code in kettle version 8.2

ARM64银河麒麟桌面系统V10(SP1) markdown编辑器 retext 顶替Typora

基于单片机的氢气监测报警系统设计(#0492)

蓝帽杯 2022 部分wp
随机推荐
[deep reinforcement learning - note 02]
Solve the problem of Vue multi-level route cache invalidation solve the problem of multi-level route cache based on keep alive Vue keep alive cache invalidation Vue element admin multi-level route cac
[cityengine] cityengine2019 installation and use and city model construction
Clone warehouse code when creating a new project in idea
刷题笔记-排序
C&W(Carlini & Wagner)
Zebra 888 TT doesn't recognize new paper
二进制搭建 Kubernetes
[AI chip Caisa]
蓝帽杯 2022 部分wp
通用分页2.0
【Atlas快速入门】
力扣(977和189)
(QT) plug in of QT project
opencv-成长记
kaldi 源码安装
斑马888-TT不认新纸
合宙Air820ug昇級固件要點
基于单片机的可燃气烟雾系统设计(#0489)
【AI芯片CAISA】