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

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

[复制链接]
STMCU小助手 发布时间:2021-11-26 18:00
# M# Q/ V9 e" @& i
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2tyMmtLNThDemU0UGx6bFUucG5nIXRodW1ibmFpbA.png
" g: v* ~4 q) Y/ R' @: u" B

( E/ G8 s1 h( U# H: tSTM32F103ZET6(144脚芯片)$ ^. L, A# e% f5 [* M: n# @
: Z  N2 c* Y& w' B/ L; e
7组IO,每组16个,一共112个IO口。+ M: u0 @' L) g9 y2 S. Z

( {. b: `6 _  D5 D9 u7 o: {4 EGPIOA,GPIOB…GPIOG
7 V  ]) |5 \) |/ N: N, y4 M/ V2 Z' c8 j
GPIOAA0~PA15(A,B,C,D,E,F,G均是16个IO口)  A+ }' [) K, O0 f# z( z
7 E9 d1 W" e+ B$ R+ ^# K
FT表示可以容忍5V6 _$ ~2 G: ?6 T. j% Q
6 r6 \2 k$ E" Y7 l5 g) r
一、4种输入模式:输入浮空,输入上拉,输入下拉,模拟输入
9 @, I% H6 @' h. P. ~* l7 N+ y# w" ^6 {+ S: x
1.GPIO的输入工作模式1—输入浮空模式/ h+ i+ u# [4 r2 X, R
8 P3 \6 G9 k8 B% y% W' a, T0 ]" U
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mLzJRMkhacVhKb0hRQ3hEUHQucG5nIXRodW1ibmFpbA.png

& D2 e9 w# T! Y4 A9 k
) o# ~' H0 C9 V( L2.GPIO的输入工作模式2—输入上拉模式
! T1 ]7 C5 S7 R) X2 L9 y( l& L
' Y8 r3 q; @3 C' X2 B
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mLzZWNWtYY1VtSjEwTmRiRm4ucG5nIXRodW1ibmFpbA.png
( u( G  _# N+ p- h# U

" V% O) X2 P* ^. }* ]3.GPIO的输入工作模式3—输入下拉模式
0 f& p$ s( H0 V+ U
) y5 C8 d. G4 Z8 _" N; B, P
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2VQbVR4NGE1NTBZaEtkcUkucG5nIXRodW1ibmFpbA.png

5 J9 |8 T8 a7 @! K
7 U8 y6 F/ Y$ C) n4.GPIO的输入工作模式4—模拟模式
3 l8 k/ E" V* d9 U6 C4 o1 |! c, D9 [8 t3 S5 I8 {: o0 p0 W) Z
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL1R1V2NzUDV4VzRzamJFQXQucG5nIXRodW1ibmFpbA.png
. s3 U0 d$ m2 E1 p( [+ d. [% }$ J

5 H) ]" A3 ~: y% P% x二、4种输出模式:开漏输出,开漏复用功能,推挽式输出,推挽式复用功能  b: ]% v, _+ c; @9 b; Y5 _. ?

# G' \$ l* Y3 s7 @: V1.GPIO的输出工作模式1—开漏输出模式
! e- j* y$ ^: B2.GPIO的输出工作模式2—开漏复用输出模式
( R+ F' N% a) [+ @# ~1 g0 R1 _5 [4 X$ N7 D: H
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2Y2UWIxMUV3cnBVTElUaEEucG5nIXRodW1ibmFpbA.png

  T5 c  A: B! G* L: g. m, o
7 Z) |& ^9 N6 D3.GPIO的输出工作模式3—推挽输出模式
  K, ]4 O* u" K3 c! n+ L
5 s; _* `4 D$ f6 I
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2pGMUJyVTdSTWY4MGVNV3gucG5nIXRodW1ibmFpbA.png

, v# ~7 e/ J" v% }1 k
, S( Q+ ~$ p; p, X. a: n. o6 U% z4.GPIO的输出工作模式4—推挽复用输出模式
! |6 ~/ Y* y5 a* v+ g( o' Z4 U' b! Y: q' f& B, Q, F! P

4 I" X, s. u3 x2 M
& g" }$ a- }, v9 k' \; |三、3种最大翻转速度:2MHZ,10MHZ,50MHZ
7 a! c4 I4 U: T% N1 {/ P! {0 }* J$ {
9 p( W, T6 Q9 y: P! f8 Z5 H四、GPIO工作方式2 T. [$ {9 \" F, L( e& I
3 q; l- J$ J/ M# h! H$ f5 M) F
推挽输出:可以输出强高低电平,连接数字器件 。) Y; k3 ~5 f  Y% A, L" d

6 C$ V" ]$ U5 F. K( ]$ H开漏输出:只可以输出强低电平,高电平得靠外部电阻拉高。
0 e' ]  u; ^. V* f$ {* }4 Y8 g) _1 g) k6 ?
每组GPIO端口的寄存器包括:( L7 h2 z8 x& L$ u3 f
/ \) n% F; d' l
两个32位配置寄存器(GPIOx_CRL ,GPIOx_CRH). g' d4 _" M' \7 W* E
9 n. j/ H0 M" y* T: ?
两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR): w$ e, t9 Y' Q* q8 m7 W# C3 P: G
) y- f0 g3 \5 h9 A4 u- n
一个32位置位/ 复位寄存器(GPIOx_BSRR)
9 Y5 ^: A& w; ^9 \0 y4 w% O$ S7 N8 Q6 {9 A9 C6 @, R6 i" K4 C: _
一个16位复位寄存器(GPIOx_BRR)1 C, a% }* t. O- h

' A/ {& O' p8 A0 `0 A9 u一个32位锁定寄存器(GPIOx_LCKR)/ I- S5 p, d3 C1 @' E& w
( k1 |5 ]2 z6 g) I0 c
每个I/O端口位可以自由编程,然而I/O端口寄存器必须按32位字被访问(不允许半字或字节访问) 。1 H. ~8 ~2 J2 @1 V
0 @; z* i  D: t1 h! A7 @
每组IO口含下面7个寄存器。也就是7个寄存器,一共可以控制一组GPIO的16个IO口。
9 g9 z5 k2 s$ G1 ?
1 a! v( l1 E* J: Q) p$ XGPIOx_CRL :端口配置低寄存器( v: g% F$ ^5 y/ H) \4 k  W
& R+ a" k- S6 x2 M! ^. y
GPIOx_CRH:端口配置高寄存器! ~  o# J+ K' ?+ O/ a

, ]4 I: A5 A) O* {2 X# NGPIOx_IDR:端口输入寄存器* Q6 s3 h4 \# P: C2 T4 p$ m

* k8 X* ^) `! r' p  g7 V3 Y8 z) M% FGPIOx_ODR:端口输出寄存器* R# n7 {. y0 M$ B0 G6 h
! t9 @- e+ E# }: k6 V
GPIOx_BSRR:端口位设置/清除寄存器
5 a9 i8 p' D. t. ]5 ?1 {
% M* V# x- K7 DGPIOx_BRR :端口位清除寄存器" R0 `$ e# A% n! A* V4 E' Z" N- b
9 V' q3 Z" j# V7 G3 }$ O; {7 y7 C
GPIOx_LCKR:端口配置锁存寄存器# C% s3 O& t+ @. L
. e7 I; s# |( v8 U- t( e2 A
1.端口配置低寄存器(GPIOx_CRL)和端口配置高寄存器(GPIOx_CRH)7 o* `6 t/ p) s% N; l* F
8 ^4 y' s  g) ~2 Z
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL1BhT0JSTGNqVE1vRkQ5c3oucG5nIXRodW1ibmFpbA.png

; s0 _6 s% P* A2 o$ t
/ [$ q% G* n7 c7 [2.端口输入数据寄存器(GPIOx_IDR)
  S' t- u0 k7 a( \( q$ m! a
+ g% D# \3 e" Y2 G  _/ q7 {
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL3BxcG1UTjV5cUowYVd3TEEucG5nIXRodW1ibmFpbA.png

9 M) D/ |, A8 i+ `: w
5 D6 P" ]  N& x4 Z# \5 a% X) E2 T端口输出数据寄存器(GPIOx_ODR)% R6 o7 M1 X; h8 ]! x1 O6 M0 c
' R/ N3 V1 |3 ?. s

: |) m- h! E+ _; N
7 v$ T" ^: y: l9 {2 V0 F8 V) Z9 D3.通过设置ODR控制端口位为上拉还是下拉输出模式
3 N" d  T. _0 q, E, Y
8 [* q* n" o& |7 @+ p. U% N
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL0VyV1RRYTFtM3NNVHR3TXEucG5nIXRodW1ibmFpbA.png
0 T/ q4 e2 l* T, T; M% w$ J

7 D6 G& L( A& [. Q; y( V7 Q0 vODRx设置为0就是下列输入,ODRx设置为1就是上拉输入。
; w, `6 C7 u2 e" w3 S) h( a2 U" ?
4.端口位设置/清除寄存器(GPIOx_BSRR)' k( R, ^. l- m9 F7 }3 K& V; p
! W6 ]+ {) ~6 o0 q: v% y
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL3htWllNTVAzbVVJd2JTU04ucG5nIXRodW1ibmFpbA.png

9 F  W1 V8 V  W2 U# f+ P
( G, D% i) I3 k2 S5 M% b端口位清除寄存器(GPIOx_BRR)
+ Z' J: X- e% f( r
3 ?8 Z% R2 V% c7 D通常就采用BSRR的低16位和BRR的低16位,因为BRR的低16位与BSRR的高16位作用类似。
/ i# R8 x6 B$ ~% B3 r
2 u, _& M: w- _, B5 U5.端口复用功能: STM32的大部分端口都具有复用功能。 所谓复用,就是一些端口不仅仅可以做为通用IO口,还可以复用为一些外设引脚。4 j! A& _7 Q  g3 L

6 S; B4 L- j3 X6.端口重映射功能:就是可以把某些功能引脚映射到其他引脚。比如串口1默认引脚是PA9,PA10可以通过配置重映射映射到PB6,PB7。
  a* p" j7 o) e. K' @
4 u& S) H& E, e6 ?0 L和51单片机相比,32所有的IO口都可以作为中断输入。% P0 c+ C. x$ f6 `& l

7 o; @7 J' v7 X" P9 B' ]. d9 X% a. G8 \& H8 ]
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2Y3UjRKRWhXMVM4U0M5NVQucG5nIXRodW1ibmFpbA.png
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL3N6SUlKOGR2UldRWmJZTmEucG5nIXRodW1ibmFpbA.png
收藏 评论1 发布时间:2021-11-26 18:00

举报

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

非常清楚 感谢。

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版