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

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

[复制链接]
STMCU小助手 发布时间:2021-11-26 18:00

" h8 G5 |" m: L' j9 u
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2tyMmtLNThDemU0UGx6bFUucG5nIXRodW1ibmFpbA.png

2 ]( X: {* n$ x. a2 K4 n3 ?- _, N! Z' m: ?  X
STM32F103ZET6(144脚芯片)8 \! F  P# H0 _) e* C
) C5 t4 t# |+ T$ k' F" a- b
7组IO,每组16个,一共112个IO口。# c  x7 \/ r( Q# \: K+ F
) R. C& |) B9 C. O! C$ G
GPIOA,GPIOB…GPIOG. w& K/ l% M, P" W+ O- \* l. N

; J  B6 i" O; C5 Y) ZGPIOAA0~PA15(A,B,C,D,E,F,G均是16个IO口)
' u: S2 w3 v1 j# S! t# _( b' \/ a
. L2 S4 n# U: Z: HFT表示可以容忍5V
) S' A5 i2 u6 |. m! ^! K- P
3 e3 O4 P- a3 [5 p) l6 [% D一、4种输入模式:输入浮空,输入上拉,输入下拉,模拟输入% Q: @+ m1 @& }3 E4 K8 j
% m$ P2 s# m) t
1.GPIO的输入工作模式1—输入浮空模式; v' \4 \7 O" A6 F- Q
% E4 U0 c4 L% k
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mLzJRMkhacVhKb0hRQ3hEUHQucG5nIXRodW1ibmFpbA.png

' H4 h* T0 k- [" c. ~% H2 N' C" G# Y$ G! Y! z6 t# Z
2.GPIO的输入工作模式2—输入上拉模式
2 ?/ f5 V: ]7 k, S$ H
$ l4 t  E% Y+ k7 L
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mLzZWNWtYY1VtSjEwTmRiRm4ucG5nIXRodW1ibmFpbA.png
' F1 y0 L- R/ w) I

  L. t+ L% _5 Y$ W, ]6 v! M# v' R3.GPIO的输入工作模式3—输入下拉模式9 X# i1 c2 W+ U0 o" u' J
/ C1 e, l) T/ a# V+ y( |4 o& l3 f+ e
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2VQbVR4NGE1NTBZaEtkcUkucG5nIXRodW1ibmFpbA.png
- o! O8 F$ ^% W8 O+ I! e( E0 p1 z
6 S; q9 N" l  F4 {, l- L
4.GPIO的输入工作模式4—模拟模式
+ l. \- x) y2 W" C4 |( K% U7 ]4 a" y  _
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL1R1V2NzUDV4VzRzamJFQXQucG5nIXRodW1ibmFpbA.png

