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

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

[复制链接]
STMCU小助手 发布时间:2021-11-26 18:00
$ f+ X& ~2 W- ^  B9 u" J3 ~2 u
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2tyMmtLNThDemU0UGx6bFUucG5nIXRodW1ibmFpbA.png
' l' t' ?3 p) X$ o
( f6 e; E: n  b7 c  ?
STM32F103ZET6(144脚芯片)
) K5 ?" w  I  v/ k) t
! [7 V% \( Y1 P* L& D( N+ \7组IO,每组16个,一共112个IO口。
# C2 b0 O% m, [  j& ?7 V: y/ [3 Q% n
GPIOA,GPIOB…GPIOG" }( @- B2 t0 q6 M6 s- M

8 f" T& q+ T# yGPIOAA0~PA15(A,B,C,D,E,F,G均是16个IO口)
4 b! j" L- @9 ^/ ?+ t, _3 X! H. X0 _/ s- O
FT表示可以容忍5V& W+ D8 L3 J; X; C4 S

8 L; Z% u' p8 }" T! a8 V+ r一、4种输入模式:输入浮空,输入上拉,输入下拉,模拟输入6 i2 Q0 _* b% _$ i" U

" x3 Q3 ~/ a3 w4 h9 @% ]1.GPIO的输入工作模式1—输入浮空模式
/ Q) C; P" z5 Q4 v# P; w$ }& S! C4 f0 b, K- y
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mLzJRMkhacVhKb0hRQ3hEUHQucG5nIXRodW1ibmFpbA.png

; M5 |3 g* E7 p; c7 G
6 f& Z' q1 W2 M. W! K' i# `2.GPIO的输入工作模式2—输入上拉模式
+ k: C  ^; t7 f
: k4 f- l3 B; Y7 U6 Q& N1 ]' Y# [" ^
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mLzZWNWtYY1VtSjEwTmRiRm4ucG5nIXRodW1ibmFpbA.png
- s3 g" R3 o5 I8 N4 [
8 r, p0 }# [1 R' ], h; C0 g
3.GPIO的输入工作模式3—输入下拉模式7 }5 R3 R, f4 D: E! C
3 T. V/ C* y; `7 ?# w
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2VQbVR4NGE1NTBZaEtkcUkucG5nIXRodW1ibmFpbA.png

& r( V4 f- o# a5 P+ k- O- z8 `  m% v( ]# b, l9 W3 K; L
4.GPIO的输入工作模式4—模拟模式
" M" Z: V& l5 V& j2 n( o7 I- i
) j) }# m% ^& _; a  s
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL1R1V2NzUDV4VzRzamJFQXQucG5nIXRodW1ibmFpbA.png
. T3 C0 _  U& A5 {  j+ @5 x
% B, ~* |/ T* i, H% ?7 B2 N
二、4种输出模式:开漏输出,开漏复用功能,推挽式输出,推挽式复用功能
3 n6 w, [) G$ I& ~! L
- ^( S" m' Y+ F1 X4 a* C1.GPIO的输出工作模式1—开漏输出模式  b9 L8 A/ P# r- B8 Y8 L
2.GPIO的输出工作模式2—开漏复用输出模式
' {  t) K, T2 B" s* P1 _" J9 \" |- C3 b9 S6 f0 _! ^
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2Y2UWIxMUV3cnBVTElUaEEucG5nIXRodW1ibmFpbA.png

$ c; }* ]& K! x& a4 u. h" u' Q1 f& R) [8 @& n/ M
3.GPIO的输出工作模式3—推挽输出模式
+ f, F1 g2 h. X# ]* [; J' |0 K* q  J3 s% A6 W0 Q8 Q* ]7 z% a
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2pGMUJyVTdSTWY4MGVNV3gucG5nIXRodW1ibmFpbA.png
6 J- P/ A2 X3 ^% M

. V5 G4 r) y4 K8 ?4.GPIO的输出工作模式4—推挽复用输出模式; k6 H- t8 {5 j: b) ]
4 }# I+ X4 B! r9 m' f& H1 \
( J! r* v& F$ K- g1 v( A

! M4 e  o; X; }4 `& d/ H% @三、3种最大翻转速度:2MHZ,10MHZ,50MHZ5 U. }) B* y3 y1 F. m

1 F$ G) e9 y+ j四、GPIO工作方式# |& T" X5 d' X& F' P: w  P
0 J  ]9 p, ]) ?' o% @" S, e
推挽输出:可以输出强高低电平,连接数字器件 。, x5 O5 N, t& q* x. X5 D
% S0 E8 G( `% g6 J9 }
开漏输出:只可以输出强低电平,高电平得靠外部电阻拉高。$ \  u* ^5 x% p5 L- K; Z
0 J& e3 h( u+ l
每组GPIO端口的寄存器包括:( T) G+ h4 M# h+ E1 ?9 A

: M2 \& g2 S8 `% Q% N两个32位配置寄存器(GPIOx_CRL ,GPIOx_CRH)* [9 q% Q! \* L! \$ @
) s6 ~! }5 m! G$ H' p
两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR)* x, ~) M- }" G, f% G
4 W+ Y7 B8 c" J5 r7 |; c  e. Y4 U
一个32位置位/ 复位寄存器(GPIOx_BSRR)- q0 p8 {. i/ X

0 j# F1 s) V7 t一个16位复位寄存器(GPIOx_BRR)* \" `7 B) }" t- R& H% V
6 X: l  x6 Z$ k! r- s
一个32位锁定寄存器(GPIOx_LCKR)
6 k) @! g# T0 \. ~  o8 U" k6 e: d* Y1 h' J8 J
每个I/O端口位可以自由编程,然而I/O端口寄存器必须按32位字被访问(不允许半字或字节访问) 。7 {6 Y/ C( A  O5 n

' X# B- l+ [) ]+ \: F每组IO口含下面7个寄存器。也就是7个寄存器,一共可以控制一组GPIO的16个IO口。+ O; M( F) [; a' N6 f* C

: H2 U; |; \) \! R; dGPIOx_CRL :端口配置低寄存器6 L- ], S4 y# u6 m

