你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32F4xx固件库分析

[复制链接]
STMCU小助手 发布时间:2021-12-7 11:00
STM32F4xx固件库4 W+ W+ ^7 [) L6 {4 X* S/ i5 q
ST公司提供的标准软件库,包含了STM32芯片所有寄存器的控制操作,我们直接学习如何使用ST标准库即可,极大的方便了快速开发。
! V4 E+ C1 Q+ k& Y; r& Y$ E" s+ @' ^' H0 o- g* Y6 T
固件库文件结构: e0 u: T  _! h" a* A
固件库的文件结构,清晰的表达了固件库文件的关联关系,值得认真看一看:0 |8 A& [3 v5 {" u( S

: U1 O2 l) x: _
20190817144953542.png

) F! Z+ g3 f. D7 m, G( s$ K9 E2 u+ i
% a( v9 ], u$ |+ y! i3 H4 iCMSIS标准与库的关系! A9 g6 m& G* A6 `5 s- f
分析固件库之前要了解一下CMSIS是什么,与固件库有什么关系。
. {8 L) i# z4 b: }  M7 p7 s* P* m  O4 Q5 B8 g0 C
基于Cortex系列芯片采用的内核都是相同的,区别主要为核外的片上外设的差异,这些差异却导致软件在同内核,不同外设的芯片上移植困难。为了解决不同的芯片厂商生产的Cortex微控制器软件的兼容性问题,ARM与芯片厂商建立了CMSIS标准(Cortex MicroController Software Interface Standard) – Cortex微控制器软件接口标准
% u0 A7 A( a- K0 j# Y/ @
$ ]$ P# R3 M7 p3 g" N7 b  q从描述中可以看出,CMSIS就是一个软件抽象层,屏蔽相同内核不同外设芯片的差异,用来解决程序的移植性、兼容性问题。如下:
; G9 f( e3 F* N: M1 Q  a
20190817143954344.png
9 m; U  ^( L9 s: S

( y# X3 d, D! v# Z& s, jCMSIS是与内核相关的,任何基于这些内核生产的芯片想要编写程序都需要其内核的相关支持;固件库也是必须基于CMSIS开发的。
' o" V" L9 X5 i2 M/ B; m+ o& t: \
: l* c( ^# M9 Y' A; |注 意 : 注意:注意:内核的函数由ARM公司提供,主要是一些内核寄存器的名称、地址定义等;而核外的外设函数则由芯片厂商提供,包括核外外设地址和中断定义等。
) x! H' Q1 d' R
6 }2 ?0 W6 V8 o; k+ Q6 A. E( rCMSIS层位于硬件层与操作系统或用户层之间,提供了与芯片生产商无关的硬件抽象层,可以为接口外设、实时操作系统提供简单的处理器软件接口,屏蔽了硬件差异,这对软件的移植是有极大的好处的/ A& t/ v9 m6 N4 ]* i$ {
4 U' Y6 m8 o) f3 e. p# T7 `
STM32F4xx_DSP_StdPeriph_Lib_V1.4.0 实际文件分析
9 X0 u# a( y5 _5 w. h- k本次使用的是V1.4.0版本固件库。如下:5 k1 @* @# ~3 I. V- c( O8 \3 ^

. Y9 Y5 p. `  C3 L% }1 f
20190817144902913.png
( {  R0 G7 J& b, u' z4 {6 ^, c' e9 Y
: S4 L. [% @5 c7 H% R( }
从上图可以看出,固件库中重要的文件夹是Libraries和Project两个,下面也只分析这两个文件夹。
7 g5 d2 L3 C. `9 _1 D5 D+ Z. `
Libraries
; \( J: h1 I/ p% H. BLibraries文件夹中有两个文件:CMSIS和STM32F4xx_StdPeriph_Driver,先看CMSIS:( G. a, A9 w3 Z  \( ^6 e: D
+ r  Q$ ^" ]: D: Z
20190817145425873.png
* z6 r4 r# B+ j7 h  d( t9 I

+ i" U" l# |) R# n0 ?% {, d) X3 \* e1 m) y1 |   Device文件夹:该文件夹下的是具体芯片直接相关的文件,包含启动文件、芯片外设寄存器定义、系统时钟初始化功能的一些文件,这是由ST公司提供的。
2 j  m, C  M" L; I) u/ ]; [( u5 i" j( e0 z5 W" d* W
20190817145504113.png

0 D* p- r( {9 {$ C( f6 d* o0 z/ ~! g
stm32f4xx.h和system_stm32f4xx.c文件4 X+ y- O5 h( g; Q" G! {
  stm32f4xx.h 这个文件非常重要,是一个STM32芯片底层相关的文件;包含了STM32中所有的外设寄存器地址和结构体类型定义,在使用到STM32标准库的地方都要包含这个头文件。
% c0 l3 v  w. _" E- U0 v$ `8 F  system_stm32f4xx.c文件包含了STM32芯片上电后初始化系统时钟、扩展外部存储器用的函数
) C$ }1 y) ]! L0 W! d0 o2 N; |7 B4 y0 G3 k, k# r
   Include文件夹:包含了的是位于CMSIS标准的核内设备函数层的Cortex-M核通用的头文件,它们的作用是为那些采用Cortex-M核设计SOC的芯片商设计的芯片外设提供一个进入内核的接口,定义了一些内核相关的寄存器4 w8 l! l' X% I& P" R. l# i
