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

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

[复制链接]
STMCU小助手 发布时间:2021-11-28 22:00
1. 前言6 ^; S  z  X- W8 T3 d
随便找了一个以前写的Stm32的demo来练练手。5 d' o! ]/ \- g6 ~2 V- A7 @
顺便先整理一下工程里面一些文件的作用,一直都是从DEMO中直接拿来用,还没有认真的理过。: h( b, ?" M& z* D: U$ v1 W
misc.c
: o. E! X! I9 j* {8 X3 {6 Rcore_cm3.c/h
) p2 f+ u0 i# F2 b0 D# \5 O" nstartup_stm32f10x_hd.s
9 Q" G/ T; z0 c3 Q- M, mstm32f10x_conf.h% |& O1 {7 A' ]; A+ q1 E; D
stm32f10x_it.c/h
; i) U& m6 }4 I+ j( k' Asystem_stm32f10x.c/h' a. F3 I) }. a8 F, U; m& n+ I
stm32f10x.h
3 O, \! G; v# ^& Y, O* f( J7 t2. ST一些容易混淆的文件作用: ?: f* |% I9 w; |6 E0 k3 f
2.1 ST 3.5标准库6 [1 O2 ]: @1 g- ^7 U  Y: y. Q  t
标准库3.5可以从官网下载,也可以从CSDN(搜STM32F10x_StdPeriph_Lib_V3.5.0即可)下载。注意,要下载原版,而不是别人移植过的,这样对比你才知道改了什么。
$ {1 [1 |3 E, ?% {
/ x) |( Z# d) i5 f9 d7 `$ L! Z在ST3.5库的使用中,大家会发现,除了把STM32F10x_StdPeriph_Driver的官方发布的库中的一些类似于stm32f10x_adc.c这样的stm32f10x_xxx.c和.h导入工程之外,还有另外几个文件,也需要导入工程才能使用,类似下图:; A6 f: e) y5 r" S! }# W
20200205154125515.png

! L# a1 m: h. `0 @1 o! e+ I; Q5 ^+ b4 h! _1 k5 O. r0 L' J
类似misc.c,命名比较特殊,还有core_cm3.c,system_stm32f10x.c等等?9 k) G& F  L% Y7 r. |
+ [0 N1 C( K- K9 V
那这几个文件,是从哪里来的?做什么用的?6 P% T: w( l+ a" `. a0 s- [

' U0 k2 }/ v. V& c让我们把这些特殊的文件列一下,缕一下来龙去脉。
# T$ \, Q. B2 q/ Gmisc.c, n/ ]: I5 t2 [1 h4 H% v+ t$ A
core_cm3.c/h
0 }7 ?' z  y/ n* j8 r3 Jsystem_stm32f10x.c/h- z- Z9 ]2 c4 h$ b6 F( i7 t
startup_stm32f10x_hd.s# L% h: b% D3 m+ x; ]0 ^1 R
stm32f10x_conf.h
$ d% @& t& c6 W. v7 Qstm32f10x_it.c/h
% S/ ]2 D, o% C' U5 R' lstm32f10x.h
) d% A0 G$ e, n; A% Q一张别人的图。( w- L, @3 c- {& r

+ v8 t! ?& t& O5 z
20200205165614129.png

: l1 f# \' K  X9 A$ Y9 W4 X8 ~3 x: Z# _6 ?+ Z/ b: [* H6 C
1. misc.c, o; K2 ?. ^4 G, L+ b
misc.c的关系比较好理,是属于3.5标准库的一员。
8 e$ N* M+ u) k, V. E因为STM32 V3.5版本的库函数中没有原来版本中单独对于NVIC(中断向量嵌套)的外设驱动,把NVIC的外设驱动放在了misc.c中,实际上是代替原来的stm32f10x_nvic.c。
1 A7 Q. |& a6 v' k6 b从misc.c的发布位置就能看出,这个文件是和其他的stm32f10x_xxx.c是在一起的,只是名字风格不同而已。路径在:
4 {0 S) d. i2 v9 O9 M2 l
& M, i- u1 X. e. q6 N4 d* }STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src9 C# ^* g2 z. _, O5 v! B& @

# }; i) {2 z. U* D5 q* t% M
20200205153624434.png

$ d* X+ [6 m0 D8 O( ?/ u% p4 F) Z7 X/ p+ ?
2. core_cm3.c/h 和 system_stm32f10x.c/h
" E: M2 z1 _' I% W( M" F5 P( Fcore_cm3.c/h和 system_stm32f10x.c/h是内核支持API,由内核公司(ARM)提供,随着3.5的标准库同步发布,路径分别在
- D0 j1 K# b) v% O
' j' c& P; v& E4 aSTM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport1 z5 _9 W0 M! J9 o) D# ~/ ?
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x+ m$ a! p1 F* W; L& D" i
插一段话介绍下作用:
5 K7 G$ P( o% j' v; w
4 @6 z6 [0 }% Y) }  H" p; CCMSIS是Cortex微控制器软件接口标准(Cortex MicroController Software Interface Standard)的缩写,这个是ARM定制的一个用于Cortex-M系列的一个标准,主要是为了提供通用api接口来访问内核和一些片上外设,提高代码的可移植性。  w- R9 \. V+ D1 E+ D* a; S- x
CMSIS有三个层:核内外设访问层Core Peripheral Access Layer(CPAL),中间件访问层Middleware Access Layer(MWAL),设备访问层(Device Peripheral Access Layer)。& c9 R/ h; u2 |
CPAL用于访问内核的寄存器和组件,如NVIC,调试系统等。该层是由ARM实现的。2 S( q# }; K5 G9 r/ m
MWAL用于对中间件的访问,现在该层还未实现。(也不知道所谓的中间件是什么东西)。' F' L2 q" i; M! W5 ^/ u7 S
DPAL用于定义一些硬件寄存器的地址和一些外设访问函数,由芯片制造商实现。6 ]9 V0 q- |# [* `7 k3 G
CPAL层的实现就是Core_cm3.c文件,DPAL层的实现就是system_stm32f10x.c文件(似乎还应该加上外设的函数库)
3 I2 u" |: U( F, @3 V! |) ]2 L+ I! j% M, X1 N' x. d
3. startup_stm32f10x_hd.s) W/ w7 d( l7 J+ ^
启动代码,由内核公司(ARM)提供,随着3.5的标准库同步发布,路径在:
" F% l; g$ G! B7 G& wSTM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm
, Y$ c6 k- p+ ^# ]可以使用提供的,也可以自己修改。
* S4 q& ?1 R) l; f" w' S4 {/ v2 w' `, h$ v9 Y  U  K
4. stm32f10x_conf.h + stm32f10x_it.c/h  b) N, W- b7 B. G& H
这几个文件在ST官方发布3.5库的时候,并没有放在库代码里,而是放在工程应用层代码里。- Y( {2 v/ Y$ m3 ]: q  K) L
比如:0 z5 @. i6 o5 g* f* a8 }2 O7 e

