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

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

[复制链接]
STMCU小助手 发布时间:2021-7-7 11:32
STM32的单片机中,同一系列(如F0、F1、F4)不同型号(拿F1来说,如F103xB、F103xC、F103xE等)的芯片FLASH大小、RAM大小、外设会有所差异,但一般在程序编程的时候,这些芯片之间是可以互换的,只需要修改成对应的启动文件即可,而不需要在换了一个芯片后,又重新建立工程,将代码重新复制一遍。自己就干过这种蠢事,所以记忆比较深刻。在修改工程时候,需要知道芯片的容量大小、引脚数据等,这些都可以通过芯片的具体型号看出来。
. ?% l! G8 ?& Z1 F+ M 1625628260(1).png ) S2 m' ?/ ^- R# K" M! U3 [; N- Q

' `- q, H' p) S) N

' g& X' F5 v7 Y% ^1 Y5 A  f1、STM32芯片命名规则
8 l# R) U( A9 A 1625628297(1).png
; Z3 \( p7 j: T6 u0 p
3 z( z/ d5 k% F- J

1 K" J, k  B6 R9 r$ M0 i“R”:芯片引脚数量,常用的有C(48)、R(64)、V(100)、Z(144): g# F( q7 F* E+ G
0 L6 a" \/ }$ E# A

6 l! l) W! D- ^5 v: L. D' w0 [“8”:芯片容量,常用的有8(64K)、B(128K)、C(256K)、E(512K)  U" d" ]: B3 \: L* g0 F: }1 I

- I. M- E2 V- U( C
. H' T1 r- R6 U# E

  U. U  }( Y8 k0 p2、芯片容量(常用的F1系列)
. \! k. P* h2 t- B- \ 1625628328(1).png
' e- ?( b1 P! a& R3 B% A) F# }, I9 }: z5 p

  X6 K  E2 A& J小容量产品:是指闪存存储器容量在16K至32K字节之间的STM32F101xx、STM32F102xx和STM32F103xx微控制器。6 R9 b5 C8 [3 t! p0 ?  r- s
# w* C6 k' G- Q1 J

/ N" _8 k6 f; ]) G* X4 C中容量产品:是指闪存存储器容量在64K至128K字节之间的STM32F101xx、STM32F102xx和STM32F103xx微控制器。/ ^( {0 ?4 D: {6 z% t. w

  m& T/ A# x$ G7 ^& Y2 h

" ^- v& E8 u8 [: e# o大容量产品:是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控制器。; {0 d, ~1 r* i9 ~' z" x

8 j7 v# s" M* b# x# N
$ l. C) g% |2 Y7 ~, L
互联型产品:是指STM32F105xx和STM32F107xx微控制器/ p2 o. X4 j& e0 A1 H
1625628356(1).png
3 Q. ~3 r; N$ c* B* D小容量
3 x/ U) q0 \: o) N! D. u7 o7 k
8 w3 p$ ]: L% n. \1 z# E; g
1 i+ _9 ]4 @- I9 h8 P; V% _
4(16K)、5(24K)、6(32K)
- {) n, t1 p; m8 b# B; [' {4 {  \: a# F4 u
; h; V9 ?. ^0 o$ |0 A# f% o% k/ Z

/ }7 m% ?$ d) a中容量
* ]0 ?3 t: G9 N! T9 V) E2 Y8 s( U, ?0 V+ Z6 \/ |- _: k& Y
0 U& `4 |; T5 P+ P! L
8(64K)、9(72K)、A(96K)、B(128K)* h9 e1 p  e9 Q; V7 E
3 [- L2 y, M2 \8 @3 L; z
3 @" J" }: K, \2 {
大容量
! V( i( i$ d1 ^7 i! r
% a7 d  _! T2 p) k
; H* d" A3 ?: S- \( t  H- I9 ?
C(256K)、D(384K)、E(512K)
) M* G/ M- U3 ^+ J2 W/ x$ k* N4 w  L. D5 ~( D

1 c9 d; B% y# \超大容量
" U. ^4 A) p4 Y- c; R7 A; F1 W* \, ^" z# x
' `8 ]- K' P$ l2 w
F(768K)、G(1024K)) l4 b( J1 \' b5 ?( j# @4 b

5 ]( f' m" I) ^1 M0 ^

/ D3 A- |, y/ O$ J0 _5 g; Q注意:对于F1系列的芯片大容量产品的RAM主存储器每页大小为2K,如【下图】,而中容量和小容量的产品每页大小只有1K。# I/ L. w) }# \  d+ ?- r
1625628394(1).png 6 z% r1 ~' S* b* B6 m' f" M

3 J3 ^: _( j" D+ A6 c* g
+ h3 W2 G% T" H7 u3 P! ~3、同系列(STM32F1来说)不同型号之间程序移植
. A5 H& Z6 N+ ~0 v% i! K) P同系列不同型号的单片机之间程序移植相对好改,修改和需注意内容如下:
) i, V9 m# U7 A* ^( ^7 C. p6 r" G- k- N1 H/ Z
- `7 V) W* g% A0 `* {$ w
① 修改工程的device设备为对应的单片机型号& ]1 n* F6 |1 Q8 D

