凡亿教育-香香
凡事用心,一起进步
打开APP
公司名片
凡亿专栏 | STM32入门各种库对比和标准库文件结构详解
STM32入门各种库对比和标准库文件结构详解

今天来讲一讲STM32入门的知识,也可能是很多新手一直没搞懂的:STM32的各种库.


并且针对我最熟悉的标准库进行一个详解。


一、STM32的4种库

1. STM32Snippets 

2.Standard Peripheral Library

3.STM32Cube LL

4.STM32Cube HAL

 

1. STM32Snippets

ea2d6adc167e283e422212af0eeb6a.jpg


就是类似于51单片机这样,直接通过配置寄存器来使用STM32单片机的外设,优点是编译出来的代码最节省内存,缺点就是开发起来周期会很长很长,一把很少人会通过这种方式去做产品开发,除非闲的蛋疼,或者产品要求很很很很苛刻...

 

2.Standard Peripheral Library(SPL)

4de501f2147bbfe05407dbb5fe0e95.jpg


这个也称为标准库开发,这个库帮你封装了外设寄存器配置,只需要做个调库侠就能轻松地把STM32各种外设用起来,也是无际一直以来的开发方式。

 

相对于寄存器开发,这种效率更高,移植性也更强。

 

缺点是ST为了推他们的STM32CubeMX,对于新推出的芯片停止了对SPL的更新!!!

 

标准库下载地址:

https://www.st.com/en/embedded-software/stm32-standard-peripheral-libraries.html



3.STM32Cube LL和STM32Cube HAL

63e17b1db572bd17b3c27ff367efd6.jpg

LL:Low-Layer,底层库


c93b91f4646e7c04e882f53cd36402.jpg

HAL:Hardware Abstraction Layer硬件抽象层库


STM32Cube HAL 和 LL配合STM32CubeMX软件开发STM32也是目前ST主推的一种开发方式。


下载地址:

https://www.st.com/en/development-tools/stm32cubemx.html

 

我之前是被STM32Cube这个工具坑过一次,没配置好,导致桌面文件无缘无故被cube删除,气得我咬牙切齿,有种流氓软件的感觉,所以到现在我对cube都没一点好感,也用不习惯,后续有必要再去研究。

 

下面是4种库的对比。


29db596234bfcd985d3ec25a4c9f5c.jpg


可以看的出来,为什么还有这么多人选择用标准库开发了吧?因为标准库在可移植性和优化这块比较折中。

 

hal和LL要么牺牲可移植性节约内存,要么牺牲了内存提升可移植性。

 

二、Standard Peripheral Library文件架构

Ok,下面我来讲下自己一直在用的标准库,来挖一挖他们的文件架构以及需要加入到keil工程里的文件。


1.标准库文件夹结构

6a973b2d36f517c39de46b88de2143.jpg

Libraries:重点关注,固件库内核和外设驱动文件。

Project:外设例程和各开发环境下的工程例程,实际开发只需要用到几个文件。

其他几个不用关心,高效学习的第一步就是懂得舍弃,而不是吃透。



95b7bbc14b187d0f4873e0017e4412.jpg

Libraries\CMSIS

内核文件,比如说时钟配置文件、外设寄存器地址映射等。

 

Libraries\STM32F10x_StdPeriph_Driver

标准外设驱动文件,比如说GPIO配置、TIME配置、USART配置、IIC配置、SPI配置、DMA配置等等。

 

2.需要加入工程的文件

2.1 启动文件startup_stm32f10x_md.s

文件路径:

Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm


几种启动文件的区别:

startup_stm32f10x_ld.s:小容量,Flash容量在16-32K之间

startup_stm32f10x_md.s:中容量,Flash容量在64-128K之间

startup_stm32f10x_hd.s:大容量,Flash容量在256-512K之间

startup_stm32f10x_xl.s:超大容量,Flash容量在512-1024K之间

 

启动文件作用:设置堆栈指针,大小,设置PC指针,初始化中断向量、配置系统时钟,全部配置完后调用main函数。


2.2 时钟配置文件

System_stm32f10x.c用来配置系统时钟源

文件路径:

Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x

 

2.3 外设头文件

stm32f10x.h:实现了周边外设寄存器地址映射和外设结构体定义,比如说GPIO、TIME、USART、I2C、SPI、DMA、CAN、FSMC等等。

文件路径:

Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x

 

2.4 内核文件

Cortex内核微控制器软件接口标准

Core_cm3.h:实现属于内核外设的寄存器映射

Core_cm3.c:实现内核一些访问,比如说堆栈指针,中断控制等,把汇编封装成方便调用的C函数,实际用的比较少。

文件路径:

Libraries\CMSIS\CM3\CoreSupport



 

2.5 NVIC(嵌套向量中断控制器)、Systick(系统滴答定时器)

Misc.c

Misc.h

文件路径:

Libraries\STM32F10x_StdPeriph_Driver\src

Libraries\STM32F10x_StdPeriph_Driver\inc

 

2.6 外设加载头文件

stm32f10x_conf.h

在这个文件里开启产品需要的外设头文件,直接把#include注释去掉就是开启。

文件路径

STM32F10x_StdPeriph_Template\stm32f10x_conf.h

 

2.7 外设的中断回调函数文件

Stm32f10x_it.c

Stm32f10x_it.h

统一定义STM32外设中断处理函数,中断回调函数也可以放在任意.c文件里,只要名字跟启动文件里面的定义相同就行了。

文件路径

STM32F10x_StdPeriph_Template\


最后移植到keil里面就是这个样子。

465b720628d766b40117e430f470af.jpg

布局好文件结构以后,记得在keil工具里加载路径哦~

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论