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

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

[复制链接]
STMCU小助手 发布时间:2021-11-28 22:00
1. 前言
( l. W0 y$ O9 S1 D随便找了一个以前写的Stm32的demo来练练手。
1 j" d8 B4 d% a3 d& k* O7 b! N顺便先整理一下工程里面一些文件的作用,一直都是从DEMO中直接拿来用,还没有认真的理过。
/ l5 @' |* l- [! nmisc.c& ]* e. o* F' J& W* i
core_cm3.c/h
& l8 q- v+ q  W9 j& jstartup_stm32f10x_hd.s* j  p( |2 b# b0 I0 j
stm32f10x_conf.h
( h" k& X/ r5 {  Pstm32f10x_it.c/h
1 p8 I# l. A& o( T) nsystem_stm32f10x.c/h' S) Y! O  H' D1 A
stm32f10x.h
$ s  s  }2 G' u; b& o- l2. ST一些容易混淆的文件作用
  a3 b! |$ C( @, j( Z6 W1 h' @( @2.1 ST 3.5标准库
% u& K9 _0 f# p标准库3.5可以从官网下载,也可以从CSDN(搜STM32F10x_StdPeriph_Lib_V3.5.0即可)下载。注意,要下载原版,而不是别人移植过的,这样对比你才知道改了什么。5 _; P4 Q9 t1 s2 m: g3 ?9 M" A- @# g" I

+ n, Y8 r; U/ a在ST3.5库的使用中,大家会发现,除了把STM32F10x_StdPeriph_Driver的官方发布的库中的一些类似于stm32f10x_adc.c这样的stm32f10x_xxx.c和.h导入工程之外,还有另外几个文件,也需要导入工程才能使用,类似下图:
7 j6 S! O2 z+ d" C$ [9 E  R- u% j
20200205154125515.png

/ m8 \; K0 ~: c2 s
) i4 h6 i1 Z' [9 }类似misc.c,命名比较特殊,还有core_cm3.c,system_stm32f10x.c等等?
5 ^2 j6 `. H7 t; }! }- q: N+ ?# s4 H; K9 E; V8 j; Z
那这几个文件,是从哪里来的?做什么用的?
7 E: r2 ~9 n* A/ y% [  e: l, n- w* V9 X9 x+ f0 l9 ]" S
让我们把这些特殊的文件列一下,缕一下来龙去脉。
+ j! `+ }2 K0 Tmisc.c4 Z2 Z; R8 z- j- y' @
core_cm3.c/h  u2 g8 I0 R: w/ c0 @
system_stm32f10x.c/h
; @! i& p  A. v2 c3 v4 c5 }startup_stm32f10x_hd.s
# p# w6 w; I2 i2 v1 }4 @stm32f10x_conf.h
" x/ m2 f& p' estm32f10x_it.c/h8 }/ N  ]' V6 }3 u/ R/ w2 b7 f
stm32f10x.h9 `" n% O0 v" ?! u% L
一张别人的图。
" Q( l, {# _" S) R+ d- k4 Q% |. p& j+ o0 O+ F1 P% X) m" M
20200205165614129.png
+ z" A; G' \) A7 c# k
- E2 N* n$ n  W3 Y8 B
1. misc.c# b7 ~( T, j* @: O, Y
misc.c的关系比较好理,是属于3.5标准库的一员。4 b2 N/ Z7 I, M& n! ~; @( |
因为STM32 V3.5版本的库函数中没有原来版本中单独对于NVIC(中断向量嵌套)的外设驱动,把NVIC的外设驱动放在了misc.c中,实际上是代替原来的stm32f10x_nvic.c。
1 d) @! @- q0 ~$ ]从misc.c的发布位置就能看出,这个文件是和其他的stm32f10x_xxx.c是在一起的,只是名字风格不同而已。路径在:' @$ P4 y6 X: H! [3 Q0 `9 W4 i

) v& R' e* B" l+ `* R& _. ^STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src
& r) b$ t, c; z5 y* J& X/ A  t/ u! Z- D
20200205153624434.png
. g' z* m9 {0 i3 ?' v

. J( K: }% Y4 Q  w4 {% I3 I. L2. core_cm3.c/h 和 system_stm32f10x.c/h
% }& t3 X+ [" h8 F5 p6 {" R1 k0 b& x; Kcore_cm3.c/h和 system_stm32f10x.c/h是内核支持API,由内核公司(ARM)提供,随着3.5的标准库同步发布,路径分别在2 B$ e) F6 ]2 s9 S- E

