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

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

[复制链接]
STMCU小助手 发布时间:2021-11-28 22:00
1. 前言
$ t7 `- |/ r! [( e- B) Q' `2 X随便找了一个以前写的Stm32的demo来练练手。
$ P: ?9 o! e* C6 X2 i顺便先整理一下工程里面一些文件的作用,一直都是从DEMO中直接拿来用,还没有认真的理过。
( \  M% w% K$ E# o3 |+ umisc.c
8 ~! u; s) @+ g4 Ycore_cm3.c/h
$ C, }' @" i+ O4 Z0 u& gstartup_stm32f10x_hd.s, U6 h0 W2 }7 M& s# w  {  K* o
stm32f10x_conf.h: a6 l' z/ S6 d% q8 B5 m
stm32f10x_it.c/h
/ C0 P8 P% u+ Gsystem_stm32f10x.c/h
9 W) y% Y. p- [  n! Z7 S' r9 sstm32f10x.h
; b( u5 ]8 ~' }* \0 L$ f3 r: X3 q" [  b2. ST一些容易混淆的文件作用
% g/ I' O$ B8 r& F2.1 ST 3.5标准库5 F+ T) b: H/ Q$ S# s( q) _4 [" o
标准库3.5可以从官网下载,也可以从CSDN(搜STM32F10x_StdPeriph_Lib_V3.5.0即可)下载。注意,要下载原版,而不是别人移植过的,这样对比你才知道改了什么。0 O5 S& V, p9 R4 L
9 g. k- q( M6 [! V* e2 a5 d
在ST3.5库的使用中,大家会发现,除了把STM32F10x_StdPeriph_Driver的官方发布的库中的一些类似于stm32f10x_adc.c这样的stm32f10x_xxx.c和.h导入工程之外,还有另外几个文件,也需要导入工程才能使用,类似下图:$ I% ?# t  _: Y  W* _4 G
20200205154125515.png

) s$ p7 Y/ Z  [/ J* o- q* ]) H
) d5 G- B4 o4 M6 E0 d类似misc.c,命名比较特殊,还有core_cm3.c,system_stm32f10x.c等等?
; r( p1 B( ~! T+ T- V5 H6 |( ~, T7 S3 V# _
那这几个文件,是从哪里来的?做什么用的?
* ]2 }& S) @6 Y, @9 ?5 j% ^5 n
1 D. p2 z3 m) J# z; U, j让我们把这些特殊的文件列一下,缕一下来龙去脉。; f: r' ^. T- e3 G/ q
misc.c
8 W, J( W3 [! }# B/ J7 a' Bcore_cm3.c/h+ ~0 e8 z0 q8 F! a- P' {
system_stm32f10x.c/h
% S# K0 z+ {* E1 U8 dstartup_stm32f10x_hd.s
2 T; o  A8 Q( \0 v5 c$ lstm32f10x_conf.h
1 t& w& x9 p+ l/ zstm32f10x_it.c/h4 _  P, j$ e5 ^/ i  ?
stm32f10x.h
6 G, @% [+ n' K2 h* L一张别人的图。
2 Q" v% s$ X, \/ b; ]6 f4 t" ~" K' L3 ^  U/ G) x
20200205165614129.png
+ N9 P3 Z: u) [
3 s, x0 M& R4 a- K" l
1. misc.c
9 `0 z- i; }* U2 I0 y  ymisc.c的关系比较好理,是属于3.5标准库的一员。: ~/ R  i& e4 |  L) c! B5 Q1 g
因为STM32 V3.5版本的库函数中没有原来版本中单独对于NVIC(中断向量嵌套)的外设驱动,把NVIC的外设驱动放在了misc.c中,实际上是代替原来的stm32f10x_nvic.c。  Q& O7 X) T  ]& O+ c
从misc.c的发布位置就能看出,这个文件是和其他的stm32f10x_xxx.c是在一起的,只是名字风格不同而已。路径在:3 i, y$ p2 C* z% r  p+ A7 J

( B& q9 h  H8 W+ e, BSTM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src2 l  i6 |5 w( O& M: i. V

6 o, z  W+ [: \& C: I& _
20200205153624434.png

9 b+ V8 t9 u) w! _, }; C, o
  Y8 F3 T0 |* \  p2. core_cm3.c/h 和 system_stm32f10x.c/h4 q/ c$ V/ P6 f" N% G7 I
core_cm3.c/h和 system_stm32f10x.c/h是内核支持API,由内核公司(ARM)提供,随着3.5的标准库同步发布,路径分别在6 n( {& z# [  \7 r# T. ~+ v

/ W2 r+ y# u. HSTM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport1 J7 B2 M* X% O; Q" `, ^8 k5 m' U
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
! ?# O+ a5 C, W6 P& P, @- x% I插一段话介绍下作用:7 O  O! o1 E9 y- n4 e% H! J
4 \. v0 h& @( b& U* a
CMSIS是Cortex微控制器软件接口标准(Cortex MicroController Software Interface Standard)的缩写,这个是ARM定制的一个用于Cortex-M系列的一个标准,主要是为了提供通用api接口来访问内核和一些片上外设,提高代码的可移植性。
; b8 O  g2 l# |2 lCMSIS有三个层:核内外设访问层Core Peripheral Access Layer(CPAL),中间件访问层Middleware Access Layer(MWAL),设备访问层(Device Peripheral Access Layer)。
- y, d) R3 K0 R. F9 aCPAL用于访问内核的寄存器和组件,如NVIC,调试系统等。该层是由ARM实现的。1 q; m! R4 M2 R4 F
MWAL用于对中间件的访问,现在该层还未实现。(也不知道所谓的中间件是什么东西)。" j2 E" a: ~/ a+ Z+ Z# m# ]# f
DPAL用于定义一些硬件寄存器的地址和一些外设访问函数,由芯片制造商实现。
8 y' {, I( A# b0 G5 h& yCPAL层的实现就是Core_cm3.c文件,DPAL层的实现就是system_stm32f10x.c文件(似乎还应该加上外设的函数库)5 A4 m2 u, Q; T+ a+ g) ^

% ~( ^$ c2 E7 H; s+ U3. startup_stm32f10x_hd.s
5 ?# z; \( n' R4 C1 Y启动代码,由内核公司(ARM)提供,随着3.5的标准库同步发布,路径在:2 ^4 B2 M7 s8 O, A
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm( x7 j: M+ l! E2 x0 ~# P; {$ u7 Z
可以使用提供的,也可以自己修改。1 F  f* i" N) P$ a: M9 ?" L( S

- b& x+ m4 Z9 t4. stm32f10x_conf.h + stm32f10x_it.c/h
* w0 M$ T6 j6 R( y* f+ w4 e这几个文件在ST官方发布3.5库的时候,并没有放在库代码里,而是放在工程应用层代码里。
  L0 L+ ~2 Q2 a- x! e$ d- c5 g比如:4 ^4 k. q; G7 k& X# i7 P& }

" j1 Z# w+ ^% HSTM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\USART\Printf1 P! u/ i" w  P+ e  p2 L2 w
即放在了对应的项目工程中。
3 k$ a" D0 ^2 {这么放其实是对的,因为其他的库函数接口是不会变化的,在用户实际使用过程中是不需要改动的,但是,这几个文件,虽然也是ST提供的,但是实际使用中,要根据不同项目做改动的,是和应用有关的。
" o: d+ x7 K+ T, t2 @. d
" g& i8 T8 U& k1 F5 Z3 C4 E所以在实际使用中,所以只是移植了3.5库,还需要另外把这几个文件放进来。
8 R+ p6 V" k4 {7 H  t; ~3 f  C2 O& B" D& C
stm32f10x_conf.h0 ~9 n% H1 _8 r/ n' p* P/ R
相当于是把所有的ST的3.5库的头文件都包含了一下,用户在上层调用的时候,不需要挨个去调用头文件,只需要打开这个文件的注释即可。, a! ]1 f7 {* t" ]& g* F3 `" c  V
stm32f10x_it.c/h% S( z# a( v7 _
相当于所有中断函数入口,stm32f103的中断入口名称都是固定的,统一写在这里,方便移植。实际上,用户也可以不需要这个文件,把各自的中断函数放在各自的模块中即可,都是一样的。
# h( [1 N0 ^# B3 _* K7 y8 U7 K" ^7 a* V
5. Stm32f10x.h1 @1 |2 ]3 g+ L& \0 z! [( g
这个文件比较重要,看源码分析,主要功能是! R& ~  P1 X) {$ w1 y3 i
1. 依据stm32的类型(主要是flash的大小),定义各种中断向量表的顺序" E( J$ t8 [0 N) P# P& n, L
2. 定义数据类型
8 w, V' W7 T! @9 F+ K" g; @3. 定义MCU外设相关的结构体
& v! M" n$ ~3 e4 V- a2 |7 k  H, G4. 定义外设在FLASH中的地址' m4 i' V' i: ~8 V' H8 B2 z: x
5. 进行外设寄存器的位定义1 d7 P+ S0 o+ Z( q1 t5 `5 C8 B6 V
9 G! {' b3 ]0 `1 E1 l. o
那这个文件从哪来的?谁提供的?
5 f( z  a, h% K0 S: hStm32f10x.h是ST公司提供的,在3.5的库的DeviceSupport中可以找到( q, D  ]+ W/ a9 {& {/ k3 r
) s' @" D6 y  K4 \+ c
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x0 e9 J+ P( d" `. s3 p
$ w# H6 b; W0 W) s' N; n/ q
2.2 ST HAL库

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

- j1 r9 b; i6 q8 Q; E
" [$ ?# g# P* Z1 s& }, K% `

! \2 w* \$ q0 \2 ~1 v& m1 F' E& E- \' x# p6 J+ b
收藏 评论0 发布时间:2021-11-28 22:00

举报

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