+ p6 V% [6 @3 y- B6 c
; ~; ^: D* H' n3 Z0 W二、4种输出模式:开漏输出,开漏复用功能,推挽式输出,推挽式复用功能
) @: o9 o$ }$ u# X8 g6 k' S5 W/ g/ \; g
1.GPIO的输出工作模式1—开漏输出模式' J. T5 |4 |2 Y' ^7 F% j( z
2.GPIO的输出工作模式2—开漏复用输出模式
1 J0 ?( ~( y9 P' J5 H. V7 S4 Z7 S4 O3 j3 F' F  O  j3 T& _+ @" l
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2Y2UWIxMUV3cnBVTElUaEEucG5nIXRodW1ibmFpbA.png
; ^; U! ?+ k1 u/ ~! l

# i( V0 W5 A9 d4 r+ }0 w' }, d3.GPIO的输出工作模式3—推挽输出模式
7 H* Z* w) J3 a; |
/ r6 N6 {7 T  ?
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2pGMUJyVTdSTWY4MGVNV3gucG5nIXRodW1ibmFpbA.png

! X: ~6 n2 }1 P7 b* @; i" a: m8 _  n  d5 _3 s
4.GPIO的输出工作模式4—推挽复用输出模式2 s. L6 {  A4 W! k+ n5 a+ d! `
( S6 g8 X8 T& R6 |: t2 ^
0 J& X0 H0 u% D3 ]9 P
4 T  u: a8 C! g9 G0 ^
三、3种最大翻转速度:2MHZ,10MHZ,50MHZ
+ L* }, ~* N( ?6 K! ]
  g0 W2 B# O' ^) \四、GPIO工作方式
. L" }6 u1 |- d# X8 k; B
# X/ \. q3 A' o% E8 ?推挽输出:可以输出强高低电平,连接数字器件 。) y4 w/ x4 |/ |6 K7 D
- l; {% g) ^  E0 }+ ~3 X/ L# j7 T
开漏输出:只可以输出强低电平,高电平得靠外部电阻拉高。
4 e& S# \, c' R5 z) z+ ~# T) r5 M2 K
每组GPIO端口的寄存器包括:1 K, a5 {5 j6 k4 |
: q. Q, v/ X3 J# h2 ?( a
两个32位配置寄存器(GPIOx_CRL ,GPIOx_CRH)
4 |7 c3 I- d+ A  x* I5 P: K$ Q/ g5 c7 |1 x7 b. J
两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR)
+ D+ q7 B- H$ Q+ Q& d9 f
. \0 D* M$ Z: Y9 k2 u' N一个32位置位/ 复位寄存器(GPIOx_BSRR)- A2 q( e/ ~6 y% Q8 U0 ^% Q
3 i0 b' M2 \9 D6 J0 J6 u/ K- D" t  R
一个16位复位寄存器(GPIOx_BRR)
; A7 G" [& C9 H' A, K) x. O9 @$ q0 x: v( H/ t0 l
一个32位锁定寄存器(GPIOx_LCKR)0 L' @6 S, [- Z, x/ [# S* ^# \: K

  y& W* p4 q6 o  c每个I/O端口位可以自由编程,然而I/O端口寄存器必须按32位字被访问(不允许半字或字节访问) 。
  z4 E9 y' b2 ?/ C/ i& J, ?
' M: K2 }! N& H% ?. O( ?, N# F每组IO口含下面7个寄存器。也就是7个寄存器,一共可以控制一组GPIO的16个IO口。) j2 V$ h1 Q: V

2 f# l4 q9 P+ dGPIOx_CRL :端口配置低寄存器  Z9 R9 {- x1 @2 S) q, d6 h9 O
+ u! f2 @4 p/ m$ b1 c
GPIOx_CRH:端口配置高寄存器# ~2 n& R3 c% T1 R+ w3 p+ j" B
$ A5 R& G( y0 u' @- K9 U+ ~; W7 t* G
GPIOx_IDR:端口输入寄存器7 k" R, s: [" ^; {9 a1 L  u  q

' W* m# Q6 l& b) m2 F2 {GPIOx_ODR:端口输出寄存器
1 G8 M9 d8 T# z: e% Z
! }$ v" v, x8 ]% e  m4 e3 lGPIOx_BSRR:端口位设置/清除寄存器
2 p1 X& z: e: f9 Z
$ Z+ \% i2 ?  J" yGPIOx_BRR :端口位清除寄存器- j; @9 W$ w, X5 |2 @

% e9 X  W+ l2 eGPIOx_LCKR:端口配置锁存寄存器; _* i5 J! ?' t9 y* j  ^2 G7 N: o
. O1 V: n) Z4 R* ^& j& g& D/ {( I
1.端口配置低寄存器(GPIOx_CRL)和端口配置高寄存器(GPIOx_CRH)
) _/ T* U  q' `( Q& X) o$ b# o- `
3 P+ ?- u6 C9 M  d) ]3 O
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL1BhT0JSTGNqVE1vRkQ5c3oucG5nIXRodW1ibmFpbA.png

4 f: H2 q% N, T# Q0 C+ V6 P* T( d" F
2.端口输入数据寄存器(GPIOx_IDR)
6 P/ r( {/ U) G, k& G  O" i2 P% M( P) q
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL3BxcG1UTjV5cUowYVd3TEEucG5nIXRodW1ibmFpbA.png
- a: {, A  O6 a+ Z  |
, b6 d4 ~& g7 U& a4 D- n+ f
端口输出数据寄存器(GPIOx_ODR)
% x1 U# C( R) M$ I7 {1 e1 w' A" F# M3 b& h

0 o$ |. G& E- |( y# A% t) k6 D# L- H, i2 [# S1 _! y# b
3.通过设置ODR控制端口位为上拉还是下拉输出模式
0 {0 v3 T3 _" {; c1 m& `, h0 K2 o5 c5 [$ j& b, D
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL0VyV1RRYTFtM3NNVHR3TXEucG5nIXRodW1ibmFpbA.png

) U0 s- l& G+ q/ Q5 v- ?. N" z$ o4 c. P, d
ODRx设置为0就是下列输入,ODRx设置为1就是上拉输入。
9 g8 |6 \- Y& V/ j$ K( q* v- Q3 W; @% h% v9 A: W8 a
4.端口位设置/清除寄存器(GPIOx_BSRR)
* F  s* W4 R" _, J8 [8 _( h; O  O8 \
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL3htWllNTVAzbVVJd2JTU04ucG5nIXRodW1ibmFpbA.png

6 Y( H4 L; b$ C4 ?8 y- `# _3 m" e! M, L* w: x0 r  F
端口位清除寄存器(GPIOx_BRR)( t6 @6 b* M0 B: i, K
6 C! @0 [! @4 ?  Y
通常就采用BSRR的低16位和BRR的低16位,因为BRR的低16位与BSRR的高16位作用类似。
( Z* P4 {+ Z7 ?) g' Y7 r) L2 J! F* I# D" _9 g4 T! i
5.端口复用功能: STM32的大部分端口都具有复用功能。 所谓复用,就是一些端口不仅仅可以做为通用IO口,还可以复用为一些外设引脚。
+ \& V6 H& W3 I9 b
5 B4 A! I% x* r4 a6 W. q6.端口重映射功能:就是可以把某些功能引脚映射到其他引脚。比如串口1默认引脚是PA9,PA10可以通过配置重映射映射到PB6,PB7。" D( y4 f8 K7 `
2 v7 G/ o, s: r) L# z  j* B" T
和51单片机相比,32所有的IO口都可以作为中断输入。
+ {8 V+ {; F7 ]4 S  ~. l$ L- i7 c, b/ ~' z9 {1 m

; H- _+ l, y5 s
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2Y3UjRKRWhXMVM4U0M5NVQucG5nIXRodW1ibmFpbA.png
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL3N6SUlKOGR2UldRWmJZTmEucG5nIXRodW1ibmFpbA.png
收藏 评论1 发布时间:2021-11-26 18:00

举报

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

非常清楚 感谢。

所属标签

相似技术帖

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