STM32四种库对比:寄存器、标准外设库、HAL、LL-51 ' D2 M0 \% A, H- ~; `% I4 F
% o) g% {* o- {3 ?% M' Z% k. r1.我是选择寄存器开发STM32,还是标准外设库呢?- O5 O& p1 L) ?1 Y* O+ M( t
2.你有STM32L0标准外设库吗?
$ O6 i- ?8 t4 I1 G v {& O+ }) X: `3.HAL库和LL库有什么差异?" i5 [% V# E+ w6 B+ A
。。。
* r/ [$ G1 ~) @7 m$ B4 x1 ]% Q6 W* ?* o3 U4 f$ }
. K% b# N7 R, A, h3 t2 _下面就来讲讲开发STM32的四种库:
% l$ s) Y8 x0 p6 Y1 HSTM32Snippets
7 F9 S' U1 Q/ p3 ~Standard Peripheral Library
( i0 S3 O# X# q; DSTM32Cube LL1 c8 n0 H, S3 U
STM32Cube HAL @: d. k7 l8 B5 X
9 j/ ]4 Y' _( q# g, F, C3 D" h" N' o) ]* W0 n' M$ ^! E* Y9 m
1STM32Snippets; e: U" v2 M# f4 o) q9 P
什么是STM32Snippets?
! b% z6 `" {' H1 T( B+ m- \: t3 \! S# ^/ ?' a9 o: Z8 A- a
STM32Snippets可翻译为“代码片段”、“裁剪”,其实他就是我们常说的“寄存器”开发STM32的底层驱动代码。$ l; ~" R& z9 K
: W$ j5 u0 ^+ l+ J3 j4 Q
比如配置ADC引脚的代码片段:2 [: o6 r& [ O4 t
- __INLINE void ConfigureGPIOforADC(void)
8 |0 h" P e$ @: a3 n ^! e - {0 @+ v* V% S5 y
- /* (1) Enable the peripheral clock of GPIOA, GPIOB and GPIOC */
( }; e: l* y/ X! J) p" |9 j - /* (2) Select analog mode for PA1 */
! B1 S9 Y( T# U, O - /* (3) Select analog mode for PB1 */+ ~* J a" [1 R) I0 B
- /* (4) Select analog mode for PC0 */
6 R: |' ]( _2 Y% E& {, i0 l - RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOCEN; /* (1) */2 Y3 F: \2 ]8 G
- GPIOA->MODER |= GPIO_MODER_MODER1; /* (2) */0 R: q8 `; ~8 ^% i* a1 c& ?1 T0 }
- GPIOB->MODER |= GPIO_MODER_MODER1; /* (3) */
- A, V# n! b3 F - GPIOC->MODER |= GPIO_MODER_MODER0; /* (4) */ - u) A5 z& v' u0 Y {6 v8 O5 E( K
- }
复制代码 STM32Snippets是高度优化的示例代码集合,使用符合CMSIS的直接寄存器访问来减少代码开销,从而在各种应用程序中最大化STM32 MCUs的性能。9 b, S% ]1 U, w) [. r7 G# k* o
) ^4 t, u6 \5 i# Z3 v' R% `
7 e+ ?2 C; G; r8 T' w0 wSTM32Snippets主要针对底层开发人员,或者从51转过来,直接操作寄存器开发的人员。 是没有经过封装,可见底层寄存器的一套示例代码。7 Q# R" i# g! Y+ n+ W
/ y; w5 H$ U; N. w+ C- ~' `8 G
每个STM32系列的100多个片段演示了如何以最小的内存占用有效地使用STM32外围设备。
4 V' P' Z& I9 T% f" m) @
1 F5 |* l: Q9 K$ H+ q' F
. A/ }) M% V- m" E0 N' J+ F8 g地址:. r' H W5 ]& l# ]
https://www.st.com/en/embedded-software/stm32snippets.html
. u% Q8 g( c( G7 v: j# K(公号不支持外链接,请复制链接到浏览器打开)
3 o: j5 U0 r" G* \8 r6 HSTM32Snippets目前官方只提供:STM32F0和L0的示例代码包。
7 H A/ h% c; T- S) k( x- p提供的示例代码有点类似标准外设库风格,给大家看下F0的代码包:
v' V5 K3 E8 a: C: L) f* O( g* P6 l# G
同样也提供Keil MDK、 IAR EWARM的工程。
, V. Z; @- t. C9 `/ l+ q
@' X0 |! c' o& ]/ S
. v, z5 R! H. i2Standard Peripheral Library
8 C+ y* _$ J( z) f; ^Standard Peripheral Library:简写SPL,也叫标准外设库。
8 V6 I- c& p9 x# }- D
/ C3 ]$ _4 c) N( T! t# _5 |相信学习过STM32的朋友,对标准外设库都不陌生,是一组外围设备的C语言代码集合。(因为现在ST官方主推STM32CubeMX,所以停止了对SPL的更新)3 K% R% z1 i; O! x0 x' w: J
5 b/ {4 z% H0 g- x6 C+ @
7 r% U5 z/ C* _& Z/ {标准外设库是在寄存器的基础上进行了一次简单封装,主要是面向过程的嵌入式系统开发人员。9 l3 R- i0 J! c% N* R
- m7 s( U7 J( w3 p+ `
# X9 Z0 T- S+ T1 V( F
地址:
$ i' T* ~1 b. D+ _! C3 W7 D4 {https://www.st.com/en/embedded-software/stm32-standard-peripheral-libraries.html
3 y( Q$ y! V5 o目前标准外设库支持STM32F0、 F1、 F2、 F3、 F4、 L1, 不支持F7、 H7、 MP1、L0、 L4、 L5、 G0、G4等后面推出的系列。; R( m+ M% _' p) O" U) H- D, c
3 p2 R+ O# b) x' w! A所以,不要再问:在哪里下载L0的标准外设库了。3 K: E0 @* v6 z! N
; p3 K! {3 A" H$ l6 @! n* V" L3 O; U: [) |; `: s
3STM32Cube LL 和 HAL
' _! O& `7 X& j0 U9 WLL:Low-Layer,底层库8 ] w l1 h. C! h
, J; m4 Z$ C Y2 X, r8 n
6 m/ [1 U, U8 f) |# BHAL:Hardware Abstraction Layer,硬件抽象层库, }! i7 v+ P+ S6 b
* H9 u$ _% b# v3 ?1 M8 v* qSTM32Cube HAL 和 LL配合STM32CubeMX工具对STM32进行开发。也是目前ST官方主推的一套开发STM32的库。
& H k a8 A m7 C* k i3 u3 s" U) T" M: _
HAL针对的是具有一定嵌入式基础的开发人员,HAL具有很好的移植性。& Y5 M0 n1 o8 @- k
, U* g% H' G. D+ Z5 ^LL库相对HAL,具有简单的结构,针对之前从事SPL(标准外设库),或寄存器开发的人员。
7 E6 R; z T p8 k v
& g7 T) ], J- D1 t$ `% Y地址:
7 a) y$ w8 X+ ^5 o3 k( Mhttps://www.st.com/en/development-tools/stm32cubemx.html
. w: P$ {5 v9 w6 E% OSTM32Cube HAL 和 LL是目前官方主推,并重点维护和更新的库,也建议大家都学习一下。而且新出来的型号(如L5、G4等系列)没有标准外设库,只有STM32Cube HAL 和 LL库了。- `1 O4 W+ B3 k: g$ V" z% j( W
4 ~ ^9 J) @* M; _2 s) p, B5 y" ~$ U4 X5 u. v6 K
4四种库对比- [8 ]! _1 B9 Z' [
来自官方的对比信息,包含可移植性、优化、难易程度等。
& x2 x# E' F! {0 y5 R其中:9 @7 S- T5 ]" b+ t, }' {
/ J+ C. q/ p- o/ V
0 { T3 ^( t U* w/ yPortability:可移植性
; U/ |; M4 P7 H K# {Optimization :优化0 e# r2 `9 O. _# _, V0 L
Easy:难易程度* i; z+ b' A2 O4 x( j7 _8 G
Hardware coverage:硬件覆盖
( L8 e7 {4 G5 q) E+ X) }! e F1 Y0 ] p; z( F$ C7 Y) @: e; l/ O
定位:* O- n. R5 L4 X1 g+ d
支持器件:
! c# C( R- }# p7 m8 K最近新增了STM32Cube MP1,官方没有统计上。
, t3 D8 I2 `4 `/ q* K
l9 C# N9 \( o8 [库之间的转移:( c3 s1 Z; G, Z" J+ R0 z
本文就到这里,希望以上内容对你有所帮助!2 y0 ^% ]. T7 B! f( N
+ I8 ^4 e0 k* p( @7 `
# ~! i K+ f& J' G$ C8 o {0 `0 H* f2 Y/ `) Q! c0 n# Y* K
) ^! L/ ^9 T4 n7 ]+ p: p: ?
( }8 D/ K; r6 a) T" f |