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

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

[复制链接]
STMCU小助手 发布时间:2021-7-7 11:32
STM32的单片机中,同一系列(如F0、F1、F4)不同型号(拿F1来说,如F103xB、F103xC、F103xE等)的芯片FLASH大小、RAM大小、外设会有所差异,但一般在程序编程的时候,这些芯片之间是可以互换的,只需要修改成对应的启动文件即可,而不需要在换了一个芯片后,又重新建立工程,将代码重新复制一遍。自己就干过这种蠢事,所以记忆比较深刻。在修改工程时候,需要知道芯片的容量大小、引脚数据等,这些都可以通过芯片的具体型号看出来。
' n; m1 o5 q' x+ x% Q* H 1625628260(1).png
- K8 V" M0 p" v( ~
7 ^0 |; s, D- I. X+ Y9 y
+ o! x8 U5 O, ~- `# C: d$ I
1、STM32芯片命名规则, {( J+ A. ?. g7 b# N
1625628297(1).png
3 Y' x6 E. v- n; p1 w# m2 O3 y9 u" `& m3 ?
+ E" \; J% K. |" Z/ T3 g( d
“R”:芯片引脚数量,常用的有C(48)、R(64)、V(100)、Z(144)
& U" f; L0 l6 M  m* W& ?, }
4 ~3 f1 r' Q; T% _  K

( d( I  J5 L0 U. r# K# q“8”:芯片容量,常用的有8(64K)、B(128K)、C(256K)、E(512K)
& u' W5 ?: T; b" o' I) Y
; ?9 }: ~5 h9 U; }
5 S% `$ J9 L$ w7 F7 V  D; V

, O! N# V0 c8 z# ^' Y5 I) p2、芯片容量(常用的F1系列)
- V5 S8 M2 Z' y  u6 d* g 1625628328(1).png
/ E9 N  Z5 S) R" q' N7 G& q
( a, {0 u1 n0 ^' M3 B1 f
" p6 R" V) R. l6 B
小容量产品:是指闪存存储器容量在16K至32K字节之间的STM32F101xx、STM32F102xx和STM32F103xx微控制器。. b  Y7 j& I: [& r& r4 }0 `9 O
4 @# X* p& _- m1 `3 L

; M: {; @, i# K6 @8 Z中容量产品:是指闪存存储器容量在64K至128K字节之间的STM32F101xx、STM32F102xx和STM32F103xx微控制器。
5 k7 y* U) Z; J0 K$ p* @7 Y- V3 }6 I. s2 D0 g% l( X& l8 V+ r
% x4 W1 @) u# ]0 J
大容量产品:是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控制器。7 B& r3 m4 |* _; |) Q8 v
4 X8 m1 `7 A  i4 P- ~
8 p: K7 P$ w; }5 ~$ T) f
互联型产品:是指STM32F105xx和STM32F107xx微控制器% C) w# b/ H& Z: c# R0 z
1625628356(1).png
0 Q  }4 ?- x" l小容量+ R2 v3 c: C) g0 K% D' C  b

: h8 D; m  E3 \+ B" Q0 h0 B" A: w
1 @' B$ d; j9 @% M) _- y
4(16K)、5(24K)、6(32K)
3 c# Y- Y' r# b3 V. m
- h- u0 x" y, G& O( Z# x- y

2 g" s* d" _6 ?- w' _中容量
! p' P1 s  o7 g, V8 v' d
) x" L6 K+ G# c. ~

: d! U9 ~# M$ o/ W8(64K)、9(72K)、A(96K)、B(128K)  E( K) S: n9 D, d" G1 z6 ^' ?( q, A
  l4 a, {  O1 `  H0 V% W( C3 P. O
  V$ n( F! K% P
大容量
$ K2 c4 a' ^( ^( y  u, a- t$ i9 `3 f, R8 o' r4 Q

6 d( T) v5 g% p1 \' Z% lC(256K)、D(384K)、E(512K)* ]$ x, r- G( |& D* T  _4 f2 ?

7 g) Y( R( V# {; Q1 r# x  b  S
6 \0 V: P3 C4 s  R" @' {& h
超大容量
; M. P. g% S0 `
! U% b6 r# O, i
) {' W1 J/ g. A
F(768K)、G(1024K)
$ _% T/ M9 a& F. [+ w
9 Y) t+ a& p  i  n$ M

" M) ]& M. o6 j. Q4 N1 ]3 _, A注意:对于F1系列的芯片大容量产品的RAM主存储器每页大小为2K,如【下图】,而中容量和小容量的产品每页大小只有1K。1 i5 g* L/ r; _. ?0 S
1625628394(1).png - e. _  @/ F! F/ V- P5 u# w" M

3 T& X5 `6 W4 e4 s+ C
$ W0 E; Y: i5 x' i3、同系列(STM32F1来说)不同型号之间程序移植5 V2 R, }9 {. o7 |1 x
同系列不同型号的单片机之间程序移植相对好改,修改和需注意内容如下:* j# k1 X. C. {# d+ e7 `
" i& z7 W$ g! S% A1 s* s$ e
1 U+ U) l. ^2 x# w; o8 y1 U
① 修改工程的device设备为对应的单片机型号4 t5 M% t5 V1 k2 F2 t

( G* e; A: i! W" S- W8 G: v) K: C% @* Z

  q' c. L/ P# F8 V, N" {/ |② 修改工程的启动文件(注意:标志库和hal的启动文件位置和命名是不一样的)! O4 {: }3 }4 A) ~% b

! F7 A& p5 u' m6 y( E( b

  k( y+ j  C$ w2 k! f% M- w7 mST提供的V4.2.0版本的hal库中,启动文件存放在 .\CMSIS\Device\ST\STM32F1xx\Source\Templates 文件夹下,有arm、gcc、iar编译器下对应的启动文件,启动文件不是按照芯片的具体型号来定义的,而是按芯片相同容量的最大容量定义的,同系列相同容量的芯片公用同一个启动文件,有小容量的x6、中容量的xb、大容量的xe、超大容量的xg; Z6 X# s7 |  y
1625628441(1).png " f4 n- Y5 y" ?4 r
- m& X& F& Z; I# ~1 ^
/ l4 Q: G" l# }% f$ m0 Z
2 Z! t1 f1 O. ~+ T# _- [8 i0 ?

* o& d9 S2 U% o9 r' z2 E. XST提供的V3.5.0版本的STD库中,启动文件存放在 .\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup 文件夹下,有arm、gcc、iar、TrueSTUDIO编译器下对应的启动文件,启动文件不是按照芯片的具体型号来定义的,而是按芯片容量,同系列相同容量的芯片公用同一个启动文件,有小容量的ld、中容量的md、大容量的hd、互联型cl、超高密度型xi。
# @6 ~, l% b+ \' l% U& S5 A
4 q4 ~5 C6 c- a( x! k, m+ u3 F
5 r. D3 R; c6 `
大中小之外还有后面跟vl、cl 、 xl后缀 的文件9 @3 A6 j! i. W6 d( f4 q7 l5 w4 u& `" A
4 F/ J" S% G; z4 N+ Z  _( L+ o
8 d% o  M& V9 {" o& R
CL:connective line 指的是互联型产品  stm32f105xx和stm32f107xx 系列; |" Y# R* _2 W" k/ r

' r) L% o0 C3 }; k' p
) B! R6 _* c' q$ j; h/ i3 j# X
Xl :extreme line 超高密度型 产品  这种应该是stm32f101xx和stm32f103xx容量在MB级别的产品/ O; r# ?& t6 {1 |( a

& K  A+ ]+ m- x1 n

/ s9 @5 X5 O8 @. r3 ZVL:valuable line 超值型 产品 这种是 stm32f100系列 " W( n6 \5 Z" G1 U6 @6 ]# ^

- o( V, C; D5 a0 [. m& m7 E

; G1 }( w. M! g- C7 H 1625628490(1).png : b  X% L( n" g+ Z

' z+ h3 y7 n  w. Z3 _: J2 z0 [* q
# g/ s+ W) p' `
③ 在 Target(Keil编译器中) 或 Linker(IAR编译器中)选项栏中修改芯片的具体FLASH大小和RAM大小# U  W* u. x- E) w+ E' Y! G
1625628525(1).png ( Z! e* m9 E, }
④ 修改默认添加宏,这里默认添加宏的作用是在 stm32fzxx.h文件中能自动将芯片对应的头文件添加进工程中,这里的宏定义在标准库和hal库中定义也是不一样的,
5 c/ i5 N1 A9 U2 N8 b2 n) t 1625628548(1).png
! r& O$ A9 j8 K9 P在V4.2.0版本的hal库中是这样定义的:STM32F103x6、STM32F103xB、STM32F103xE...;而在V3.5.0版本的STD库中是这样定义的:STM32F10X_LD、STM32F10X_MD、STM32F10X_HD...。刚好跟各自的库启动文件名称是对应的,下图是以hal库为例的
4 a+ X$ x- A' }1 [7 w; |" V0 A  Z+ g/ C
0 _# ?, B  c, r- x: j; [

点评

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

举报

2个回答
ghost110 回答时间:2021-7-7 13:14:35
这下选择可是方便多了。3 R9 W0 N4 m0 O. [+ B

所属标签

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