HAL库中各个文件的介绍:

startup_stm32l475xx.s

启动文件的主要作用是进行RAM中堆、栈内存的分配和初始化,中断向量表及中断函数的定义等,进行完这一系列工作后执行系统复位从而跳转至用户main函数开始执行。

stm32l4xx_hal_ppp.c/.h

基本外设的操作函数文件,ppp 代表外设名称。其中stm32l4xx_hal_cortex.c/.h 比较特殊,它是一些 Cortex 内核通用函数声明和定义,例如中断优先级 NVIC 配置,系统软复位以及Systick 配置等。

stm32l4xx_hal_ppp_ex.c/.h

扩展外设特性的操作函数文件。

stm32l4xx_hal.c

HAL库的通用函数文件,如HAL_Init,HAL_DeInit,HAL_Delay等。

stm32l4xx_hal.h

HAL库的通用函数文件的头文件。

stm32l4xx_hal_conf.h

HAL库的配置文件,使用宏定义选择某种外设是否使能,以及一些时钟参数的配置。

stm32l4xx_hal_def.h

HAL库中的通用数据类型定义和宏定义。

stm32l4xx_it.c/stm32l4xx_it.h

中断服务函数的定义和声明,放置的基本都是一些空函数,除SysTick_Handler函数外。

stm32l4xx.h

stm32l4xx.h文件会根据 C/C++选项卡里面定义的全局宏定义标识符选择程序中包含的头文件。

stm32l475xx.h

主要是该型号芯片寄存器定义声明以及封装的内存操作。

system_stm32l4xx.c/system_stm32l4xx.h

源文件中包含SystemInit函数和SystemCoreClockUpdate函数的定义,SystemInit 函数的作用是进行时钟系统的一些初始化操作以及中断向量表偏移地址设置,但它并没有设置具体的时钟值。SystemCoreClockUpdate 函数是在系统时钟配置进行修改后,调用这个函数来 更新全局变量 SystemCoreClock 的值,开放这个变量可以方便用户使用系统时钟进行一些计算时使用。

stm32l4xx_hal_msp.c

MSP,全称为MCU support package,即芯片支持包,表明该文件和芯片型号是强相关的。函数名字中带有 MspInit 的函数,它们的作用是进行MCU级别硬件初始化设置,并且它们通常会被上一层的初始化函数所调用,这样做的目的是为了把 MCU 相关的硬件初始化剥夺出来,方便用户代码在不同型号的 MCU 上移植。 stm32l4xx_hal_msp.c 文件定义了两个函数 HAL_MspInit 和 HAL_MspDeInit。这两个函数分别被文件 stm32l4xx_hal.c中的HAL_Init和 HAL_DeInit所调用。HAL_MspInit函数的主要作用是进行 MCU 相关的硬件初始化操作。例如我们要初始化某些硬件,我们可以硬件相关的初始化配置写在 HAL_MspDeinit 函数中。这样的话,在系统启动后调用了 HAL_Init 之后,会自动调用硬件初始化函数。

如main函数中调用MX_USART3_UART_Init()函数,

MX_USART3_UART_Init()函数调用HAL_UART_Init()函数进行串口初始化,

HAL_UART_Init()函数内部会判断若串口未初始化则调用HAL_UART_MspInit()函数进行初始化。

串口的初始化过程为MX_USART3_UART_Init()---->HAL_UART_Init()---->HAL_UART_MspInit()。为什么串口相关初始化不在 HAL_UART_Init 函数内部一次初始化而还要调用函数 HAL_UART_MspInit()呢?这实际就是 HAL 库的一个优点,它通过开放一个回调函数 HAL_UART_MspInit(),让用户自己去编写与串口相关的 MCU 级别的硬件初始化,而与 MCU 无关的串口参数相关的通用配置则放在 HAL_UART_Init。 我们要初始化一个串口,首先要设置和 MCU 无关的东西,例如波特率,奇偶校验,停止位等, 这些参数设置和 MCU 没 有 任 何 关 系 , 可 以 使 用 STM32F1 , 也 可 以 是 STM32F2/F3/F4/F7/H7 上的串口。而一个串口设备它需要一个 MCU 来承载,例如用 STM32L4 来做承载,PA9 做为发送,PA10 做为接收,MSP 就是要初始化 STM32L4 的 PA9,PA10,配置 这 两 个 引 脚 。 所以 HAL 驱 动 方 式 的 初 始 化 流 程 就 是 : HAL_USART_Init()—>HAL_USART_MspInit() ,先初始化与 MCU 无关的串口协议,再初始化 与 MCU 相关的串口引脚。在 STM32 的 HAL 驱动中 HAL_PPP_MspInit()作为回调,被HAL_PPP_Init()函数所调用。当我们需要移植程序到 STM32F1 平台的时候,我们只需要修改 HAL_PPP_MspInit 函数内容而不需要修改 HAL_PPP_Init 入口参数内容。

