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

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

[复制链接]
STMCU小助手 发布时间:2021-11-28 22:00
1. 前言
8 k. i2 m. v! n7 U, i& J0 f5 k' s随便找了一个以前写的Stm32的demo来练练手。
8 {- M- D/ l! I6 x- f顺便先整理一下工程里面一些文件的作用,一直都是从DEMO中直接拿来用,还没有认真的理过。
4 p$ M& D% H, [: o/ S8 rmisc.c
+ _/ ~! O7 O- {9 \/ L* lcore_cm3.c/h% B$ k9 y4 ~; O' m" ]3 C) X
startup_stm32f10x_hd.s
; R" c" q; M; L  o2 t% C; pstm32f10x_conf.h3 X7 F1 Q  I- b' K+ v# X, L
stm32f10x_it.c/h( R5 g3 i1 T/ K  A3 U' a, o
system_stm32f10x.c/h
8 o! u8 ~. p/ L2 _8 B" Y- Pstm32f10x.h$ v! N2 P% p: n! M9 e& b' ^) _  ?
2. ST一些容易混淆的文件作用' X! ^. D" s+ `
2.1 ST 3.5标准库
: v5 P7 K: |( d4 S2 x9 J) H$ f标准库3.5可以从官网下载,也可以从CSDN(搜STM32F10x_StdPeriph_Lib_V3.5.0即可)下载。注意,要下载原版,而不是别人移植过的,这样对比你才知道改了什么。
  N  d( N) ^1 e$ x
: ~0 y, r% B& _# x: v7 x6 C在ST3.5库的使用中,大家会发现,除了把STM32F10x_StdPeriph_Driver的官方发布的库中的一些类似于stm32f10x_adc.c这样的stm32f10x_xxx.c和.h导入工程之外,还有另外几个文件,也需要导入工程才能使用,类似下图:+ }3 S7 Z; Y* n' [
20200205154125515.png
! \1 v5 R% j8 m/ v) v/ u

. L4 M: h4 o0 j* V# s: n4 P" l类似misc.c,命名比较特殊,还有core_cm3.c,system_stm32f10x.c等等?) V( L+ O  r# N3 `8 M3 E# m3 T+ d  n
" t) j& B9 k6 p/ q) c
那这几个文件,是从哪里来的?做什么用的?4 x2 i) q$ I0 `* ^
5 `, O' f$ j3 M0 \9 O
让我们把这些特殊的文件列一下,缕一下来龙去脉。0 s) I5 |& K/ n. M" L
misc.c
" g, h. E) F! Ycore_cm3.c/h/ E; T" {$ N, K
system_stm32f10x.c/h8 n8 u& |- o# Y) H4 `( ?: T
startup_stm32f10x_hd.s# y5 ?' y& K/ `7 N6 V- ^
stm32f10x_conf.h, k3 @' e1 {4 Q- r
stm32f10x_it.c/h
& D9 K' {# @; V* @' x3 @stm32f10x.h, x& l4 e- W. y
一张别人的图。
6 F7 l  q" l/ M6 O& h/ l9 u- S% m) z) I  _# ]* M% R
20200205165614129.png

) a% x1 {3 s3 c* a+ T( i" p7 K0 ^$ S
1. misc.c- l' q: J7 {0 Q) p$ Q
misc.c的关系比较好理,是属于3.5标准库的一员。6 t8 j$ W) Q/ U; ~1 z2 v( j
因为STM32 V3.5版本的库函数中没有原来版本中单独对于NVIC(中断向量嵌套)的外设驱动,把NVIC的外设驱动放在了misc.c中,实际上是代替原来的stm32f10x_nvic.c。: }. s/ r5 @8 S3 Q
从misc.c的发布位置就能看出,这个文件是和其他的stm32f10x_xxx.c是在一起的,只是名字风格不同而已。路径在:% e: P: f! M4 J7 K2 c2 u

/ d  b/ J2 ?% ]. |STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src
6 ]9 s8 G  y0 c5 g/ B" B* u: W: E% K* G
20200205153624434.png