, I8 F& }/ J4 Q5 u8 C) x# vSTM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport
% ^8 x5 Y% J7 f. Y+ mSTM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
" P& z  F& a& E+ @5 X- x! h4 V插一段话介绍下作用:
0 y2 C5 q6 x% A1 P. |/ V9 w" w
# O2 [4 s6 C$ Q2 `# oCMSIS是Cortex微控制器软件接口标准(Cortex MicroController Software Interface Standard)的缩写,这个是ARM定制的一个用于Cortex-M系列的一个标准,主要是为了提供通用api接口来访问内核和一些片上外设,提高代码的可移植性。
! ]1 f- N, g. I8 g" ACMSIS有三个层:核内外设访问层Core Peripheral Access Layer(CPAL),中间件访问层Middleware Access Layer(MWAL),设备访问层(Device Peripheral Access Layer)。
' j9 j: ]& k1 V; n$ mCPAL用于访问内核的寄存器和组件,如NVIC,调试系统等。该层是由ARM实现的。" ]+ X% A$ b) ~2 q9 g
MWAL用于对中间件的访问,现在该层还未实现。(也不知道所谓的中间件是什么东西)。
) b9 X# t1 Y2 b. \) n2 _DPAL用于定义一些硬件寄存器的地址和一些外设访问函数,由芯片制造商实现。
) g5 u2 k6 y- H! ZCPAL层的实现就是Core_cm3.c文件,DPAL层的实现就是system_stm32f10x.c文件(似乎还应该加上外设的函数库)
4 H4 t2 L2 `0 s# |: K5 L8 p3 C% X+ {/ K4 D2 G
3. startup_stm32f10x_hd.s
+ r9 v2 L. Z% d$ X  ]启动代码,由内核公司(ARM)提供,随着3.5的标准库同步发布,路径在:) ?  O4 n! ]5 C6 I( ^& _) t; G
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm% |- W6 D& o; B" {- Q7 H0 v
可以使用提供的,也可以自己修改。
4 h. G% N1 v" e$ v. x: {) T( r# W3 R" T" i7 z2 V
4. stm32f10x_conf.h + stm32f10x_it.c/h
4 U5 r: u. k* E, |这几个文件在ST官方发布3.5库的时候,并没有放在库代码里,而是放在工程应用层代码里。
8 J) G' n9 {: b& _$ @比如:5 n& J% h9 Y5 B2 Z8 ]$ d

1 I5 I. A% {' WSTM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\USART\Printf% G/ {1 x; m6 q
即放在了对应的项目工程中。4 d& l5 g4 c) x+ K- R
这么放其实是对的,因为其他的库函数接口是不会变化的,在用户实际使用过程中是不需要改动的,但是,这几个文件,虽然也是ST提供的,但是实际使用中,要根据不同项目做改动的,是和应用有关的。' M: Y7 v& m# P' ^

2 S- c7 J  O" p! |# O$ L# P" ^所以在实际使用中,所以只是移植了3.5库,还需要另外把这几个文件放进来。0 O" J% @* i. d8 }
+ D9 w  m' w- C: U
stm32f10x_conf.h
: E- s: @" \0 W1 B+ N相当于是把所有的ST的3.5库的头文件都包含了一下,用户在上层调用的时候,不需要挨个去调用头文件,只需要打开这个文件的注释即可。+ P8 A2 z! X- e9 v! ~' I% c
stm32f10x_it.c/h4 W( |% z2 y8 ~$ [! @: K9 [
相当于所有中断函数入口,stm32f103的中断入口名称都是固定的,统一写在这里,方便移植。实际上,用户也可以不需要这个文件,把各自的中断函数放在各自的模块中即可,都是一样的。; P! y6 h% z' ?! r

5 E3 P) i" r. h* Z5. Stm32f10x.h- |' K) j; P1 k  f
这个文件比较重要,看源码分析,主要功能是
- y* }( R' v# z( z  s1. 依据stm32的类型(主要是flash的大小),定义各种中断向量表的顺序
- X0 y& [" E0 i2. 定义数据类型
5 J- h: \* S, S) E3. 定义MCU外设相关的结构体
) p4 o; `- g9 ]) Z; c  u4. 定义外设在FLASH中的地址
7 }' B4 U9 K* _% l5. 进行外设寄存器的位定义0 k) y+ c' i' \8 T
' A0 ]2 n! Y' }  O; M$ V  L; T
那这个文件从哪来的?谁提供的?* l! Q" U) L: a7 D8 o
Stm32f10x.h是ST公司提供的,在3.5的库的DeviceSupport中可以找到" n( J6 e& s+ X9 j! S7 D. l
. t, N% H1 h& K
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x# E: A$ W" P& f# O, Y( x* q
6 p3 g9 ?" N. R7 S* @
2.2 ST HAL库

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


, G$ T# ]$ ?1 A, [& w) I
1 x9 ?: u0 Q/ t* L+ O. Q3 J- s6 N- a5 C2 v$ C  ]
! e/ x# i' K) M
收藏 评论0 发布时间:2021-11-28 22:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版