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

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

[复制链接]
STMCU小助手 发布时间:2021-11-28 22:00
1. 前言
. O0 V4 r  S. v# z5 H5 R) D随便找了一个以前写的Stm32的demo来练练手。
' r! j2 l' h, _) _6 q顺便先整理一下工程里面一些文件的作用,一直都是从DEMO中直接拿来用,还没有认真的理过。
# I5 _1 z) X- S# b+ x5 Qmisc.c
2 N' s0 r4 c2 @* q" d) lcore_cm3.c/h$ C; ^) h5 i! _, ]8 ?4 S0 F
startup_stm32f10x_hd.s5 X  E$ b3 d$ L, ]
stm32f10x_conf.h1 W8 \; L7 {4 J+ o7 l
stm32f10x_it.c/h+ d" d5 D$ ?! s9 d2 Y
system_stm32f10x.c/h3 m. _4 h5 P! A! o
stm32f10x.h6 k- E- H6 y' [5 I
2. ST一些容易混淆的文件作用& w4 @6 b) A5 |, }3 d- }
2.1 ST 3.5标准库
. }' x' _) ~/ S  l/ F) M标准库3.5可以从官网下载,也可以从CSDN(搜STM32F10x_StdPeriph_Lib_V3.5.0即可)下载。注意,要下载原版,而不是别人移植过的,这样对比你才知道改了什么。) \) H, E2 r1 @+ Y; d2 R! f) c* H4 j* \
! T  W$ `' d! ^* X& t, E" B; @/ g
在ST3.5库的使用中,大家会发现,除了把STM32F10x_StdPeriph_Driver的官方发布的库中的一些类似于stm32f10x_adc.c这样的stm32f10x_xxx.c和.h导入工程之外,还有另外几个文件,也需要导入工程才能使用,类似下图:+ n% }" j9 Q$ [! O! U
20200205154125515.png
5 j& n! Q9 ~8 d* y* N, v3 e
+ e: K0 g* u# `
类似misc.c,命名比较特殊,还有core_cm3.c,system_stm32f10x.c等等?
; \. L6 y6 q  z7 [; p5 m4 c
- |" _! x" Z7 Q4 t那这几个文件,是从哪里来的?做什么用的?
  F! T; x; l2 Y# s' J7 r
5 L! a2 W* j, d% M) _让我们把这些特殊的文件列一下,缕一下来龙去脉。
/ L2 X. c! l! }- ]' n% Umisc.c8 X9 O* K5 N# V# ?# [) U" L9 T
core_cm3.c/h0 }7 D% \) `5 P$ ]* h1 R
system_stm32f10x.c/h: |# `7 `) n4 g, j
startup_stm32f10x_hd.s. m' W/ }* A6 F7 ~3 l0 ?& J3 l  y& I
stm32f10x_conf.h
' V6 N0 Y3 ]+ S" @stm32f10x_it.c/h! W0 u# ?0 k9 r  C* p8 u
stm32f10x.h4 b; `  R& l/ x) B7 d( a2 ~" L- I
一张别人的图。. G$ b$ e) U. W. z% j% H. n

0 L' I! e+ [$ H3 ~+ k' N
20200205165614129.png
, @1 X) z/ \* c" e- V6 W+ g( {" w- F

