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

STM32单片机不同型号之间程序适配

[复制链接]
STMCU小助手 发布时间:2021-7-7 11:32
STM32的单片机中,同一系列(如F0、F1、F4)不同型号(拿F1来说,如F103xB、F103xC、F103xE等)的芯片FLASH大小、RAM大小、外设会有所差异,但一般在程序编程的时候,这些芯片之间是可以互换的,只需要修改成对应的启动文件即可,而不需要在换了一个芯片后,又重新建立工程,将代码重新复制一遍。自己就干过这种蠢事,所以记忆比较深刻。在修改工程时候,需要知道芯片的容量大小、引脚数据等,这些都可以通过芯片的具体型号看出来。
& ~7 A# m" _! l8 F 1625628260(1).png
7 \4 q; ~2 I% Y! T" D! G2 b7 F: g9 d* i" x
4 J( o# X  s4 L) O% }: b$ {
1、STM32芯片命名规则
1 N- u5 Q9 H/ {' c# } 1625628297(1).png ; H3 U9 O# x7 I3 h
  A9 R$ k  n. d7 j0 o8 L

$ e+ \8 W% c6 S, y- i“R”:芯片引脚数量,常用的有C(48)、R(64)、V(100)、Z(144)
; _8 m* R. ^! \8 @0 W& N( [3 o8 x  {6 o7 d3 F

) Y5 I. W1 r5 ?! b2 n- }  D“8”:芯片容量,常用的有8(64K)、B(128K)、C(256K)、E(512K)
9 ]6 _- ?7 r- B$ o" f: |' U& h5 z+ W6 x+ z& F1 U

' {, p1 u7 C  S 2 H3 x, r) S+ ?
2、芯片容量(常用的F1系列)
  A, k9 k& k% k( g 1625628328(1).png * X3 k8 G6 L$ u( b- I) G

. Z, v  B1 s3 n+ P2 W. ]

* F! `- j# E2 s% I小容量产品:是指闪存存储器容量在16K至32K字节之间的STM32F101xx、STM32F102xx和STM32F103xx微控制器。: l0 X! i( K6 D( x$ ~
$ G. ^5 R0 d' \( Q4 S! k

2 m4 z' X0 @& V- Q! U2 j中容量产品:是指闪存存储器容量在64K至128K字节之间的STM32F101xx、STM32F102xx和STM32F103xx微控制器。8 k1 g4 c$ _+ Y7 t( D- y
) B0 Y: k* A3 o6 E9 A
! x7 e1 B0 A$ A2 i4 Y) n8 p
大容量产品:是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控制器。
( E- m% B) W6 j! q8 w$ n
1 Z3 o5 t# P# I" N

' o# ?8 s& A3 {" ~互联型产品:是指STM32F105xx和STM32F107xx微控制器
; s4 L! \, q5 _ 1625628356(1).png 1 D( m. R+ D/ x3 I8 h
小容量- w0 q- ?; Z, S9 e& Z' }$ e: z, }

( ~4 A! i9 d7 F, |6 M

# P% l- z9 Q& U; R% R* E9 x. `. e  X4(16K)、5(24K)、6(32K)
' v6 Y" d2 Q/ g8 k# k' Z! W& u/ _. W6 C' [% V
0 l9 P* y1 x# C1 S; D2 L
中容量3 v% f; [  U2 S& F
: w4 v& D6 u7 i8 \" w2 H
3 R8 j& S0 G/ K( m5 o) z
8(64K)、9(72K)、A(96K)、B(128K)! S* n1 q0 C1 P
4 V: f! C( X2 g% J
# g* y6 Z. c, r7 e
大容量
; d0 t( _* ~5 p! \' v: k; ~
: Z% B) r6 r8 ?* k9 j
/ v# F  V& J: f
C(256K)、D(384K)、E(512K)
: m8 v$ ?3 h3 H: O
5 @- P- I: c- e' n- W
. G/ M! ^( M% n4 }
超大容量
0 W2 f* P2 |; @$ o5 a% P( s. o; L' G$ |+ n9 U) [# `
4 G; e+ C; h: [6 j
F(768K)、G(1024K)
* F) v( l. {7 K5 I$ J
$ \8 t( A- Y# V! e9 o! L2 W# v3 K& j
; N. k2 J- Y8 \
注意:对于F1系列的芯片大容量产品的RAM主存储器每页大小为2K,如【下图】,而中容量和小容量的产品每页大小只有1K。& k6 }$ P9 j9 D( p( l( J0 r7 i
1625628394(1).png 2 Y5 H4 x2 f# V4 n6 m  \
8 s, l' I* ^1 Y+ f; r6 p

) i4 Q: I( w# D% |3、同系列(STM32F1来说)不同型号之间程序移植! B1 C) l4 l: g9 J) d0 k$ r
同系列不同型号的单片机之间程序移植相对好改,修改和需注意内容如下:
9 ~6 R! n( s" J9 B5 |
6 k/ F, q# y' |8 z
/ ]' C4 g. N) D
① 修改工程的device设备为对应的单片机型号
1 X2 u, K3 K7 u. m9 C0 W/ Z& T$ W  t( S- G6 o; D

- T7 o, D! s; r② 修改工程的启动文件(注意:标志库和hal的启动文件位置和命名是不一样的)
& \  N! ]( H" A# Z; r/ W9 F5 b: r# J# ~3 A( C- D& t2 a

8 {2 `- j" f  |+ r, c8 G! B0 {" |ST提供的V4.2.0版本的hal库中,启动文件存放在 .\CMSIS\Device\ST\STM32F1xx\Source\Templates 文件夹下,有arm、gcc、iar编译器下对应的启动文件,启动文件不是按照芯片的具体型号来定义的,而是按芯片相同容量的最大容量定义的,同系列相同容量的芯片公用同一个启动文件,有小容量的x6、中容量的xb、大容量的xe、超大容量的xg
* p. ?+ S/ I' e- e 1625628441(1).png ; Z0 \9 K6 J) l8 X% k, o

# I/ L% y$ s4 J. p
6 J. Q# c+ F5 P! s- {2 d' \

6 x* h/ W, ?$ w% m! d
5 i/ q! a0 P" N+ a- l& G
ST提供的V3.5.0版本的STD库中,启动文件存放在 .\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup 文件夹下,有arm、gcc、iar、TrueSTUDIO编译器下对应的启动文件,启动文件不是按照芯片的具体型号来定义的,而是按芯片容量,同系列相同容量的芯片公用同一个启动文件,有小容量的ld、中容量的md、大容量的hd、互联型cl、超高密度型xi。; W2 r& v0 i+ k  _
+ Q% Q( ?. L7 f/ R6 C
" c# E9 h6 o, T& W' C
大中小之外还有后面跟vl、cl 、 xl后缀 的文件( }% G+ X/ V' q. W4 A
# M, A! y7 M; f. k, u
: h5 J' t! Y- j% A3 A% F  E
CL:connective line 指的是互联型产品  stm32f105xx和stm32f107xx 系列+ g  \& |- Z4 u0 W: [# r: {

$ ]) N/ ?( G( i! ]( B. i# X
8 j" S3 A% p+ [2 c; B, O: V! K
Xl :extreme line 超高密度型 产品  这种应该是stm32f101xx和stm32f103xx容量在MB级别的产品+ U& o1 I# p% x9 I4 S( x
) l: O9 }4 H1 D& E! A5 B' v

+ R0 I, q- u4 p+ W: wVL:valuable line 超值型 产品 这种是 stm32f100系列
0 l5 I$ a0 Y4 R  U3 S( F* U4 q2 e
3 R+ h; f" H( z0 z" Y
  F8 k( R' m7 A7 x7 g- }
1625628490(1).png
  X; d2 U, C" B6 z/ \8 D( L  u: ^. v' J# l8 H
+ E4 _! R6 d0 c1 M$ Q1 \5 T
③ 在 Target(Keil编译器中) 或 Linker(IAR编译器中)选项栏中修改芯片的具体FLASH大小和RAM大小, o2 h; G1 r/ F! T
1625628525(1).png # a$ ?- i$ e  V& ~. v
④ 修改默认添加宏,这里默认添加宏的作用是在 stm32fzxx.h文件中能自动将芯片对应的头文件添加进工程中,这里的宏定义在标准库和hal库中定义也是不一样的,' ^$ q1 l9 B$ j' V; I, V
1625628548(1).png ) X, L$ z; I( E" k& N
在V4.2.0版本的hal库中是这样定义的:STM32F103x6、STM32F103xB、STM32F103xE...;而在V3.5.0版本的STD库中是这样定义的:STM32F10X_LD、STM32F10X_MD、STM32F10X_HD...。刚好跟各自的库启动文件名称是对应的,下图是以hal库为例的$ l+ {9 u6 ]4 ^& D

8 f, r& K( I( b$ M) W
" i" u* _5 Q  H$ ]  ?0 U

点评

辛苦了,确实是好数据。不过好像没完啊  发表于 2021-7-7 13:15
收藏 评论2 发布时间:2021-7-7 11:32

举报

2个回答
ghost110 回答时间:2021-7-7 13:14:35
这下选择可是方便多了。
( v" S2 c2 v9 T  m' F$ U' b. n& Q

所属标签

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