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

【经验分享】STM32F1 GPIO工作原理

[复制链接]
STMCU小助手 发布时间:2021-11-26 18:00
6 o$ E( b: _, N5 p- x8 a0 Z6 a
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2tyMmtLNThDemU0UGx6bFUucG5nIXRodW1ibmFpbA.png
0 V4 t3 N# e0 J' Z

& C0 R: I5 f3 }; J8 ]# |. w1 @STM32F103ZET6(144脚芯片)
6 n" N& m8 m. Z1 |- `$ N6 Z" f" }7 w: N. g9 D' c
7组IO,每组16个,一共112个IO口。
! s0 ?( z) a/ k& {" S. [. Z( e' m7 x8 _: d5 i- S0 O$ |# }
GPIOA,GPIOB…GPIOG
/ G1 u  i* c, h) T! U- G
1 h5 i1 ~3 G0 O& N2 cGPIOAA0~PA15(A,B,C,D,E,F,G均是16个IO口)
% n& ?3 l1 L1 S' d1 l. l- i  X& t  v! C1 J  p: S" K+ y
FT表示可以容忍5V
4 U+ ]4 Q' ^) A3 ]3 M  ^3 H8 t" B- }9 H: @6 U+ m
一、4种输入模式:输入浮空,输入上拉,输入下拉,模拟输入6 U7 {$ O: g; B4 W& q
7 j$ p4 Z% Y& J% a& u9 F
1.GPIO的输入工作模式1—输入浮空模式
6 Q  @3 K5 w5 k! F  q5 _2 J( h* a! B
) b- O. ]: d7 h% ?2 ?( ~
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mLzJRMkhacVhKb0hRQ3hEUHQucG5nIXRodW1ibmFpbA.png
  z% j' |9 j: F- S9 h; ^
& q$ J+ e8 ?. y# X. w
2.GPIO的输入工作模式2—输入上拉模式
3 ]  [5 p- y, q0 j
& E# i- f7 b5 A8 I. F; @1 N
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mLzZWNWtYY1VtSjEwTmRiRm4ucG5nIXRodW1ibmFpbA.png
% r+ x7 }, ?4 f$ _7 G9 m9 K0 J

# p2 }  v9 }" L) I3.GPIO的输入工作模式3—输入下拉模式
# p* a  R; V# c6 [. E5 l% _- K# M% u. B3 V  c" V
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2VQbVR4NGE1NTBZaEtkcUkucG5nIXRodW1ibmFpbA.png

  i9 A( J! Y6 i$ T( n5 X. j, `2 j/ u8 e/ n+ Q, }" r
4.GPIO的输入工作模式4—模拟模式
% a( }2 i1 R, K- R/ ~. N* d" U+ ~4 G  w
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL1R1V2NzUDV4VzRzamJFQXQucG5nIXRodW1ibmFpbA.png

1 S( V% d+ \: R  T+ H5 t7 m
3 C* j& n8 ~) b8 a2 J二、4种输出模式:开漏输出,开漏复用功能,推挽式输出,推挽式复用功能: T: s2 Z2 M7 G( p% I# {' r
4 j$ `9 U% N$ C/ `# F: e
1.GPIO的输出工作模式1—开漏输出模式
( P: \4 P. U7 h! W% E2.GPIO的输出工作模式2—开漏复用输出模式' r' W4 i( _2 s: ^
4 I" E- u+ v. d' ]$ A" t! E  o
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2Y2UWIxMUV3cnBVTElUaEEucG5nIXRodW1ibmFpbA.png
! }8 g1 \) S! s+ U" z4 T

) l8 Y! Z) \. B" T# e- A3 U, [% m3.GPIO的输出工作模式3—推挽输出模式" J( ]2 y: _' w2 V4 I4 A" {

3 f2 n& r' v% r7 E3 `# V1 J# y4 {1 i
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2pGMUJyVTdSTWY4MGVNV3gucG5nIXRodW1ibmFpbA.png

) \9 [/ A  Q( n- D# k# I  ^1 p/ g! F, B
4.GPIO的输出工作模式4—推挽复用输出模式/ L) Q% `3 m/ q9 K8 r  _

2 G8 J6 c: s9 j* m
1 x/ X6 O7 t/ q
& k5 R" ^; F+ w1 S, B" H
三、3种最大翻转速度:2MHZ,10MHZ,50MHZ4 R. U+ O5 i( o8 i
( J$ n5 v; y! o& H9 ^% g
四、GPIO工作方式# @7 E( r. C& X; O& O/ f2 j
* D1 T# L/ Y6 Y+ P6 U* C
推挽输出:可以输出强高低电平,连接数字器件 。  G  s1 J7 L0 l$ ^8 s+ ~4 Z' W
' ~" p, S. J) G
开漏输出:只可以输出强低电平,高电平得靠外部电阻拉高。
& q! L9 X/ V) _: @4 c- D( Q. s. _8 S6 J8 @2 f5 @% z1 I
每组GPIO端口的寄存器包括:
7 \1 h/ {* j. L1 e: M+ x
3 ^$ n# g  R# H& H. A6 c7 R* [% O两个32位配置寄存器(GPIOx_CRL ,GPIOx_CRH)6 V  h/ }* }6 R/ E9 H) `
) H9 P' i: a/ s( `: K, P) ^; N8 @2 P
两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR)
; ~1 {2 v' w. S, t5 V  \7 `+ z1 P" c8 f1 x8 ~, G1 g
一个32位置位/ 复位寄存器(GPIOx_BSRR)  ^4 \) ?: a" I6 C/ j. A
! g6 B$ Q" @/ e% g; N
一个16位复位寄存器(GPIOx_BRR)  k( R: a# f$ i3 X; w

3 K* k* c9 [* d  ?2 Y0 d6 q一个32位锁定寄存器(GPIOx_LCKR)* i7 N: J; g' X7 \( c' o
9 C! Z3 t" \7 X" o5 e! C
每个I/O端口位可以自由编程,然而I/O端口寄存器必须按32位字被访问(不允许半字或字节访问) 。6 ?) z  v) w. h