STM32 HAL库 .c/.h 文件介绍相关推荐

  1. STM32 HAL库学习笔记2 HAL库介绍

    STM32 HAL库学习笔记2 HAL库介绍 CMSIS标准 一.再次认识HAL库 HAL库设计思想 HAL库实现方式 以GPIO模块为例 GPIO外设数据类型 GPIO外设接口函数 二.使用HAL库 ...

  2. 【08】STM32·HAL库开发-HAL库介绍 | STM32Cube固件库介绍 | HAL库框架结构 | 如何使用HAL库及使用注意事项

    目录 1.初识HAL库(了解) 1.1CMSIS简介 1.2HAL库简介 2.STM32Cube固件包浅析(了解) 2.1如何获取STM32Cube固件包? 2.2STM32Cube固件包文件夹简介 ...

  3. STM32 HAL库学习笔记1-HAL库简介

    STM32 HAL库学习笔记1-HAL库简介 HAL库 SPL 库 和 HAL 库两者相互独立,互不兼容.几种库的比较如下 目前几种库对不同芯片的支持情况如下 ST 中文官网上有一篇<关于ST库 ...

  4. STM32 HAL库详解

    STM32 HAL库整体总结 STM32 之二 HAL库详解 及 手动移植 本篇博客是对以上参考资源的一个二次总结与整理. 1. HAL库文件结构 对于开发人员而言,首先要清楚 HAL 库的文件结构. ...

  5. STM32 HAL库学习笔记4-SPI

    STM32 HAL库学习笔记4-SPI 前言 一.SPI协议简介 SPI物理层 SPI协议层 1.基本通讯过程 2. 通讯的起始和停止信号 3. 数据有效性 4. CPOL/CPHA 及通讯模式 二. ...

  6. STM32 HAL库组成概述

    STM32 HAL库概述 ## (一)HAL库设计思想 什么是HAL(Hardware Abstraction Layer)? from 百度百科: 硬件抽象层是位于操作系统内核与硬件电路之间的接口层 ...

  7. STM32 HAL库PID控制电机 第三章 PID控制双电机

    STM32 HAL库PID控制电机 第三章 PID控制双电机 注:本文含全部PID控制代码,保证可以运行,如不能运行可以留言回复 1 基础配置 1.1 编码器电路图及配置 引脚 定时器通道 PA0 T ...

  8. 如何快速使用STM32 HAL库和涂鸦Wi-Fi模组进行通信

     简介:本文将教大家如何使用STM32HAL库快速开发和涂鸦WIFI模组通信,接入涂鸦云. 实现功能:通过APP实时监测温湿度数据 程序下载路径:demo程序. demo(定时采集数据)程序. 一.使 ...

  9. STM32 HAL库

    STM32 HAL库 第三章 MDK5 软件入门 bug解决 关键文件介绍 程序仿真 User Keywords 语法提示 代码编辑/查看技巧 第四章 STM32F1 基础知识入门 MDK 下 C 语 ...

最新文章

  1. 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!...
  2. ASP.NET在IE10中Form表单身份验证失效问题解决方法
  3. MySQL mysqldump命令
  4. Scala父类和父特质的执行顺序
  5. 《炉石传说》架构设计赏析(2):Scene管理
  6. DNS-实验6_queryperf和dnstop的简单使用
  7. 95. 不同的二叉搜索树 II
  8. linux arch 包管理,Archlinux使用包管理方式安装MyEclipse
  9. 绳索受力分析的软件_【硕士论文】供热管网管道支架载荷分析与优化设计
  10. java 分级显示_上级部门与下级部门的分类显示
  11. Java中的项目的导入导出
  12. BeyondCompare This license key has been revoked:
  13. php 日期函数大全,php日期函数
  14. Linux操作系统配置基础详解:GRUB入门 (转)
  15. 【光学】基于Matlab模拟衍射光栅实验
  16. Android开源项目第一篇——个性化控件(View)篇
  17. 组态软件DIAView、扫码枪和第三方系统MES、SAP等应用
  18. foxmail群发邮件怎么发?
  19. Flutter:文件与网络操作摘要
  20. 【Git学习】解决GitLab内存消耗大的问题

热门文章

  1. java 将json转成utf 8_解决JSON.stringify()自动将中文转译成unicode的方法
  2. 自研redis sdk支持自动dns切换(附源码)
  3. centos 生成 ssh-key github 连接 配置
  4. 64位Windows2003 Enterprise sp2 上64位Oracle10.2.0.1升级到Oracle10.2.0.3具体步骤
  5. VS 调用外部DLL时提示“无法嵌入互操作类型”
  6. 考研计算机网课辅导,考研计算机网课辅导哪个好
  7. js中小数取整数(向上、向下取整数,四舍五入取整数的实现)
  8. myelicpes怎么导入PHP项目,利用PHP执行SQL文件,将SQL文件导入到数据库
  9. 利用反射和xml配置文件手写一个小型的框架
  10. pytorch之trainer.zero_grad()