[STM32G4] STM32的HAL库知识总结

[复制链接]
88|16
CallReceiver 发表于 2025-11-22 20:25 | 显示全部楼层 |阅读模式
STM32HAL库的几个点:
1.最大可移植性。2.提供了一整套一致的中间件组件,如RTOS,USB,TCP / IP和图形等。3.通用的用户友好的API函数接口。4.ST新出的芯片已经没有标准库。5.HAL库已经支持STM32全线产品。    网友认为,“HAL我觉得是极好的,就是SPI接收时速度实在太慢,不用DMA的话,吃不消。“    通常在入门STM32的时候,一般大多数都会选用标准库和HAL库,而极少部分人会通过直接配置寄存器进行开发。网上关于标准库、HAL库的描述相信是数不胜数。可是一个对于很多刚入门的朋友还是没法很直观的去真正了解这些不同开发方式彼此之间的区别,所以笔者想以一种非常直白的方式,用自己的理解去将这些东西表述出来,如果有描述的不对的地方或者是不同意见的也可以大家提出。直接配置寄存器    不少先学了51的朋友可能会知道,会有一小部分人或是教程是通过汇编语言直接操作寄存器实现功能的,这种方法到了STM32就变得不太容易行得通了,因为STM32的寄存器数量是51单片机的十数倍,如此多的寄存器根本无法全部**,开发时需要经常的翻查芯片的数据手册,此时直接操作寄存器就变得非常的费力了。但还是会有很小一部分人,喜欢去直接操作寄存器,因为这样更接近原理,知其然也知其所以然。02、标准库    上面也提到了,STM32有非常多的寄存器,而导致了开发困难,所以为此ST公司就为每款芯片都编写了一份库文件,也就是工程文件里stm32F1xx…之类的。在这些 .c .h文件中,包括一些常用量的宏定义,把一些外设也通过结构体变量封装起来,如GPIO口时钟等。所以我们只需要配置结构体变量成员就可以修改外设的配置寄存器,从而选择不同的功能。也是目前最多人使用的方式,也是学习STM32接触最多的一种开发方式,我也就不多阐述了。03、HAL库    HAL库是ST公司目前主力推的开发方式,全称就是Hardware Abstraction Layer(抽象印象层)。库如其名,很抽象,一眼看上去不太容易知道他的作用是什么。它的出现比标准库要晚,但其实和标准库一样,都是为了节省程序开发的时期,而且HAL库尤其的有效,如果说标准库把实现功能需要配置的寄存器集成了,那么HAL库的一些函数甚至可以做到某些特定功能的集成。也就是说,同样的功能,标准库可能要用几句话,HAL库只需用一句话就够了。并且HAL库也很好的解决了程序移植的问题,不同型号的stm32芯片它的标准库是不一样的,例如在F4上开发的程序移植到F3上是不能通用的,而使用HAL库,只要使用的是相通的外设,程序基本可以完全复制粘贴,注意是相通外设,意思也就是不能无中生有,例如F7比F3要多几个定时器,不能明明没有这个定时器却非要配置,但其实这种情况不多,绝大多数都可以直接复制粘贴。是而且使用ST公司研发的STMcube软件,可以通过图形化的配置功能,直接生成整个使用HAL库的工程文件,可以说是方便至极,但是方便的同时也造成了它执行效率的低下,在各种论坛帖子真的是被吐槽的数不胜数。
androidbus 发表于 2025-11-22 20:32 | 显示全部楼层
STM32的开发中,我们可以操作寄存器
litengg 发表于 2025-11-22 20:33 | 显示全部楼层
GPIOF->BSRR=0x00000001;//这里是针对STM32F1系列
qiangweii 发表于 2025-11-22 20:36 | 显示全部楼层
官方 HAL 库封装了一个函数:voidHAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin,GPIO_PinStatePinState)
shashaa 发表于 2025-11-22 20:37 | 显示全部楼层
你只需要知道怎么使用HAL_GPIO_WritePin这个函数就可以了。
xia00 发表于 2025-11-22 20:40 | 显示全部楼层
标准固件库和HAL库一样都是固件库函数,由ST官方硬件抽象层而设计的软件函数包,由程序、数据结构和宏组成
hfdy01 发表于 2025-11-22 20:42 | 显示全部楼层
在ST的官方声明中,HAL库是大势所趋。
boy1990 发表于 2025-11-22 20:46 | 显示全部楼层
这个工程项目和初始化代码里面使用的库都是基于HAL库。。。。
sourceInsight 发表于 2025-11-22 20:46 | 显示全部楼层
对时钟系统进行配置,对引脚及基本功能进行配置。
bbapple 发表于 2025-11-22 20:50 | 显示全部楼层
我们需要怎样的时钟系统,而不是如何配置时钟系统。
handleMessage 发表于 2025-11-22 20:51 | 显示全部楼层
可以配置SWD程序烧录接口,使用ST-Link进行烧录下载。
zhouhuanの 发表于 2025-11-22 20:54 | 显示全部楼层
我想如果你已经安装了编译环境MDK了,可点击直接打开工程。
Listate 发表于 2025-11-22 20:55 | 显示全部楼层
开发环境搭建好以后,可以依开始STM32的开发,让LED灯每隔400ms闪烁一次
_gege 发表于 2025-11-22 20:59 | 显示全部楼层
延时电平翻转函数,这样LED灯就能开始闪烁。  
Edisons 发表于 2025-11-22 21:02 | 显示全部楼层
可以直接选择最新版。但如果觉得最新版太大,可以阅读下面的Main Changes.能够支持你目前的芯片就好。
laozhongyi 发表于 2025-11-22 21:03 | 显示全部楼层
HAL 库通过分层的架构设计,将硬件相关的代码和用户应用程序代码分离。
wanglaojii 发表于 2025-11-22 21:06 | 显示全部楼层
相比传统的寄存器操作方式,HAL 库提供了一系列的函数来操作硬件吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

67

主题

1709

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部