今天来讲一讲STM32入门的知识,也可能是很多新手一直没搞懂的:STM32的各种库.
并且针对我最熟悉的标准库进行一个详解。
一、STM32的4种库
1. STM32Snippets
2.Standard Peripheral Library
3.STM32Cube LL
4.STM32Cube HAL
1. STM32Snippets
就是类似于51单片机这样,直接通过配置寄存器来使用STM32单片机的外设,优点是编译出来的代码最节省内存,缺点就是开发起来周期会很长很长,一把很少人会通过这种方式去做产品开发,除非闲的蛋疼,或者产品要求很很很很苛刻...
2.Standard Peripheral Library(SPL)
这个也称为标准库开发,这个库帮你封装了外设寄存器配置,只需要做个调库侠就能轻松地把STM32各种外设用起来,也是无际一直以来的开发方式。
相对于寄存器开发,这种效率更高,移植性也更强。
缺点是ST为了推他们的STM32CubeMX,对于新推出的芯片停止了对SPL的更新!!!
标准库下载地址:
https://www.st.com/en/embedded-software/stm32-standard-peripheral-libraries.html
3.STM32Cube LL和STM32Cube HAL
LL:Low-Layer,底层库
HAL:Hardware Abstraction Layer硬件抽象层库
STM32Cube HAL 和 LL配合STM32CubeMX软件开发STM32也是目前ST主推的一种开发方式。
下载地址:
https://www.st.com/en/development-tools/stm32cubemx.html
我之前是被STM32Cube这个工具坑过一次,没配置好,导致桌面文件无缘无故被cube删除,气得我咬牙切齿,有种流氓软件的感觉,所以到现在我对cube都没一点好感,也用不习惯,后续有必要再去研究。
下面是4种库的对比。
可以看的出来,为什么还有这么多人选择用标准库开发了吧?因为标准库在可移植性和优化这块比较折中。
hal和LL要么牺牲可移植性节约内存,要么牺牲了内存提升可移植性。
二、Standard Peripheral Library文件架构
Ok,下面我来讲下自己一直在用的标准库,来挖一挖他们的文件架构以及需要加入到keil工程里的文件。
1.标准库文件夹结构
Libraries:重点关注,固件库内核和外设驱动文件。
Project:外设例程和各开发环境下的工程例程,实际开发只需要用到几个文件。
其他几个不用关心,高效学习的第一步就是懂得舍弃,而不是吃透。
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里面就是这个样子。
布局好文件结构以后,记得在keil工具里加载路径哦~