8 o5 f' f+ a1 P1. misc.c8 r# o. T; r% B7 {; L1 l) ~
misc.c的关系比较好理,是属于3.5标准库的一员。/ H- ]3 \% X. ]! R
因为STM32 V3.5版本的库函数中没有原来版本中单独对于NVIC(中断向量嵌套)的外设驱动,把NVIC的外设驱动放在了misc.c中,实际上是代替原来的stm32f10x_nvic.c。3 J1 ^) q9 P7 f9 b0 S6 B
从misc.c的发布位置就能看出,这个文件是和其他的stm32f10x_xxx.c是在一起的,只是名字风格不同而已。路径在:5 A4 u2 s! x8 F  W8 n' v
, Z1 |  W7 ]8 v9 p/ Q6 k
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src
! X! Z7 o1 o1 q5 [" u  P- ~! ]1 Z
$ {7 n0 o0 k- t& F4 ?
20200205153624434.png

: _0 Z) ~4 ?5 P9 @3 B, \6 S2 z" `' ~/ s: C0 o
2. core_cm3.c/h 和 system_stm32f10x.c/h
8 j2 d' O/ h9 T1 [7 V: Kcore_cm3.c/h和 system_stm32f10x.c/h是内核支持API,由内核公司(ARM)提供,随着3.5的标准库同步发布,路径分别在" y  Y  F8 q8 @, G. F

# @7 y, Y& y' F6 V2 U, NSTM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport( P2 m3 Y7 x. ^: A% _2 W; D8 T
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
& V- q) [% J2 w+ {4 P插一段话介绍下作用:
( F' |0 d1 O3 `6 ^3 @7 P2 C) u# H6 k$ @- x8 a9 U0 C9 p
CMSIS是Cortex微控制器软件接口标准(Cortex MicroController Software Interface Standard)的缩写,这个是ARM定制的一个用于Cortex-M系列的一个标准,主要是为了提供通用api接口来访问内核和一些片上外设,提高代码的可移植性。
0 V9 k* U4 p9 l( R0 h- n+ `CMSIS有三个层:核内外设访问层Core Peripheral Access Layer(CPAL),中间件访问层Middleware Access Layer(MWAL),设备访问层(Device Peripheral Access Layer)。
* A2 ]$ T2 ]5 B7 x4 l1 b8 yCPAL用于访问内核的寄存器和组件,如NVIC,调试系统等。该层是由ARM实现的。! Q  I' s) q2 j7 _, k6 [
MWAL用于对中间件的访问,现在该层还未实现。(也不知道所谓的中间件是什么东西)。* R) {9 H: E8 X$ T
DPAL用于定义一些硬件寄存器的地址和一些外设访问函数,由芯片制造商实现。
* O  {' ]" F) l- m. O* }CPAL层的实现就是Core_cm3.c文件,DPAL层的实现就是system_stm32f10x.c文件(似乎还应该加上外设的函数库). ]) u0 e  Q$ X; G

! n: t3 u; Z, f& u8 w1 N3. startup_stm32f10x_hd.s) G- ?, N; j; k% W. \% ^
启动代码,由内核公司(ARM)提供,随着3.5的标准库同步发布,路径在:
/ N  Y' }/ R: F& d. [  S4 ZSTM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm: J: N- G4 |1 z* Z6 ^
可以使用提供的,也可以自己修改。
; K/ M6 Z# I9 f3 {( Z, R; i0 ~, |2 e0 Z, m2 p; z  h/ A
4. stm32f10x_conf.h + stm32f10x_it.c/h* E6 B& x, `( {! C
这几个文件在ST官方发布3.5库的时候,并没有放在库代码里,而是放在工程应用层代码里。: j& S: h$ I( |7 U; X+ t
比如:1 j/ w: c7 E+ s0 {* M

! k, j$ D$ r8 J8 n5 c) cSTM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\USART\Printf
7 U, E; E+ ^  N: l! j! h即放在了对应的项目工程中。) o" m& \  I( \: U
这么放其实是对的,因为其他的库函数接口是不会变化的,在用户实际使用过程中是不需要改动的,但是,这几个文件,虽然也是ST提供的,但是实际使用中,要根据不同项目做改动的,是和应用有关的。, q0 }% n1 w9 v# Q' k0 W* \1 I
- k8 m+ m' O! z6 T8 G* i
所以在实际使用中,所以只是移植了3.5库,还需要另外把这几个文件放进来。
& U8 c- O, M" b8 i8 e* _  M$ S# ~. x. ~0 O# u
stm32f10x_conf.h
; j- e8 U' c: g; U: j相当于是把所有的ST的3.5库的头文件都包含了一下,用户在上层调用的时候,不需要挨个去调用头文件,只需要打开这个文件的注释即可。
, m- Z/ }& B  Hstm32f10x_it.c/h7 C2 ~% T7 W; G* x' Z
相当于所有中断函数入口,stm32f103的中断入口名称都是固定的,统一写在这里,方便移植。实际上,用户也可以不需要这个文件,把各自的中断函数放在各自的模块中即可,都是一样的。+ H5 _6 k6 o; D4 }2 _4 m+ l( A% {
5 T" T' I% e) V3 ?
5. Stm32f10x.h
. F1 A& _# s+ u- F! Q这个文件比较重要,看源码分析,主要功能是% U% H( \+ s( G
1. 依据stm32的类型(主要是flash的大小),定义各种中断向量表的顺序
6 }$ V/ @$ H$ V- U2. 定义数据类型
. U$ c. D( N+ U* i' ~# n' W/ J8 {9 P3. 定义MCU外设相关的结构体$ J$ d1 p# \3 a5 l0 c
4. 定义外设在FLASH中的地址
% w2 d: X9 e/ |8 k5. 进行外设寄存器的位定义, G  q2 A$ i! U, Q0 R
) Z, E' w: |$ {9 d
那这个文件从哪来的?谁提供的?
' S+ W  p3 @7 E/ f2 MStm32f10x.h是ST公司提供的,在3.5的库的DeviceSupport中可以找到
1 a$ a( e! R( K/ B5 E) s$ y3 a  T4 g) F3 ~6 D8 M& s/ z
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
4 Z  k3 U* B" g, J* ^
$ C/ A. }' L. y: C# R1 r4 R2.2 ST HAL库

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


+ S0 O* b5 I; v( r
" I' Z2 D# ]: |
% A* q4 X) l: r- @* A" b9 R9 X" j. W. T9 o+ d
收藏 评论0 发布时间:2021-11-28 22:00

举报

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