7 {" U" G7 ?! m2 C* W0 T每组IO口含下面7个寄存器。也就是7个寄存器,一共可以控制一组GPIO的16个IO口。6 r* U! g, a( n4 X5 O/ Y6 `& d- w
9 n, P$ l' r& ~0 D5 q
GPIOx_CRL :端口配置低寄存器: a) G3 d3 D4 M' Z+ T' C5 a9 u' u
4 `: _8 M8 d/ l' t
GPIOx_CRH:端口配置高寄存器0 ?1 q* m, {1 P- W$ a6 G+ d" L6 O6 f

- T5 E1 d5 H! bGPIOx_IDR:端口输入寄存器
9 d: r; `6 ~3 U. F2 d1 \6 G! C0 Q% J$ _: J
GPIOx_ODR:端口输出寄存器
, E# H0 i4 X6 l# Z6 |1 R( T9 I: i3 |. d# N; G+ ]
GPIOx_BSRR:端口位设置/清除寄存器" C' W7 V& e, a+ A7 \) g
) f% a% P" g$ V) s
GPIOx_BRR :端口位清除寄存器% H$ L" }; p0 k, p# V

9 @: @, _3 m+ n& j  ]/ G9 Q2 ~GPIOx_LCKR:端口配置锁存寄存器+ ]( x" D. V* f. X% y

# R$ A! |+ u- |+ q: P1.端口配置低寄存器(GPIOx_CRL)和端口配置高寄存器(GPIOx_CRH). e8 r! R6 s1 G
6 U' i) p1 w9 }8 {
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL1BhT0JSTGNqVE1vRkQ5c3oucG5nIXRodW1ibmFpbA.png

+ E5 D3 s% ^( W. X# f8 x
; K) A1 @* _+ v- N4 N2 C2.端口输入数据寄存器(GPIOx_IDR)
: F$ q+ y& }% q# {% D, }) e# u9 E& w9 m
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL3BxcG1UTjV5cUowYVd3TEEucG5nIXRodW1ibmFpbA.png
4 X! W4 D* @4 w! Q
6 K/ {  z2 z& X' j2 X! y/ s
端口输出数据寄存器(GPIOx_ODR)- F+ `: T& v4 H

3 @* E8 t' |) M9 t7 `

2 C0 ?0 W4 R+ G+ c7 g8 T6 Q6 u! ]+ B% `5 w
3.通过设置ODR控制端口位为上拉还是下拉输出模式
% b; q' u! I& H3 |9 ]6 G$ |5 r0 e) I5 Q$ n! x
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL0VyV1RRYTFtM3NNVHR3TXEucG5nIXRodW1ibmFpbA.png

; T$ [; j' p" h7 V0 |; C6 T, L4 s* B/ k8 X) p- ~- [6 K
ODRx设置为0就是下列输入,ODRx设置为1就是上拉输入。* X; U1 m( A( O( k. Z4 U" _& h  ?4 ^
7 S; u8 l8 j7 B& f2 b
4.端口位设置/清除寄存器(GPIOx_BSRR)
, H. n  P8 T. i6 O. ~4 j+ q" Z" K' F& ^$ S1 I
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL3htWllNTVAzbVVJd2JTU04ucG5nIXRodW1ibmFpbA.png
2 D- [) B$ O5 A1 n+ k5 N3 z

- G- R+ h+ t0 i1 O端口位清除寄存器(GPIOx_BRR)1 D0 w  D- T! H/ C9 i

, c# p9 ?' J7 R* g# I# z通常就采用BSRR的低16位和BRR的低16位,因为BRR的低16位与BSRR的高16位作用类似。1 L# h7 d# \# D- C! K( J
7 Q: h* k) y9 V$ ?$ {
5.端口复用功能: STM32的大部分端口都具有复用功能。 所谓复用,就是一些端口不仅仅可以做为通用IO口,还可以复用为一些外设引脚。
. f8 O+ r+ W* o, q* @% ?) f2 j- j$ C4 B
6.端口重映射功能:就是可以把某些功能引脚映射到其他引脚。比如串口1默认引脚是PA9,PA10可以通过配置重映射映射到PB6,PB7。
; c$ P* b$ i( G9 F* o3 ^
+ w' T2 K: J: W, F; b和51单片机相比,32所有的IO口都可以作为中断输入。
* ^* f/ ]2 [1 Q& R& Y" Q, }7 Q& q( @. E- N* g% H) {

1 P$ P/ G- {. P
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2Y3UjRKRWhXMVM4U0M5NVQucG5nIXRodW1ibmFpbA.png
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL3N6SUlKOGR2UldRWmJZTmEucG5nIXRodW1ibmFpbA.png
赞 收藏 评论1 发布时间:2021-11-26 18:00

举报

1个回答
tianqi911 回答时间:2024-5-11 11:06:41

非常清楚 感谢。

所属标签

相似技术帖

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