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

【经验分享】【stm32】stm32f1代码中core_cm3、system_stm32f10x、stm32f10x_conf、stm32f10x等文件的作用

[复制链接]
STMCU小助手 发布时间:2021-11-28 22:00
1. 前言
. {# d4 @6 Q8 s, b/ ?随便找了一个以前写的Stm32的demo来练练手。
- Y: ]. z* b7 h, z- h8 s- P顺便先整理一下工程里面一些文件的作用,一直都是从DEMO中直接拿来用,还没有认真的理过。
  M& r; P9 v$ rmisc.c1 {- E8 @2 q9 h/ Q+ ~
core_cm3.c/h& O& Q/ y. I# r" Z( o; |$ ^- T+ u
startup_stm32f10x_hd.s
( P, U1 e& D4 C* B! o. Mstm32f10x_conf.h7 L' J: n* w: r& x
stm32f10x_it.c/h
, b. E; K5 ^0 q5 w! {system_stm32f10x.c/h
7 q$ a3 m' ], e- g- q8 v; Ystm32f10x.h. w; ~. g; E2 g) I4 T  }; N& j
2. ST一些容易混淆的文件作用; j6 K7 |: J) V9 _
2.1 ST 3.5标准库
$ J! a' ?$ {8 R8 W标准库3.5可以从官网下载,也可以从CSDN(搜STM32F10x_StdPeriph_Lib_V3.5.0即可)下载。注意,要下载原版,而不是别人移植过的,这样对比你才知道改了什么。& O; r3 w) _) d1 i

0 m$ p" o: }! e8 b# u& ~9 w; ^在ST3.5库的使用中,大家会发现,除了把STM32F10x_StdPeriph_Driver的官方发布的库中的一些类似于stm32f10x_adc.c这样的stm32f10x_xxx.c和.h导入工程之外,还有另外几个文件,也需要导入工程才能使用,类似下图:
2 {- |( @9 u9 M) g2 N" J
20200205154125515.png
/ l( c! F% i; A6 Q: P# b

- l0 x( K1 m! G4 i" X. h类似misc.c,命名比较特殊,还有core_cm3.c,system_stm32f10x.c等等?
0 T" `6 I2 N6 y% r* F/ ~" `! e5 t5 ?: [/ c) X' ]# z
那这几个文件,是从哪里来的?做什么用的?! K2 W1 r: i: [! |  P  x
0 P. Y) U4 A3 S  U
让我们把这些特殊的文件列一下,缕一下来龙去脉。! N9 k3 Z6 Y2 |9 }7 Q/ X5 o% L
misc.c3 s0 N0 b( g0 `  n7 {+ d9 t; s1 N/ B
core_cm3.c/h4 o  g  ^5 d6 \) W& E: |, B3 h0 R1 Z
system_stm32f10x.c/h2 {4 t: ~$ d  {$ c& \
startup_stm32f10x_hd.s5 g# M9 a: i( F) |
stm32f10x_conf.h
% S  X+ v4 X6 Z3 m3 `: Y9 kstm32f10x_it.c/h3 z: Z9 q0 M  {% J, k) n
stm32f10x.h
: B& R/ u8 G' u$ J" T一张别人的图。
# I' X5 j3 G/ M# r$ h2 O& W
- j* N* ]  j/ O, r% h& u3 B
20200205165614129.png
3 }, _( F, f% P- j& ^3 h
: |  v. e; G4 d. M$ ^
1. misc.c
+ u8 q3 Q$ J" H  bmisc.c的关系比较好理,是属于3.5标准库的一员。% w7 f6 M) Z  G7 C* P% j/ J; R- P
因为STM32 V3.5版本的库函数中没有原来版本中单独对于NVIC(中断向量嵌套)的外设驱动,把NVIC的外设驱动放在了misc.c中,实际上是代替原来的stm32f10x_nvic.c。
) w' _  ?; g) i) s! s& n1 b4 m从misc.c的发布位置就能看出,这个文件是和其他的stm32f10x_xxx.c是在一起的,只是名字风格不同而已。路径在:8 e9 G" [8 w: S. L. z; a) X
! R- e$ r$ d% E* N* E, k! M) X
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src
; i- h: v9 {* t
( e1 [0 T7 e4 f) H( h
20200205153624434.png
) j2 c2 Z7 O1 {; g/ _+ f

  O$ k# C4 G7 r) w8 a& b( G! f2. core_cm3.c/h 和 system_stm32f10x.c/h. U; f9 a1 g# C6 ?  P+ Z
core_cm3.c/h和 system_stm32f10x.c/h是内核支持API,由内核公司(ARM)提供,随着3.5的标准库同步发布,路径分别在
% b, q8 M, l3 U1 A+ A
3 z* C6 h1 r% Y& W- ]( P7 v! l) A* ESTM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport* y7 t/ G2 K; f3 V$ |/ G2 \, a' P
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
, s3 ^. i/ I3 @! X1 J8 f8 Q& h, o插一段话介绍下作用:
; U4 G5 N$ p& I9 Q& r; I7 J, c  b" U' Q! H, g* q2 [5 W; X! ~6 A
CMSIS是Cortex微控制器软件接口标准(Cortex MicroController Software Interface Standard)的缩写,这个是ARM定制的一个用于Cortex-M系列的一个标准,主要是为了提供通用api接口来访问内核和一些片上外设,提高代码的可移植性。
9 `$ L% D$ C3 Q$ ~: b+ K1 uCMSIS有三个层:核内外设访问层Core Peripheral Access Layer(CPAL),中间件访问层Middleware Access Layer(MWAL),设备访问层(Device Peripheral Access Layer)。
* L# Z: P2 @& p5 pCPAL用于访问内核的寄存器和组件,如NVIC,调试系统等。该层是由ARM实现的。8 c  X, v3 Y8 }+ J
MWAL用于对中间件的访问,现在该层还未实现。(也不知道所谓的中间件是什么东西)。( b# p' `+ t2 n& @4 G* g
DPAL用于定义一些硬件寄存器的地址和一些外设访问函数,由芯片制造商实现。2 I! a( ?) m0 Z% e0 V" q3 E0 Z
CPAL层的实现就是Core_cm3.c文件,DPAL层的实现就是system_stm32f10x.c文件(似乎还应该加上外设的函数库)9 J2 w6 }. N* h! @7 Z9 T, m# ?
1 I& C1 Y( N8 O% M- L# u/ F" W6 N: A
3. startup_stm32f10x_hd.s* L+ e% s6 ?8 K3 g7 ]( [. B
启动代码,由内核公司(ARM)提供,随着3.5的标准库同步发布,路径在:# w& i9 [- J8 w5 M9 @* B$ J8 {
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm2 p7 z. a; j* d8 I
可以使用提供的,也可以自己修改。
0 |: _5 |6 \, y% i, C, m6 {8 s/ n  q$ ]: V& T6 W2 z1 `  C
4. stm32f10x_conf.h + stm32f10x_it.c/h
7 b5 b2 e( c0 k: W这几个文件在ST官方发布3.5库的时候,并没有放在库代码里,而是放在工程应用层代码里。+ N, }4 N& S, k& e& r: c* w
比如:
( s4 `3 m; }' c$ s
* n3 T1 q# R7 t; f" b# wSTM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\USART\Printf! T# U% `! y  d0 B3 \) q
即放在了对应的项目工程中。6 A& M* g  b( i
这么放其实是对的,因为其他的库函数接口是不会变化的,在用户实际使用过程中是不需要改动的,但是,这几个文件,虽然也是ST提供的,但是实际使用中,要根据不同项目做改动的,是和应用有关的。
& C+ g7 K' `( V4 A# b# N6 q, Q# C
所以在实际使用中,所以只是移植了3.5库,还需要另外把这几个文件放进来。4 I$ d. e0 c& W  J7 K8 F5 j. A2 S

( w) P3 d8 \/ o& F0 U9 s  X& Sstm32f10x_conf.h# c* z& y) X  N8 t
相当于是把所有的ST的3.5库的头文件都包含了一下,用户在上层调用的时候,不需要挨个去调用头文件,只需要打开这个文件的注释即可。
) Q+ g( q& u- Zstm32f10x_it.c/h$ T3 R1 o5 J- T+ D
相当于所有中断函数入口,stm32f103的中断入口名称都是固定的,统一写在这里,方便移植。实际上,用户也可以不需要这个文件,把各自的中断函数放在各自的模块中即可,都是一样的。# X, P3 v% u( k8 A) y& L/ Q" x

; G1 |9 D4 c7 a, q/ b5. Stm32f10x.h
2 g, U% M) [" o. J2 `这个文件比较重要,看源码分析,主要功能是: L8 @7 r6 H7 N+ x% O' K, W
1. 依据stm32的类型(主要是flash的大小),定义各种中断向量表的顺序
8 B# l1 J  z6 b. c. `2 C+ q7 N2. 定义数据类型  n, k0 T8 v: G& E! l
3. 定义MCU外设相关的结构体
  B6 A: J' r7 @/ J4. 定义外设在FLASH中的地址: [2 }/ g' q, H+ h
5. 进行外设寄存器的位定义
. C4 `& p* c4 j$ Z; }5 `; p1 c; f; t# V
那这个文件从哪来的?谁提供的?, u- r6 ?0 u# |! e5 f
Stm32f10x.h是ST公司提供的,在3.5的库的DeviceSupport中可以找到; w; D! S2 `  [. T$ n. r
9 l, [, k% A' k+ E
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x+ w# m! R' f8 U9 M) f8 J8 B

6 [6 k4 v& C$ }$ _  W: ~0 z2.2 ST HAL库

这部分在做stm32f7的时候用过,还没细整理,暂时略过。


2 z7 i( X; d  B' D9 C* z. L) G7 S" k& T1 s
1 B8 H+ y1 d5 `$ V) m/ t7 a

, O4 f! q" ^. U4 o7 \
收藏 评论0 发布时间:2021-11-28 22:00

举报

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