" R! m/ e2 t1 |7 E* w, T- b
20190817145531470.png
! L- G- x- Y8 C; x: l' B5 @4 G5 T

  l" B" i/ E4 p; K9 P core_cm4.h对于M4内核来说是一个非常重要的文件, 所有CM4芯片的库都带有这个文件;跟启动文件一样都是底层文件,都是由ARM公司提供的,遵守CMSIS标准。" M' A2 Y! j8 f
8 E' |* E  k7 h1 g$ L; c
再看STM32F4xx_StdPeriph_Driver文件夹:
. b& W* i% \" D6 t! h/ K# ~0 u4 C2 l9 _& E% z5 v
20190817145919257.png

) }: \# V  Q) x9 f( M+ |. V+ c# b( l. ?$ v/ @
STM32F4xx_StdPeriph_Driver是ST公司针对每个STM32外设而编写的库函数文件,每个外设对应一个 .c 和 .h 后缀的文件 。" q! H3 c' v/ S

+ e- J/ ^  }+ ^! y2 bProject1 T: c4 M1 m; g% P. Q( q
; n" h+ D2 W; o6 \0 x
20190817145943586.png
0 w& |% w. M4 R- z6 T/ }+ {

, M1 q( e& F; H+ s9 j+ |1 @# t stm32f4xx_it.c和stm32f4xx_conf.h文件/ K0 W6 O: z7 p5 O3 u# f9 L
  stm32f4xx_it.c:这个文件是专门用来编写中断服务函数的,在我们修改前,这个文件已经定义了一些系统异常(特殊中断)的接口,其它普通中断服务函数由我们自己添加。但是我们怎么知道这些中断服务函数的接口如何写?是不是可以自定义呢?答案当然不是的,这些都有可以在汇编启动文件中找到( t; R( Y$ U5 N
  stm32f4xx_conf.h:这个文件被包含进stm32f4xx.h 文件。ST标准库支持所有STM32F4型号的芯片,但有的型号芯片外设功能比较多,所以使用这个配置文件根据芯片型号增减ST库的外设文件
  h3 S8 m, y: h% U( _4 P5 d; X8 _, p% u2 S4 v6 ]1 d9 l7 X' x9 e; T2 G% K
以上就是STM32F4xx固件库的基本分析了。% @) @/ l# r4 F" o5 L+ X

/ s1 m3 r  z- y! |7 M% ?0 u4 \6 ~! u9 m, A) z# w

0 I' ]  S& ^  U" X2 \/ D% c7 [
收藏 评论0 发布时间:2021-12-7 11:00

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版