7 I0 `. g8 L1 l. r3 _; E( D/ cSTM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\USART\Printf
8 m6 Q' ^  I+ m# T+ i即放在了对应的项目工程中。2 t& l* [. U3 \, Y
这么放其实是对的,因为其他的库函数接口是不会变化的,在用户实际使用过程中是不需要改动的,但是,这几个文件,虽然也是ST提供的,但是实际使用中,要根据不同项目做改动的,是和应用有关的。
. n4 q! U& h8 D% M2 A4 d* [9 m! ^1 s& B6 ~
所以在实际使用中,所以只是移植了3.5库,还需要另外把这几个文件放进来。
7 A4 B; O/ M/ |" [$ n
/ F" P# I) H) k& j. Fstm32f10x_conf.h9 V/ ]- U) |5 Q6 E% J
相当于是把所有的ST的3.5库的头文件都包含了一下,用户在上层调用的时候,不需要挨个去调用头文件,只需要打开这个文件的注释即可。
2 B4 a' }( {5 J. M, u9 wstm32f10x_it.c/h' s) m$ Y$ j7 d' M
相当于所有中断函数入口,stm32f103的中断入口名称都是固定的,统一写在这里,方便移植。实际上,用户也可以不需要这个文件,把各自的中断函数放在各自的模块中即可,都是一样的。# J- R0 J- X0 L) @

* `. O: E: h8 Z' p( u5. Stm32f10x.h+ n* X: k: T2 B' j
这个文件比较重要,看源码分析,主要功能是
. P1 _& U9 b" D5 w7 ?" |( w1. 依据stm32的类型(主要是flash的大小),定义各种中断向量表的顺序- B7 z4 h" b/ Z  b. d, b- a! C
2. 定义数据类型
: k$ Y2 G/ x$ }% m2 l9 e  i3. 定义MCU外设相关的结构体
7 y" W6 [3 V' Q. X8 A! J7 r( y4. 定义外设在FLASH中的地址# W7 y2 b' e0 N2 T* b
5. 进行外设寄存器的位定义
' w8 u) A8 e. a: _4 i$ e) B2 G" g
. Z/ A! J* h+ ]那这个文件从哪来的?谁提供的?
! v: |1 i. m6 B/ ~1 x8 MStm32f10x.h是ST公司提供的,在3.5的库的DeviceSupport中可以找到. K3 t  Y/ u9 c2 h  Q+ _1 U% X# v
$ _, ~* G  g2 o5 S, l& H
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x2 Q+ j5 I0 V: T$ t: I
' g3 ]) S# c2 u! O8 s
2.2 ST HAL库

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

6 j8 H- v" F7 I0 e# k

- Z% ]+ S; S0 o# Z) _' l
# p( m, ^- _( S( o
5 `( p- s: h  v2 ]) ]6 ?2 w7 h  v0 {
收藏 评论0 发布时间:2021-11-28 22:00

举报

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