- K) V" Z" Z+ ?7 e: r2 j# G6 O2 L  g6 p- d
2. core_cm3.c/h 和 system_stm32f10x.c/h
6 P; X% I3 l% V5 }core_cm3.c/h和 system_stm32f10x.c/h是内核支持API,由内核公司(ARM)提供,随着3.5的标准库同步发布,路径分别在; W0 `4 f2 M0 A" r) s

7 @' Z! L+ v+ ^; i% z5 nSTM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport
/ s* E9 a  A- q. E* eSTM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x2 t9 s% e7 h+ i
插一段话介绍下作用:
, M' A6 W/ t! h" f! b% G0 J2 q8 z2 V" n" V) C
CMSIS是Cortex微控制器软件接口标准(Cortex MicroController Software Interface Standard)的缩写,这个是ARM定制的一个用于Cortex-M系列的一个标准,主要是为了提供通用api接口来访问内核和一些片上外设,提高代码的可移植性。( }& a3 p  c* t
CMSIS有三个层:核内外设访问层Core Peripheral Access Layer(CPAL),中间件访问层Middleware Access Layer(MWAL),设备访问层(Device Peripheral Access Layer)。
* G# Y) x+ @8 pCPAL用于访问内核的寄存器和组件,如NVIC,调试系统等。该层是由ARM实现的。
% c( `4 d5 u, L: m' _MWAL用于对中间件的访问,现在该层还未实现。(也不知道所谓的中间件是什么东西)。
2 `, Y7 o1 M& Q) C3 I  ~6 FDPAL用于定义一些硬件寄存器的地址和一些外设访问函数,由芯片制造商实现。
+ B& A% s; u* T9 c6 Q; TCPAL层的实现就是Core_cm3.c文件,DPAL层的实现就是system_stm32f10x.c文件(似乎还应该加上外设的函数库)
; B1 T- M3 |: E' ]% a  g
' r7 U& ]' {7 m" _2 L8 q3. startup_stm32f10x_hd.s+ p/ r5 G7 F" n. X7 w
启动代码,由内核公司(ARM)提供,随着3.5的标准库同步发布,路径在:
% f- e; S, Z4 O6 w2 e/ P' P( `STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm
; S# E5 j& z/ l可以使用提供的,也可以自己修改。) [9 A1 {, ]) G& \

+ G* K. ]" H6 Z' u, j4. stm32f10x_conf.h + stm32f10x_it.c/h: A4 ^' S/ v' U/ z) Q5 m! U
这几个文件在ST官方发布3.5库的时候,并没有放在库代码里,而是放在工程应用层代码里。
# N) f+ J, X9 T" P1 Z5 @# ^8 n, Q比如:4 |) Q  q3 q0 ~9 }8 l! t

3 q' h2 g2 Q% O3 O7 aSTM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\USART\Printf
* b: `" n7 D( L+ b% v即放在了对应的项目工程中。
- c8 D6 R+ j1 k% |这么放其实是对的,因为其他的库函数接口是不会变化的,在用户实际使用过程中是不需要改动的,但是,这几个文件,虽然也是ST提供的,但是实际使用中,要根据不同项目做改动的,是和应用有关的。
0 x4 S1 T* L* R5 }) K
+ \6 p& K4 k# ~8 @8 |( K所以在实际使用中,所以只是移植了3.5库,还需要另外把这几个文件放进来。: O: N; i- q+ l* c; p7 b

2 L; D. F- v1 V6 @stm32f10x_conf.h" x; W9 i! U0 O. b. h* W! o8 b+ r
相当于是把所有的ST的3.5库的头文件都包含了一下,用户在上层调用的时候,不需要挨个去调用头文件,只需要打开这个文件的注释即可。9 \5 r9 P/ \! z  j0 X. p( g
stm32f10x_it.c/h
# P5 V$ b9 g9 X# i4 ~相当于所有中断函数入口,stm32f103的中断入口名称都是固定的,统一写在这里,方便移植。实际上,用户也可以不需要这个文件,把各自的中断函数放在各自的模块中即可,都是一样的。% z, F, ^3 e. \# B) A/ G& f3 y

, L2 b1 U6 X& K- F0 P0 V" l3 }0 N5. Stm32f10x.h. v; ^* i/ ~& H& J* ]
这个文件比较重要,看源码分析,主要功能是
7 Y9 O  {* R6 Y; T0 w1. 依据stm32的类型(主要是flash的大小),定义各种中断向量表的顺序
: ~* x. L2 B, ^3 B  G  `2. 定义数据类型
8 f1 c! F4 m, r. t3. 定义MCU外设相关的结构体
6 I  k! N% S  N/ y6 d6 v# X4. 定义外设在FLASH中的地址+ I( T0 t3 Y! x+ V- h' g0 h8 o' e# A
5. 进行外设寄存器的位定义3 ]/ p1 m4 S: o: B* M

, A# C1 J; `% b/ s. k3 i# g那这个文件从哪来的?谁提供的?
0 N: m  f% F9 b$ m3 x/ aStm32f10x.h是ST公司提供的,在3.5的库的DeviceSupport中可以找到
+ `& c8 ~2 i, E* s1 j9 u
0 K& x  y" P& I( Y  \3 BSTM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
2 Q1 \. a5 t+ o" D/ J
* ~- O, ]" ~! z/ V2 f1 Q, U, U$ j" `2.2 ST HAL库

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

2 {$ U: b" s( U, f; |) w8 I- \6 m8 S
! I$ |! A" [3 _. i
) g* \, Z, Y0 z
7 [) u! E0 v7 W
收藏 评论0 发布时间:2021-11-28 22:00

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版