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

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

[复制链接]
STMCU小助手 发布时间:2021-11-28 22:00
1. 前言
0 W. e0 h1 k& @% G: t4 u: I随便找了一个以前写的Stm32的demo来练练手。1 x9 o4 T  p9 W# G9 v$ o
顺便先整理一下工程里面一些文件的作用,一直都是从DEMO中直接拿来用,还没有认真的理过。
0 Y8 @2 v  {: `4 ~; Amisc.c; g8 m7 o$ _% A
core_cm3.c/h0 j6 Z" Q3 ?: H% j8 [
startup_stm32f10x_hd.s
) `: z/ f; n! o: I/ u- kstm32f10x_conf.h' S' q$ i" `  x4 g+ U
stm32f10x_it.c/h- Z9 Y( k6 h! a# [4 k0 I' x
system_stm32f10x.c/h9 b1 N- i" {( y, o1 Z& J
stm32f10x.h4 V3 O4 m+ M% u4 R# B. N
2. ST一些容易混淆的文件作用
! ^6 _! D# H' }& n# s& b2.1 ST 3.5标准库5 @% n4 x* E8 i9 l9 }. {; L0 i
标准库3.5可以从官网下载,也可以从CSDN(搜STM32F10x_StdPeriph_Lib_V3.5.0即可)下载。注意,要下载原版,而不是别人移植过的,这样对比你才知道改了什么。
# T! M, p$ g+ m* S# |, z1 g6 \4 S0 k+ O6 Y( Y% R
在ST3.5库的使用中,大家会发现,除了把STM32F10x_StdPeriph_Driver的官方发布的库中的一些类似于stm32f10x_adc.c这样的stm32f10x_xxx.c和.h导入工程之外,还有另外几个文件,也需要导入工程才能使用,类似下图:* m/ h5 p; ?  Y2 n; n
20200205154125515.png

- `+ j/ r/ O5 Q+ W
, ?7 z  F2 E, e% g, X类似misc.c,命名比较特殊,还有core_cm3.c,system_stm32f10x.c等等?
6 {- L& u: Z8 n& N) K0 }
) C* U5 |6 f+ m& i那这几个文件,是从哪里来的?做什么用的?- y: W1 }/ {  {2 m  I$ n- v" o

5 G9 z/ e) a8 Z让我们把这些特殊的文件列一下,缕一下来龙去脉。. B7 j( M3 w7 F7 z% {( d/ b4 d
misc.c
  C- `/ B8 l! M3 Ocore_cm3.c/h
3 Y1 F; ^: m% Osystem_stm32f10x.c/h% ?# N3 r: M, V+ C6 Z1 I: ?0 n$ G4 }" y
startup_stm32f10x_hd.s
# N" {6 L  e1 U8 wstm32f10x_conf.h7 }+ a. h! b" j1 |4 z
stm32f10x_it.c/h( y6 d: {2 J- \+ f
stm32f10x.h' }& R, u" D" ]3 y' O( u1 U( }  b
一张别人的图。( U& n* H) t- E6 G2 p' \& ?, G
# r; Z9 h9 M4 ]' V. N4 A3 s
20200205165614129.png
$ n. B* W; P# s8 }4 Y0 [
3 W: t* E$ H: B
1. misc.c1 x: r6 F6 _- E8 I$ j& t
misc.c的关系比较好理,是属于3.5标准库的一员。/ S/ W8 `8 ]% k/ u5 Y4 X  v
因为STM32 V3.5版本的库函数中没有原来版本中单独对于NVIC(中断向量嵌套)的外设驱动,把NVIC的外设驱动放在了misc.c中,实际上是代替原来的stm32f10x_nvic.c。
, e, `5 E: c$ |# j- r% ~从misc.c的发布位置就能看出,这个文件是和其他的stm32f10x_xxx.c是在一起的,只是名字风格不同而已。路径在:, K& l& m& ^% o0 j. l" E' |: L: _
" {: X4 P3 I# z" [/ u- a+ {
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src& c& F+ E& \) [% B

6 P) F" X8 i) ]! b
20200205153624434.png
! W* Q0 D9 ]' J  l4 z5 u

+ E% C% ?1 S3 Z3 b; c4 O$ ]2. core_cm3.c/h 和 system_stm32f10x.c/h
: T4 B$ t4 ]8 P  O6 W9 v( Ucore_cm3.c/h和 system_stm32f10x.c/h是内核支持API,由内核公司(ARM)提供,随着3.5的标准库同步发布,路径分别在
2 l9 q& ^( O* ~, c$ y5 q
; I+ m9 s' H4 ?( h! RSTM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport
, [( z! o. D- U+ |& J5 ISTM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
2 o% n! h0 s" w4 l/ k插一段话介绍下作用:
! t# m3 y6 v' O+ s5 Z) v0 ~" l* m# H; K$ g8 c
CMSIS是Cortex微控制器软件接口标准(Cortex MicroController Software Interface Standard)的缩写,这个是ARM定制的一个用于Cortex-M系列的一个标准,主要是为了提供通用api接口来访问内核和一些片上外设,提高代码的可移植性。
% I- i- I3 ^- \! f' ICMSIS有三个层:核内外设访问层Core Peripheral Access Layer(CPAL),中间件访问层Middleware Access Layer(MWAL),设备访问层(Device Peripheral Access Layer)。" Q* d  ^+ }' f- ]) ?
CPAL用于访问内核的寄存器和组件,如NVIC,调试系统等。该层是由ARM实现的。$ {" g. }6 P6 z- R  ]
MWAL用于对中间件的访问,现在该层还未实现。(也不知道所谓的中间件是什么东西)。  y5 ~5 w+ A' X
DPAL用于定义一些硬件寄存器的地址和一些外设访问函数,由芯片制造商实现。
$ J; Y( I* p5 d7 r+ r6 |: C  lCPAL层的实现就是Core_cm3.c文件,DPAL层的实现就是system_stm32f10x.c文件(似乎还应该加上外设的函数库)
/ R: _5 f9 m, v* x/ M; }( M2 c! r3 k: z
3. startup_stm32f10x_hd.s
! y, e$ e% }' `9 y' n启动代码,由内核公司(ARM)提供,随着3.5的标准库同步发布,路径在:
$ f4 s" x. o' }5 T7 RSTM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm
0 N2 H* g) P: O8 l可以使用提供的,也可以自己修改。
9 ^- i7 l* u6 j' I3 ~: G" S0 {3 G: C8 ~/ m8 `
4. stm32f10x_conf.h + stm32f10x_it.c/h
) P' A" h& M- y7 K! L# r2 h  A7 u这几个文件在ST官方发布3.5库的时候,并没有放在库代码里,而是放在工程应用层代码里。6 b: E& A% n3 J- j' h
比如:
: b. y  V+ w5 T! G# D) j. w+ N" H6 Z  I6 M& n, k7 }9 q$ Z$ c
STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\USART\Printf$ G: X2 Y. W; V/ _( H7 j: [( c/ Z
即放在了对应的项目工程中。6 Q% l( j% D& t. q7 z8 v
这么放其实是对的,因为其他的库函数接口是不会变化的,在用户实际使用过程中是不需要改动的,但是,这几个文件,虽然也是ST提供的,但是实际使用中,要根据不同项目做改动的,是和应用有关的。- L$ B3 E- M0 |9 Y8 B
7 {! R' c0 _9 |" H$ F
所以在实际使用中,所以只是移植了3.5库,还需要另外把这几个文件放进来。; u& c: E9 \- _+ f3 ]* [. W
4 ~2 v# I" W( y9 f" _& x" ]
stm32f10x_conf.h1 }. N2 P# E) S7 @; t& d( U1 A
相当于是把所有的ST的3.5库的头文件都包含了一下,用户在上层调用的时候,不需要挨个去调用头文件,只需要打开这个文件的注释即可。3 n! l( \" ?6 M& S, y" D
stm32f10x_it.c/h
; x9 D( ]; i) a) |& v4 t2 R相当于所有中断函数入口,stm32f103的中断入口名称都是固定的,统一写在这里,方便移植。实际上,用户也可以不需要这个文件,把各自的中断函数放在各自的模块中即可,都是一样的。
" i# S7 x5 y' [# a, r/ V! M9 w& X1 ~& N+ F
5. Stm32f10x.h5 K" [4 ]7 \5 m% ^* k
这个文件比较重要,看源码分析,主要功能是
5 @0 g+ F8 u3 u" W1 l1. 依据stm32的类型(主要是flash的大小),定义各种中断向量表的顺序. G" f" g6 O! P* e3 G  G
2. 定义数据类型
8 `3 G# O. Y1 r& j0 n3. 定义MCU外设相关的结构体  I+ c  I' O7 e6 ?5 o+ U2 h4 F
4. 定义外设在FLASH中的地址
8 d; o& X1 z! D$ ~5. 进行外设寄存器的位定义
6 k) t- K) V7 p8 `; g: b- I
; I5 F. V% q0 r5 U4 b那这个文件从哪来的?谁提供的?
3 d! E% i5 T- F$ N( ?- `) D( {Stm32f10x.h是ST公司提供的,在3.5的库的DeviceSupport中可以找到& Z& H7 ~; v/ J, b& W1 b1 k

7 h, X) t: u& p& m7 tSTM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x9 M% X4 Q# A6 r4 E% U1 e; P$ C5 A

: U& ~7 b5 l, k9 }- H2.2 ST HAL库

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


  }  I0 M/ K/ ^& s& E
5 ?; |" k* J+ J7 R# J( c1 j$ _( a0 O
6 C% q7 E; E7 d8 V; B
收藏 评论0 发布时间:2021-11-28 22:00

举报

0个回答

所属标签

相似技术帖

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