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

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

[复制链接]
STMCU小助手 发布时间:2021-11-28 22:00
1. 前言+ t6 K0 M( I) C) O3 [- b4 p
随便找了一个以前写的Stm32的demo来练练手。
" T& ^" b! S( ?/ C顺便先整理一下工程里面一些文件的作用,一直都是从DEMO中直接拿来用,还没有认真的理过。5 D- n. J$ U) s" g6 @  g
misc.c7 z' |$ k, X# M, M4 o( ~) Z: g" c
core_cm3.c/h7 `) e1 [/ D) `& |; ]9 ?( p& |! N* i
startup_stm32f10x_hd.s
( z& i5 o# B; S! B5 Ostm32f10x_conf.h
1 q; q- J7 _; k) l5 sstm32f10x_it.c/h
2 Z* D1 A6 `- @+ D# V+ }9 A, T' |. [: Msystem_stm32f10x.c/h
9 B4 @$ M2 Q# Pstm32f10x.h- S0 ]' {" R8 Y. o
2. ST一些容易混淆的文件作用5 c, G, ?5 B: S- N" |% j3 ?
2.1 ST 3.5标准库
6 s9 C& y; A( n$ ?4 i5 ]标准库3.5可以从官网下载,也可以从CSDN(搜STM32F10x_StdPeriph_Lib_V3.5.0即可)下载。注意,要下载原版,而不是别人移植过的,这样对比你才知道改了什么。, d, I+ }, H: ^4 a. v( @3 P  {
1 f* w  D8 Y$ p: X
在ST3.5库的使用中,大家会发现,除了把STM32F10x_StdPeriph_Driver的官方发布的库中的一些类似于stm32f10x_adc.c这样的stm32f10x_xxx.c和.h导入工程之外,还有另外几个文件,也需要导入工程才能使用,类似下图:4 o: r; G4 ?$ G1 e: Y1 j
20200205154125515.png
  Q* w& O0 l% B+ k9 ]+ B8 a+ _/ |
0 O3 \/ w1 k  M* x) r" i& J! P7 g8 X% q
类似misc.c,命名比较特殊,还有core_cm3.c,system_stm32f10x.c等等?
4 O9 M+ w2 a; _3 R$ \
! L0 l2 a) A3 e! q0 o那这几个文件,是从哪里来的?做什么用的?
( _: R, T+ Q7 j8 G9 Q- H) I6 t2 _2 c% y' T- S1 n7 w4 ]
让我们把这些特殊的文件列一下,缕一下来龙去脉。8 x: G2 z0 z) m0 r
misc.c3 `. |3 ^- @0 A3 B8 n( T  K
core_cm3.c/h
& W2 e" _3 M& }. i) C; H" Q" Tsystem_stm32f10x.c/h  I: R; ?8 t/ I, |7 W2 h
startup_stm32f10x_hd.s) f5 k1 x  b8 n" ~9 U5 E* c3 c
stm32f10x_conf.h8 {( H. M" B. d, s0 O* M7 o8 P
stm32f10x_it.c/h
+ q. T3 v+ Q3 A* R) L4 vstm32f10x.h
, v7 a. J& p- c% l2 q一张别人的图。2 w; z5 O" {( T+ K; x
1 n; _% y; m  ?$ e1 n- @
20200205165614129.png

8 B: a1 a$ P$ ^4 p& Z. C; i0 v7 G0 t* h* d, ^% I4 B6 `0 s" \
1. misc.c
7 c# m. i2 S/ O1 y" Y% K7 x" B; jmisc.c的关系比较好理,是属于3.5标准库的一员。0 A) A0 F) q/ F( ~
因为STM32 V3.5版本的库函数中没有原来版本中单独对于NVIC(中断向量嵌套)的外设驱动,把NVIC的外设驱动放在了misc.c中,实际上是代替原来的stm32f10x_nvic.c。
) d+ I4 Y, M( u6 S; ~从misc.c的发布位置就能看出,这个文件是和其他的stm32f10x_xxx.c是在一起的,只是名字风格不同而已。路径在:
- z5 g6 U" e4 u( X: A; S
  T+ E/ h2 v/ `5 P  R! YSTM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src
$ h' N4 z  Z* [, B' D: f! |' N3 k; v
) {$ |4 N  n* ^1 C- I
20200205153624434.png

2 D" S4 x" z3 j$ U1 i( H. ]/ L
2 R! E! A( a0 {2. core_cm3.c/h 和 system_stm32f10x.c/h
. r6 f5 ^3 h; h% E9 s5 Rcore_cm3.c/h和 system_stm32f10x.c/h是内核支持API,由内核公司(ARM)提供,随着3.5的标准库同步发布,路径分别在( D: U6 \) c# N9 f3 ?2 T3 ~# u

; a0 ]8 h# w" P6 y8 @% c) l' e7 rSTM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport+ C8 C" ]' ]: A
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
: [' L! [! d$ C, G. P& u插一段话介绍下作用:# S. t, x$ Q7 |  M

$ J4 b& v( G" g, ?) U( {CMSIS是Cortex微控制器软件接口标准(Cortex MicroController Software Interface Standard)的缩写,这个是ARM定制的一个用于Cortex-M系列的一个标准,主要是为了提供通用api接口来访问内核和一些片上外设,提高代码的可移植性。3 O4 ^8 f$ f6 u' v1 d, M8 ?
CMSIS有三个层:核内外设访问层Core Peripheral Access Layer(CPAL),中间件访问层Middleware Access Layer(MWAL),设备访问层(Device Peripheral Access Layer)。1 b; d3 }5 K: l8 f% j
CPAL用于访问内核的寄存器和组件,如NVIC,调试系统等。该层是由ARM实现的。
) T  ~. W, p6 p, Y) U0 x; }) B# KMWAL用于对中间件的访问,现在该层还未实现。(也不知道所谓的中间件是什么东西)。
6 H. n9 A. O! B! ^1 FDPAL用于定义一些硬件寄存器的地址和一些外设访问函数,由芯片制造商实现。
) N4 S1 U1 o; U( u2 DCPAL层的实现就是Core_cm3.c文件,DPAL层的实现就是system_stm32f10x.c文件(似乎还应该加上外设的函数库)( W  G) R' f7 H

: x3 g1 L$ I9 t3. startup_stm32f10x_hd.s, ^/ S8 B2 K& v7 s9 ^
启动代码,由内核公司(ARM)提供,随着3.5的标准库同步发布,路径在:* G: L. r5 [- b7 f" J
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm+ Q, U' L: q: U
可以使用提供的,也可以自己修改。
% Z; L3 S0 I6 |; c% Y5 Y7 h, ^2 B. \  L0 V1 Y( q4 @% {0 L
4. stm32f10x_conf.h + stm32f10x_it.c/h2 m9 \/ ^; P' u) f
这几个文件在ST官方发布3.5库的时候,并没有放在库代码里,而是放在工程应用层代码里。
. v1 j, u* X' `$ ^- l比如:
% b% f2 y  H! ?9 D% h. E- I  h' S- j; z% v* O+ A+ z- j- O
STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\USART\Printf
3 M( C: s3 z3 h8 h& w) {即放在了对应的项目工程中。
8 b4 ~- g& x5 |2 v! H6 O这么放其实是对的,因为其他的库函数接口是不会变化的,在用户实际使用过程中是不需要改动的,但是,这几个文件,虽然也是ST提供的,但是实际使用中,要根据不同项目做改动的,是和应用有关的。
  [& R9 ]/ U9 L$ g' Y: O1 a5 o7 ~2 T
所以在实际使用中,所以只是移植了3.5库,还需要另外把这几个文件放进来。+ I0 \# u' U; _8 a$ A3 I# X, F4 ]0 d

# G. }! q! K" G+ f3 w3 V# Q% {stm32f10x_conf.h# u6 O% A) d( \) w6 N5 K1 u, K
相当于是把所有的ST的3.5库的头文件都包含了一下,用户在上层调用的时候,不需要挨个去调用头文件,只需要打开这个文件的注释即可。
7 {( x) e* z$ p; ostm32f10x_it.c/h
; k; l+ N% ?- f4 ~2 t相当于所有中断函数入口,stm32f103的中断入口名称都是固定的,统一写在这里,方便移植。实际上,用户也可以不需要这个文件,把各自的中断函数放在各自的模块中即可,都是一样的。2 t5 V/ N% R3 V; ^+ r& M$ f2 B9 ~
, h: j& S( p- ^: S7 B# w) w
5. Stm32f10x.h3 ^4 Z+ y9 E$ ^( g3 w$ k7 R5 M
这个文件比较重要,看源码分析,主要功能是  J/ B7 |: n, u( H" w
1. 依据stm32的类型(主要是flash的大小),定义各种中断向量表的顺序; P& A) j% V0 B0 ~7 E+ s
2. 定义数据类型5 a2 P* H4 ]8 d2 X6 J
3. 定义MCU外设相关的结构体
! p5 |9 e1 r  {4. 定义外设在FLASH中的地址6 s2 s( x. Z+ ]! X
5. 进行外设寄存器的位定义, |7 `" N( u, v5 y  s6 E- k  {. t% b
8 A+ J; ^9 T1 P0 u# Y
那这个文件从哪来的?谁提供的?
2 o0 A0 v% h; ZStm32f10x.h是ST公司提供的,在3.5的库的DeviceSupport中可以找到
$ w+ }$ P% G! Q3 t" F- r) |5 E: ?2 {" M7 Y2 [6 M
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x. L8 J* I6 T( U$ _9 \  P9 R
; c0 S0 e$ l- @* [7 d
2.2 ST HAL库

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


- T' s- |5 o2 r0 _$ G6 X" g
+ a# l; O6 Y8 u! k7 S
' L" o+ {+ ]6 K& I9 ~8 l7 o& R5 u* b- O+ Z
赞 收藏 评论0 发布时间:2021-11-28 22:00

举报

0个回答

所属标签

相似技术帖

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