【STM32】STM32单片机总目录

1、简述

STD(Standard Peripheral Libraries)标准库:面向过程,仅仅是在寄存器上的一层封装操作
HAL(Hardware Abstraction Layer)硬件抽象层:面向对象,将每个外设封装为一个对象,还能通过使用CubeMx软件生成初始化硬件的代码,使用者只需完成业务逻辑即可。运行效率比标准库略低。
LL (Low Layer)底层库: 为了弥补HAL库效率较低的问题,推出了LL库。与HAL库相同,LL库同样支持CUBEMX生成代码,非常方便。并且,在cubemx工程中,不同外设是可以混合使用HAL和LL库的,两者完全兼容。

官方推荐使用HAL库,而且STM32F7等新版本芯片不再支持标准库。初学者通过标准库了解寄存器配置后,就可以转到HAL库,或者直接学习HAL库也可以。

2、标准库和HAL库代码对比

2.1 工程结构对比

HAL库使用STM32xx_HAL_Driver库,库文件以stm32f1xx_hal开头,标准库文件以stm32f10x_开头。从文件名字HAL库f1xx和标准库f10x也能看出HAL更抽象,适应的芯片系列更大。

2.2 主函数对比

GPIO操作比较简单,主流程相差不大,需要说明的是HAL将系统时钟单独配置,也能体会到HAL对硬件的抽象操作。HAL定义了延时函数,不用再像标准库,还需要自己实现。

2.3 GPIO配置

标准库使用RCC_APB2PeriphClockCmd来使能GPIOB的时钟,为什么不使用RCC_APB1PeriphClockCmd呢?因为GPIOB挂在在APB2上,这就需要查手册才能知道。

而HAL使用__HAL_RCC_GPIOB_CLK_ENABLE来直接使能GPIOB的时钟,不用查手册,直接调用库函数,省事儿还不容易出错。对应的,有禁止GPIOB的时钟函数__HAL_RCC_GPIOB_CLK_DISABLE;

引脚配置和初始化大致相同。

2.4 GPIO操作

HAL操作GPIO的接口有读HAL_GPIO_ReadPin、写 HAL_GPIO_WritePin、反转HAL_GPIO_TogglePin等封装好的函数。

而标准库还需要操作寄存器来实现,

2.5 串口配置

再来比对一个串口配置的代码,左侧是HAL库,右则是标准库。
HAL配置串口时,将工作参数(例如波特率、停止位等)和硬件相关的(如时钟、引脚复用等)分开设置。
将硬件相关的分出来,如果以后需要硬件或更换芯片,只需修改这部分代码即可,这就是便于代码的移植。

注意:HAL库的使用有个规则,HAL_UART_Init 中会调用 HAL_UART_MspInit,类似的,其他外设也有HAL_xxx_Init会调用HAL_xxx_MspInit。
重新实现 HAL_xxx_MspInit 函数即可适应不同的硬件,就像C++函数重载,有点面向对象的意思了吧。

【STM32】入门(九):HAL库学习相关推荐

  1. STM32 之九 HAL 库串口(USART/UART)驱动 BUG 及解决方法

    写在前面   在工作中,部分产品使用了ST最新的 HAL驱动库,发现 HAL 库 BUG 还是挺多的!本文重点针对在使用HAL库的 UART / USART 部分时,发现的以下几个个比较严重Bug.其 ...

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

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

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

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

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

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

  5. STM32如何配置HAL库

    STM32如何配置HAL库 前言   相比较早几年使用标准库开发来讲,最近几年HAL库的使用是越来越多,那么我们开发应当使用哪一种呢,本文着重介绍常用的几种开发方式及相互之间的区别,白猫也好.黑猫也好 ...

  6. STM32CubeMX与HAL库学习--简单的CAN回环测试

    STM32CubeMX与HAL库学习--简单的CAN回环测试 前言 STM32CubeMX生成初始化代码 在MDK-ARM里编辑代码 其他 后续 前言 本人小白,最近看了CAN协议与STM32的bxC ...

  7. 【STM32】CubeMX+HAL库之 硬件IIC+DMA控制OLED(兼容SSD1306SH1106驱动)

    [STM32]CubeMX+HAL库之 硬件IIC+DMA控制1.3寸OLED 前言 目前网上大多数驱动OLED屏都采用软件IIC,因为HAL库的升级使得硬件IIC的稳定性得到了保障,所以想采用硬件I ...

  8. 【STM32笔记】HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒、串口唤醒和回调无法一起使用、接收数据不全的问题)

    [STM32笔记]HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒.串口唤醒和回调无法一起使用.接收数据不全的问题) [STM32笔记]低功耗模式配置及避坑汇总 前文: blog.csd ...

  9. 【STM32笔记】HAL库低功耗模式配置(ADC唤醒无法使用、低功耗模式无法烧录解决方案)

    [STM32笔记]HAL库低功耗模式配置(ADC唤醒无法使用.低功耗模式无法烧录解决方案) [STM32笔记]低功耗模式配置及避坑汇总 一.低功耗模式简介 系统提供了多个低功耗模式,可在 CPU 不需 ...

  10. STM32CubeMX | STM32 F1系列HAL库低功耗STOP和STANDBY模式唤醒(RTC时钟唤醒+外部中断唤醒示例)

    STM32CubeMX | STM32 F1系列HAL库低功耗STOP和STANDBY模式唤醒(RTC时钟唤醒+外部中断唤醒示例) 目录 STM32CubeMX | STM32 F1系列HAL库低功耗 ...

最新文章

  1. 分布式 java 应用:基础与实践_西研技术大讲堂第二期FRCS应用情况介绍及分布式技术平台能力应用实践...
  2. 答应我!别再写上千行的类了,好吗?
  3. c#打包mysql配置文件_C#打包SQL数据库部署安装(转)
  4. CAS (1) —— Mac下配置CAS到Tomcat(服务端)(转)
  5. NSRange的用法【转】
  6. linux bc命令全称,Linux bc 命令
  7. PropertyGrid中的枚举显示为中文(转)
  8. “开发者有奖大调查”第二批中奖名单公布,还有更多好礼等你来拿~
  9. 软件质量保证与测试期末复习整理
  10. Android 开发即时聊天工具 YQ :(一) Socket 初步
  11. Qt:局域网文件同步工具
  12. PDF文档怎么修改内容,怎么把PDF文件拆分
  13. 华为最终面试java_最全的华为面试题-java学习
  14. php转java学什么书,推荐给java软件工程师以及从java转向php程序猿的一本好书
  15. ubuntu系统上安virtualbox虚拟机装win10一路踩坑
  16. Internet History, Technology and Security (Week⑨)
  17. 苹果x屏幕出现一条绿线_iPhone X 屏幕维修怎么防止被坑?各种屏幕的介绍
  18. 分享一个盟重英雄的辅助脚本工具
  19. macosx10.13运行go报dyld: Symbol not found: _SecTrustEvaluateWithError错误的解决办法
  20. C++注释的几种方法

热门文章

  1. C++调试器:CMAKE项目利用gbc进行调试
  2. 解决IDEA传统web项目打war包找不到class的问题
  3. 案例3:Java汽车保养维修系统设计与实现开题报告
  4. HTML5系列代码:播放快进
  5. 吃饭是件容易的事,但能吃好的人极为稀少
  6. 辅助图形设计——“中海·左岸岚庭”地产项目教学设计
  7. 【RPA之家转载】RPA财务机器人在常见的财务流程中如何工作?
  8. AD16过孔焊盘反白打印修改方法
  9. 高逼格Android转场动画
  10. 什么是面向过程编程?什么是面向对象编程?