+ f6 `! W6 ~) ~. I" N
1 q  p. R8 }5 y! U$ ?
② 修改工程的启动文件(注意:标志库和hal的启动文件位置和命名是不一样的)0 I3 d( r0 o; |9 I: {! E

9 H1 @+ k* X+ b0 }" |

( L, ~0 v: o5 |$ z4 \9 k7 GST提供的V4.2.0版本的hal库中,启动文件存放在 .\CMSIS\Device\ST\STM32F1xx\Source\Templates 文件夹下,有arm、gcc、iar编译器下对应的启动文件,启动文件不是按照芯片的具体型号来定义的,而是按芯片相同容量的最大容量定义的,同系列相同容量的芯片公用同一个启动文件,有小容量的x6、中容量的xb、大容量的xe、超大容量的xg
# a7 l! f0 m" c5 n, ? 1625628441(1).png
- m9 D  V1 N1 A, c
+ M* z' A: ]1 W3 S3 T8 m

: T/ R/ m6 U2 M& D+ h: Y$ o, n
5 L4 C# X' A, R$ d- b7 j4 p

& E/ N- N8 ^5 Z2 x% A( N# EST提供的V3.5.0版本的STD库中,启动文件存放在 .\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup 文件夹下,有arm、gcc、iar、TrueSTUDIO编译器下对应的启动文件,启动文件不是按照芯片的具体型号来定义的,而是按芯片容量,同系列相同容量的芯片公用同一个启动文件,有小容量的ld、中容量的md、大容量的hd、互联型cl、超高密度型xi。+ b* V+ A5 }" G

6 N, ~( W- `# V- b! t+ ^

3 t/ h& E, c2 s( q: T大中小之外还有后面跟vl、cl 、 xl后缀 的文件2 O" X9 J: U) n+ v; j/ R! p, R
) n+ b9 Z: J9 [* i7 u5 D

3 r3 C: `( d* q* \- ?. aCL:connective line 指的是互联型产品  stm32f105xx和stm32f107xx 系列
% Y- h' E" P' Q/ `+ G" \! b, [8 g; f0 b3 g
; m) ^, a1 ?' U' ]
- S" Z$ k' \7 s2 O9 p
Xl :extreme line 超高密度型 产品  这种应该是stm32f101xx和stm32f103xx容量在MB级别的产品* \' }, O" L1 M. K+ b( q' e% H
7 h* D! ]" e1 m2 ]

/ K; ]1 f& Y5 r( T9 z9 nVL:valuable line 超值型 产品 这种是 stm32f100系列
! R9 k' X: M1 T' Q  h+ o. p" `
0 G5 U" C. ]' F" P9 }: R& [

( y% O/ U% ?7 P& \1 P 1625628490(1).png
" ]5 J- `& F' `# `1 [$ q! ^9 e* M$ x
  @. D: w& `1 ?6 e$ Q
5 b; H$ H4 |9 b1 l
③ 在 Target(Keil编译器中) 或 Linker(IAR编译器中)选项栏中修改芯片的具体FLASH大小和RAM大小
" e! _. p6 O. B# [" B% s+ b, J 1625628525(1).png . O1 ~1 ?8 K4 q
④ 修改默认添加宏,这里默认添加宏的作用是在 stm32fzxx.h文件中能自动将芯片对应的头文件添加进工程中,这里的宏定义在标准库和hal库中定义也是不一样的,
" K9 z( V7 X; l" Z: X8 p# U7 E 1625628548(1).png : r) d" C  x/ G" F' L( F9 i
在V4.2.0版本的hal库中是这样定义的:STM32F103x6、STM32F103xB、STM32F103xE...;而在V3.5.0版本的STD库中是这样定义的:STM32F10X_LD、STM32F10X_MD、STM32F10X_HD...。刚好跟各自的库启动文件名称是对应的,下图是以hal库为例的" G( z  [. H: ]; ^$ S: n
; }2 \& O6 p6 u! s8 j5 L
& l8 o, y+ o, h/ C+ v  c# a4 L

点评

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

举报

2个回答
ghost110 回答时间:2021-7-7 13:14:35
这下选择可是方便多了。) P' V4 |1 M1 l* A5 |. U* n) _
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版