完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32 HAL库与STD库
因为本教程采用STM32F4XX系列芯片,因此所有比较均基于此款芯片,但与其他STM32系列差别不大,可作为参考。 STD库即标准库,STM32F4xx系列芯片标准库全称STSW-STM32065,提供全覆盖的寄存器地址映射及声明,提供通用API(Application Programming Interface),采用‘Strict ANSI-C’标准编写。使用STD标准库能够在更接近硬件的层次上实现更灵活的程序设计,得到更高的效率。 HAL(Hardware AbstractionLayer),即硬件抽象层,如图1所示。其位于操作系统内核与硬件电路之间,目的在于将硬件抽象化。它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。在Linux等操作系统中,经常能够见到HAL层。想必意法半导体推出HAL库的目的,也是为了进一步提高程序的可移植性,降低芯片的使用难度。 图1 硬件抽象层示意图 可以从可移植性、易用性、灵活性、效率这四个方面来衡量两个库之间的差异:
STD库在移植的时候要更多的考虑芯片之间上下兼容的问题。针对不同的芯片需要手动修改部分代码,需要对芯片之间的差异有一定了解。
STD需要自己进行一些手动的配置,知道芯片上电后的基本设置。在入门时期来看,HAL库更有利于上手,能够较快的体验到成功感,但是从后期进一步深入学习来看,STD库能对细节的把握更加透彻。
基于ARM GUN工具链的HAL库配置 在【002】搭建开源嵌入式集成开发环境一文中,我们已经搭建好基于ARM GNU工具链的嵌入式开发环境。让我们再来仔细看一下创建的工程结构,如图2所示。stm32f4-hal文件已经存在于工程之中,位于Example->system->src->stm32f4-hal。 图2 STM32工程结构 展开stm32f4-hal文件夹如图3所示。可以看到原工程为了减少占用空间仅添加了基本的.c文件至hal文件夹,而我们需要做的就是去STM32的官方网站下载完整的stm32f4-hal库并添加在工程中的stm32f4-hal文件夹内即可。 图3 stm32f4-hal文件夹内部结构 基于ARM GUN工具链的STD库配置 STD库配置相比HAL库较为复杂,首先需要删除无用的文件及文件夹。整理完之后的工程结构如图4所示。 图4 STD库工程结构 与图3相比,主要是移除了与Hal库有关或者与STD库重复的文件。解压下载的官方STD库得到如图5所示文件夹。这里我们将STD库即STM32F4xx_StdPeriph_Driver文件夹复制到工程DEVICE文件夹中,除了STD库该文件夹下还有三个文件分别是startup_stm32f429_439xx.S(启动文件,注意S需要大写)、stm32f4xx_it.c(中断文件)、system_stm32f4xx.c(系统配置文件)。这三个文件分别来自: STM32F4xx_DSP_StdPeriph_Lib_V1.8.0LibrariesCMSISDeviceSTSTM32F4xxSourceTemplatesTrueSTUDIOstartup_stm32f429_439xx.s STM32F4xx_DSP_StdPeriph_Lib_V1.8.0LibrariesCMSISDeviceSTSTM32F4xxSourceTemplatessystem_stm32f4xx.c STM32F4xx_DSP_StdPeriph_Lib_V1.8.0ProjectSTM32F4xx_StdPeriph_Templatesstm32f4xx_it.c 图5 STM32F4xx标准库 在工程文件夹ldscripts添加STM32F439NI_FLASH.ld文件,来自: STM32F4xx_DSP_StdPeriph_Lib_V1.8.0ProjectSTM32F4xx_StdPeriph_TemplatesTrueSTUDIOSTM32F429_439xxSTM32F439NI_FLASH.ld 右击工程打开属性,这里我们需要设置预定义的宏,添加include路径,按图6、图7所示为汇编编译器添加宏定义以及路径信息。 图6 配置编译器宏定义 图7 配置编译器include路径信息 之后为C编译器和C++编译器添加相同的信息。更改连接器信息,添加STM32F439NI_FLASH.ld脚本文件如图8所示。 图8 配置编译其连接脚本 到此,STM32的标准库配置完成,可以点击Build按钮进行验证。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1780 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1081 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1679 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
596浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
556浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 21:47 , Processed in 0.655392 second(s), Total 45, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号