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

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

[复制链接]
STMCU小助手 发布时间:2021-11-28 22:00
1. 前言
6 ?" d; }2 ~( T6 G, R4 h$ F随便找了一个以前写的Stm32的demo来练练手。# s& ]8 A: Y' M, v& ?
顺便先整理一下工程里面一些文件的作用,一直都是从DEMO中直接拿来用,还没有认真的理过。8 y5 [7 y- @2 ?. S* y6 S' p
misc.c
- Q! A9 A: b, Xcore_cm3.c/h# w3 K& |$ M* C. m  D% i
startup_stm32f10x_hd.s
5 L0 z; l6 q" t6 {- ystm32f10x_conf.h
  V% X8 `7 P! F! Z: ~  Dstm32f10x_it.c/h
1 B! U* l/ Q$ d3 Ksystem_stm32f10x.c/h
4 |5 h. g, M4 p! o# lstm32f10x.h" y$ N6 z3 B# t0 W9 G; ~
2. ST一些容易混淆的文件作用
2 X  `) t8 K$ N9 F2.1 ST 3.5标准库
: R4 n. m! d, N% r( z) z+ ?1 B标准库3.5可以从官网下载,也可以从CSDN(搜STM32F10x_StdPeriph_Lib_V3.5.0即可)下载。注意,要下载原版,而不是别人移植过的,这样对比你才知道改了什么。
) I' B7 L# {" X9 m
9 L3 q) `, L( h4 C- P" K在ST3.5库的使用中,大家会发现,除了把STM32F10x_StdPeriph_Driver的官方发布的库中的一些类似于stm32f10x_adc.c这样的stm32f10x_xxx.c和.h导入工程之外,还有另外几个文件,也需要导入工程才能使用,类似下图:
5 C. A* j- O. \- e
20200205154125515.png

' R7 \) B& L# c- l% t% \; Y. v. I
类似misc.c,命名比较特殊,还有core_cm3.c,system_stm32f10x.c等等?! E3 e0 y% v  V% O' ]# o/ D  P

! ]1 J4 r: W0 g那这几个文件,是从哪里来的?做什么用的?& T. p3 T' E+ x2 M: ?7 x2 C) q7 b( k

3 d( x: n! n1 D5 z- J/ N0 m; e/ R7 u让我们把这些特殊的文件列一下,缕一下来龙去脉。
8 d6 x: C- E1 m6 t4 Fmisc.c
9 N! i9 y8 q* m  C- Wcore_cm3.c/h2 y1 O( j7 J+ n; \8 ?6 t
system_stm32f10x.c/h. {# z9 R: I. h! E( k. w: q
startup_stm32f10x_hd.s
2 e  [0 l$ o5 astm32f10x_conf.h& |/ _# C- G7 |) a$ b2 W: L
stm32f10x_it.c/h9 [: M" d" f1 I6 I* `" }* y  g9 A
stm32f10x.h
! K6 M1 H* N4 ]: T( F一张别人的图。
0 T( [9 }& N5 `3 K) _5 b; T; R5 E8 h; c1 D
20200205165614129.png

8 x9 T. m( V7 [8 x2 Q5 i+ j
% R  m0 x. j$ E+ a- }3 e" M' n% f1. misc.c. M# s' F- L+ t, L: ?) Z5 k
misc.c的关系比较好理,是属于3.5标准库的一员。" U( ~0 i5 d+ p% U0 p
因为STM32 V3.5版本的库函数中没有原来版本中单独对于NVIC(中断向量嵌套)的外设驱动,把NVIC的外设驱动放在了misc.c中,实际上是代替原来的stm32f10x_nvic.c。+ W) h7 u) y' K- p$ k
从misc.c的发布位置就能看出,这个文件是和其他的stm32f10x_xxx.c是在一起的,只是名字风格不同而已。路径在:2 P0 e; P" X" X: l+ _  p9 S
6 G# I: n2 g* R  r2 l. Q
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src! d5 v9 Q0 d% S, V( b9 S

: }2 U* V; Y7 t
20200205153624434.png

- v% z" e/ K# }* s8 R6 h- R! ~5 ^* T7 y/ ]' K/ t- i$ ~* {4 C
2. core_cm3.c/h 和 system_stm32f10x.c/h- d, h6 g  F; c. h8 a4 O7 y2 N
core_cm3.c/h和 system_stm32f10x.c/h是内核支持API,由内核公司(ARM)提供,随着3.5的标准库同步发布,路径分别在
9 N! U2 {; C- F1 A" M* W. T5 G/ p- \6 R
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport
9 b( W: `' r+ z5 nSTM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x" w- W2 i! w" _
插一段话介绍下作用:, ^, f: I5 C" X! u  m( V4 K/ o* p
( g3 |" V6 Z& Q* H
CMSIS是Cortex微控制器软件接口标准(Cortex MicroController Software Interface Standard)的缩写,这个是ARM定制的一个用于Cortex-M系列的一个标准,主要是为了提供通用api接口来访问内核和一些片上外设,提高代码的可移植性。
* u9 e* m' a" [  i& }2 xCMSIS有三个层:核内外设访问层Core Peripheral Access Layer(CPAL),中间件访问层Middleware Access Layer(MWAL),设备访问层(Device Peripheral Access Layer)。
) g! W$ O. V+ i: y+ o) {CPAL用于访问内核的寄存器和组件,如NVIC,调试系统等。该层是由ARM实现的。. t' o4 {+ ]. g2 m. z
MWAL用于对中间件的访问,现在该层还未实现。(也不知道所谓的中间件是什么东西)。$ ?; h; e/ g+ w- d: q
DPAL用于定义一些硬件寄存器的地址和一些外设访问函数,由芯片制造商实现。
" S, h, ^, Z# J" `5 ?! n3 LCPAL层的实现就是Core_cm3.c文件,DPAL层的实现就是system_stm32f10x.c文件(似乎还应该加上外设的函数库)
7 h$ }; P4 y% G
& m% h* e# r# S" r* s3. startup_stm32f10x_hd.s
& N- ?) o  K. ^) q启动代码,由内核公司(ARM)提供,随着3.5的标准库同步发布,路径在:
( B( D  g  y. r, c7 p, Q! tSTM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm
$ }" w  T& z6 F9 N: T可以使用提供的,也可以自己修改。
* y4 C0 _/ N) T! {/ k! y1 y
- H6 o5 I# G+ h4. stm32f10x_conf.h + stm32f10x_it.c/h9 I! d- k# _/ K( T. ^  Y3 D
这几个文件在ST官方发布3.5库的时候,并没有放在库代码里,而是放在工程应用层代码里。" m& H" |2 S) E1 g
比如:$ Q& W) F5 E' Q$ V8 ~- ?2 G
0 ?+ a5 R) _) l* P3 \
STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\USART\Printf* i! H  z% ~4 T* S
即放在了对应的项目工程中。2 c  ]6 L/ M6 [) p6 h* R# U
这么放其实是对的,因为其他的库函数接口是不会变化的,在用户实际使用过程中是不需要改动的,但是,这几个文件,虽然也是ST提供的,但是实际使用中,要根据不同项目做改动的,是和应用有关的。5 |+ V0 h8 ^! S: c
4 d: h! {/ t# [. t4 ?0 W/ }# k
所以在实际使用中,所以只是移植了3.5库,还需要另外把这几个文件放进来。
) K! z; v. j( i, N1 |3 v% u9 b+ h  j% D3 G! o3 h8 w
stm32f10x_conf.h0 [2 @# ?5 C6 Q" l  I
相当于是把所有的ST的3.5库的头文件都包含了一下,用户在上层调用的时候,不需要挨个去调用头文件,只需要打开这个文件的注释即可。
1 @/ g: L, F5 Q: v- j# q  _stm32f10x_it.c/h- f1 p# z! X6 K* O6 v( D
相当于所有中断函数入口,stm32f103的中断入口名称都是固定的,统一写在这里,方便移植。实际上,用户也可以不需要这个文件,把各自的中断函数放在各自的模块中即可,都是一样的。- u4 O* Z, q! I; g7 S( J: q
3 p3 O" D5 U! r
5. Stm32f10x.h
6 N2 s0 ^3 t1 ~, w这个文件比较重要,看源码分析,主要功能是
% L3 y+ p4 N& m+ G* d, C2 s1. 依据stm32的类型(主要是flash的大小),定义各种中断向量表的顺序5 Q' W; s" w. L$ `
2. 定义数据类型2 `, @9 G( c7 g, M$ R5 V% y8 Z
3. 定义MCU外设相关的结构体7 b9 X+ z+ w; l2 E7 B* c
4. 定义外设在FLASH中的地址
' Y# G0 ~+ [+ O0 H9 Z$ l1 y4 _, ?5. 进行外设寄存器的位定义
. x; n" r# b5 }& g  X- V9 B1 [% c. [! R( c4 q7 L& ^
那这个文件从哪来的?谁提供的?$ b& w* K2 H' x
Stm32f10x.h是ST公司提供的,在3.5的库的DeviceSupport中可以找到, v0 I* S5 `: m; _# w9 `
& q2 e& z( k  o/ N2 G( o
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x( U6 f! p/ J1 n: T- D

) s2 h: n) a% C+ ~6 Y2.2 ST HAL库

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


) s  C  e2 l3 U
+ P" u, D6 @4 ]6 v4 ?7 S6 C0 _, n) o) r# W3 _, w( A- B4 L
% f8 E$ u& _3 K' {0 G
赞 收藏 评论0 发布时间:2021-11-28 22:00

举报

0个回答

所属标签

相似技术帖

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