9 Z+ e5 u; u# J# OGPIOx_CRH:端口配置高寄存器
6 t7 l% `  w$ T/ _6 `4 o. y. t# e. p: _+ i6 U& L+ s& u2 H
GPIOx_IDR:端口输入寄存器7 l: n; N2 O. o# [

% R, U0 b1 c5 e5 k. P7 r7 w; @# BGPIOx_ODR:端口输出寄存器" \+ y3 }$ U' x- D1 ?

. n4 B! M, z: W0 TGPIOx_BSRR:端口位设置/清除寄存器
" r: ^9 `# x) X. A3 p5 E
( a6 h6 A- a% Y6 R6 s" }% H7 cGPIOx_BRR :端口位清除寄存器
6 p3 Z; \% @5 G; a+ \4 x! Z# j' k7 Q$ p3 t- @
GPIOx_LCKR:端口配置锁存寄存器
5 p1 z; j% o- y# D9 d. T$ ^9 d
1.端口配置低寄存器(GPIOx_CRL)和端口配置高寄存器(GPIOx_CRH)# W3 `* l: b9 c! _* Z
' T2 c6 i4 e& m. z5 x
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL1BhT0JSTGNqVE1vRkQ5c3oucG5nIXRodW1ibmFpbA.png
- [4 L/ m6 s+ V" `5 g

# _  A0 d, r- b( z( i( u2.端口输入数据寄存器(GPIOx_IDR)7 y& E7 X7 {0 j) s/ M1 y

* {1 m: p+ A! |  ]/ [
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL3BxcG1UTjV5cUowYVd3TEEucG5nIXRodW1ibmFpbA.png

3 d* l/ }, |5 l/ w' ]  z; |% X, y) {' t5 _
端口输出数据寄存器(GPIOx_ODR)
2 V) t5 y" K5 D$ _& O! Y- A7 Q  R- K  [2 l1 E
3 c$ T! s6 ~1 Z; ]. [
: ?5 N- J' d# s. I, J( J! N
3.通过设置ODR控制端口位为上拉还是下拉输出模式
# D; o7 k. k1 t$ R4 k3 u4 C  J% n$ p
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL0VyV1RRYTFtM3NNVHR3TXEucG5nIXRodW1ibmFpbA.png

; b, z) V+ U+ \7 P# [- t, }* m1 r
$ W; {7 }* Y; N* J% G+ yODRx设置为0就是下列输入,ODRx设置为1就是上拉输入。
; B1 o5 v( }$ k. l0 m# z/ g" Y$ e9 p0 g+ c* P
4.端口位设置/清除寄存器(GPIOx_BSRR)' O: j% O3 m* l- x+ w  C

; U* O) Y: _0 e0 X6 o- {
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL3htWllNTVAzbVVJd2JTU04ucG5nIXRodW1ibmFpbA.png
# X" v4 q2 A( o6 ^. C6 R

) V- B+ K' _5 ~% f. N1 T端口位清除寄存器(GPIOx_BRR)
4 }; a* V* f. l" Q+ r# T0 d* [% M) W0 N# o1 l! r$ G
通常就采用BSRR的低16位和BRR的低16位,因为BRR的低16位与BSRR的高16位作用类似。
& w, n( o# y# Y* [- j: @
3 j) R- r/ c  Y! ]5 ]5.端口复用功能: STM32的大部分端口都具有复用功能。 所谓复用,就是一些端口不仅仅可以做为通用IO口,还可以复用为一些外设引脚。- r$ o! c: V8 O) R
( w3 d/ O8 M5 F; T
6.端口重映射功能:就是可以把某些功能引脚映射到其他引脚。比如串口1默认引脚是PA9,PA10可以通过配置重映射映射到PB6,PB7。: w2 o) E/ \) C) j. V  ]. I" @
8 D" X, A" Z6 j
和51单片机相比,32所有的IO口都可以作为中断输入。2 Z, [. D0 s4 T2 }

& s9 A" q9 I8 }7 Y4 R% k; @' G& z  }
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 手机版