【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. springmvc常用注解标签详解
  2. 功能超级丰富的彩色贪吃蛇,有道具,有等级!
  3. 数组常见异常 学习笔记
  4. php对接亿乐社区,亿乐社区对接教程
  5. BPSK_QPSK_16QAM _64QAM _MATLAB
  6. 办公技巧:分享100个Excel快捷键,值得收藏!
  7. 配置案例|Modbus转Profinet网关连接英威腾Goodrive200A 的配置案例
  8. 这可能是最简单易懂的机器学习入门(小白必读)
  9. display:weston:desktop xdg-shell
  10. Java代码计算2019新个税
  11. ImageMagick-libs安装报错
  12. 编程实现计算n!,键盘输入n
  13. Deep_Learn关于数组和数的操作
  14. android 忘记密码代码,Android-忘记签名文件的密码怎么办
  15. python 第三方插件登陆——QQ
  16. 计算机异常断电后无法启动,电脑突然断电,详细教您电脑突然断电后开不了机怎么办...
  17. 基于C#弹幕类射击游戏的实现——(十)整合
  18. Unregistere
  19. 记一次息屏指纹解锁性能优化实现
  20. Deep Learning based Recommender System:A Survey and New Perspectives

热门文章

  1. 平庸女孩为什么能抓住帅哥的心?
  2. SuperMap三维专题之倾斜摄影——倾斜摄影数据优化篇
  3. MySQL修改最大连接数限制
  4. 头条号如何获得收益、怎样获得收益?
  5. 服务器和桌面区别,有问有答:桌面级处理器和服务器处理器的区别是什么?
  6. js总结(10)js获取当前域名、Url、相对路径和参数以及指定参数
  7. 电路计算机为什么要规定方向,为什么要在电路图规定电流的参考方向,实际方向有什么关系与...
  8. JavaScript replace用法全解
  9. 如何注册一个网站域名呢?
  10. win7上搭建docker环境