在替换芯片时,发现STM32f103与STM32F030的区别:
- K+ z ^. E. Q内部结构" u+ @/ x0 P0 z2 }
下图是103的IO口内部结构:* s5 U, i: ?8 k& G' j4 |
/ h& l! u9 ^1 J+ t6 ^
) ]& r' k8 w9 U x/ Q3 F/ `2 K下图是030的IO口内部结构图:
( I) J" H% q& W% X) }1 h* }+ w3 j& w- N, ]6 h) Z3 [
. q* ]& ^+ P2 n) N
% O* ]7 T* z; f: t+ I
通过上面的比较可以看出:5 U- V3 \; z: n+ B Z0 V
两个系列从基本结构图上可以看到最大的差异就是上拉下拉电阻的位置有区别。2 L7 ?5 X! _, l7 f. R* }
103 系列的上下拉只在输入通道有效, 030 系列的在输入和输出都有效,因此 030 系列在浮空输出时也可以使用上下拉电阻,在 103 系列单片机中浮空输出是不能使用上下拉的,必须使用外部电阻辅助。. k" I' i4 Z7 L& i+ i9 \' x" L2 O
这两个IO 的结构区别对实际使用有哪些影响呢?最大的区别就是 IO 作为双向 IO 使用时,设置为浮空输出, 103 系列必须外面配置上拉电阻,而 030 系列则可以直接配置为上拉开漏输出,把 IO 口作为双向 IO 使用,特别是在模拟 IIC 时序中使用最方便!/ Q; k! W2 ^0 l$ Y# j
6 E5 T4 c7 r1 l" o, ]$ Z. W$ H
在配置到MISO的管脚时也会有不同
( i* D6 Y- p6 i8 KSTM32F103:
9 C- U/ R6 W9 I
3 M: A0 j* ?9 T |6 P3 e2 G1 m- /**SPI1 GPIO Configuration ' w/ O- o# @" x+ ^5 M, K
- PA5 ------> SPI1_SCK% V; g- S3 D2 P' O, M, @4 ^0 O
- PA6 ------> SPI1_MISO4 ?" v; c/ ]. k' }9 H0 P- H0 W$ Q
- PA7 ------> SPI1_MOSI % V% e: m; @" F: j
- */6 h- ~) |8 b6 N7 t- D3 [
- GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7;4 }1 f* M7 U( z
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
7 X9 E+ d% _3 U& i7 l - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;$ A, X# ] b$ E7 w/ S! H R
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);. q7 i: \! S$ N, a( e0 i0 I9 [
- ' o' C( F1 t+ o( Y
- GPIO_InitStruct.Pin = GPIO_PIN_6;
, y. S# m8 F3 G3 D/ ?- z - GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
: w q$ Q, N% H - GPIO_InitStruct.Pull = GPIO_NOPULL;8 o( v! n2 L& F. a# q7 y
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码 ; V, {& I0 i! b
STM32F030:
2 o! S( }( X4 j5 D, H' O
$ P W! H) G; ~" x- ^' x; u- /**SPI1 GPIO Configuration % e$ c0 Z( t6 N1 H! t" |, X
- PA5 ------> SPI1_SCK
& O2 I8 L1 T8 y/ z/ r. W$ N" E - PA6 ------> SPI1_MISO
+ r6 Z5 v% H% ` - PA7 ------> SPI1_MOSI 2 U: ~% M4 P3 I+ Q
- */
9 P8 k4 V8 m5 D* h: t - GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;4 a" X2 P0 k. t. U
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
% w8 Y4 V& Y, v0 X: V0 o* K% g - GPIO_InitStruct.Pull = GPIO_NOPULL;
) d( I# K+ Q' ^7 ^& e9 x - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
! }6 H* G, L: r1 F+ S1 W' L - GPIO_InitStruct.Alternate = GPIO_AF0_SPI1;- }: w# _: B; D* p9 S
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码
" Z! T. L7 O7 L8 w& b具体区别就是: F103的MISO要配置成输入(GPIO_MODE_INPUT), 而F030的要配置成复用(GPIO_MODE_AF_PP)。+ }/ K) V4 N- V# m3 G0 @
; P0 L+ s. A- a, ~) @. k
ADC的区别:
' R" R5 }! E( h2 |; u2 ]STM32F1031有选择单通道和双通道,而STM32F030没有。; e; Z6 N) M1 u# j
3 J4 `7 k$ `$ l3 A/ i : J# E) r6 W E) |
- Z% A9 ~7 ~( I3 \4 _, p) o% I l/ d8 H4 W6 f
/ H% l5 Y A5 W, J/ k9 X- F6 ?4 ]0 @, g& `+ e$ B
|