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

【经验分享】STM32 GPIO概述

[复制链接]
STMCU小助手 发布时间:2022-4-3 16:00
01. GPIO简介, r9 a5 ~% Y) z
每个通用 I/O 端口包括 4 个 32 位配置寄存器(GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR 和 GPIOx_PUPDR)、2 个 32 位数据寄存器(GPIOx_IDR 和GPIOx_ODR)、1 个 32 位置位/复位寄存器 (GPIOx_BSRR)、1 个 32 位锁定寄存器(GPIOx_LCKR) 和 2 个 32 位复用功能选择寄存器(GPIOx_AFRH 和 GPIOx_AFRL)。! t# [* ~& H( A8 Z% l" `, b

7 |. T6 S% ?$ g6 v: `3 l* G/ O$ {02. GPIO主要特性
8 E$ u8 i6 X1 l1 ~, ^( p6 h- I● 受控 I/O 多达 16 个
. ~; X$ B5 s  h● 输出状态:推挽或开漏 + 上拉/下拉
5 Z6 X+ M6 E* Y" g1 M" p9 o) z● 从输出数据寄存器 (GPIOx_ODR) 或外设(复用功能输出)输出数据
7 X. u: S- K8 A4 Z● 可为每个 I/O 选择不同的速度$ |% h$ g. B, g, R3 I1 M6 G
● 输入状态:浮空、上拉/下拉、模拟9 \4 f: C2 c7 M8 Z% P4 W6 K9 A
● 将数据输入到输入数据寄存器 (GPIOx_IDR) 或外设(复用功能输入)) d& v  M3 A! e/ H1 d
● 置位和复位寄存器 (GPIOx_BSRR),对 GPIOx_ODR 具有按位写权限
2 ^+ o+ p, x1 l* N  I5 D: t" ?' `% T● 锁定机制 (GPIOx_LCKR),可冻结 I/O 配置
# E7 n& H" g8 o* w) _● 模拟功能
+ c: y; i# m  H  w5 F5 c● 复用功能输入/输出选择寄存器(一个 I/O 最多可具有 16 个复用功能)3 ?1 b+ n# a! @9 _8 O8 _, f
● 快速翻转,每次翻转最快只需要两个时钟周期
+ [) e. s* y# }: {, V8 W# a( H7 t● 引脚复用非常灵活,允许将 I/O 引脚用作 GPIO 或多种外设功能中的一种
4 ?; T7 y* u$ m& F! b$ v- b& k( v8 M, u/ q+ H
03. GPIO功能描述+ n0 R1 o. M6 @
根据数据手册中列出的每个 I/O 端口的特性,可通过软件将通用 I/O (GPIO) 端口的各个端口位分别配置为多种模式:% ~4 G( Z7 q3 Q4 p2 v
● 输入浮空
% \& L' V9 Q: N4 x! N! s  U● 输入上拉5 y: n7 Z- w) G1 I, R$ m* }
● 输入下拉" w' x. Y) ?( G. R2 _) W
● 模拟功能3 H, l+ U. N& d7 ?9 ~! {( w  n
● 具有上拉或下拉功能的开漏输出
) ~1 P$ M- I- O. @% q' ~● 具有上拉或下拉功能的推挽输出
# n$ [7 A0 ]7 O4 r' ]6 S0 ~8 a, X● 具有上拉或下拉功能的复用功能推挽
6 Y7 B& F/ R' h5 V7 i● 具有上拉或下拉功能的复用功能开漏
* T! N, Z7 P& g0 y) z7 H
) \: ~. P8 W3 M9 l6 L2 G8 _! r04. I/O引脚复用器和映射
% h5 y; [, n+ |, E微控制器 I/O 引脚通过一个复用器连接到板载外设/模块,该复用器一次仅允许一个外设的复用功能 (AF) 连接到 I/O 引脚。这可以确保共用同一个 I/O 引脚的外设之间不会发生冲突。# I. @5 A( {& z. E6 e% u' e5 T2 H

" o% [5 C) }, o2 }每个 I/O 引脚都有一个复用器,该复用器采用 16 路复用功能输入(AF0 到 AF15),可通过GPIOx_AFRL(针对引脚 0 到 7)和 GPIOx_AFRH(针对引脚 8 到 15)寄存器对这些输入进行配置。( }- ]$ i' U1 V* y9 f! w
+ C* c* U3 d' g% Z5 k, J
● 完成复位后,所有 I/O 都会连接到系统的复用功能 0 (AF0)。
4 |( e! B4 k9 z5 r* S3 x4 @6 S● 外设的复用功能映射到 AF1 至 AF13。
& ~! ?0 c  t1 U  H* k● Cortex™-M4F EVENTOUT 映射到 AF15。! r/ j; D% x0 Q+ Z, f1 S; m- ?6 v
+ m% o+ q- T. Q4 |, B3 d$ I+ I
2020081919495415.png
6 n: f$ y% Z7 z' Q% t! n
3 r* |4 S$ m' K- O05. I/O端口控制寄存器
! H8 Q: J/ d, A; }" l
每个 GPIO 有 4 个 32 位存储器映射的控制寄存器(GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR),可配置多达 16 个 I/O。
: P. X( [8 G; O' c/ L4 S% C  b; R
$ c' B, c! W9 ~! p3 GGPIOx_MODER 寄存器用于选择 I/O 方向(输入、输出、AF、模拟)。  ^" o7 @$ O1 d2 W9 @% e

# s* z" A- E3 D9 R# u( l+ m- o  mGPIOx_OTYPER 和 GPIOx_OSPEEDR 寄存器分别用于选择输出类型(推挽或开漏)和速度 (无论采用哪种 I/O 方向,都会直接将 I/O 速度引脚连接到相应的 GPIOx_OSPEEDR 寄存器位)。
! U& r6 l# ?1 h; _: @+ \) b! b4 Y/ ?# g2 Z8 T9 C
无论采用哪种 I/O 方向,GPIOx_PUPDR 寄存器都用于选择上拉/下拉。
! f( m3 X" ]8 j7 \$ d" Z
/ c# ?4 P5 z) _7 |7 b06. I/O端口数据寄存器) Q3 y2 x! m- O- {3 ^
每个 GPIO 都具有 2 个 16 位数据寄存器:输入和输出数据寄存器(GPIOx_IDR 和GPIOx_ODR)。GPIOx_ODR 用于存储待输出数据,可对其进行读/写访问。通过 I/O 输入的数据存储到输入数据寄存器 (GPIOx_IDR) 中,它是一个只读寄存器。
8 b$ U. U. [3 \5 J6 {5 _
# \1 x& Z8 a4 \+ @5 x( ~+ X07. I/O数据位操作
* n$ i* j" i% y9 }  U4 n, J5 r: k( M置位复位寄存器 (GPIOx_BSRR) 是一个 32 位寄存器,它允许应用程序在输出数据寄存器(GPIOx_ODR) 中对各个单独的数据位执行置位和复位操作。置位复位寄存器的大小是GPIOx_ODR 的二倍。  d8 V* }: w0 o( ]$ l( W$ R8 L. N

/ {. A5 o" [1 |- a1 K1 d08. GPIO锁定机制
$ ]. F4 v4 g0 n4 z, |5 a( _6 K+ n* L通过将特定的写序列应用到 GPIOx_LCKR 寄存器,可以冻结 GPIO 控制寄存器。冻结的寄存器包括 GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR、GPIOx_AFRL 和 GPIOx_AFRH。
  Z8 c! ]( ]+ ~7 [# J' w0 e
( G# Y6 `6 }8 ~1 ^  Y要对 GPIOx_LCKR 寄存器执行写操作,必须应用特定的写/读序列。当正确的 LOCK 序列应用到此寄存器的第 16 位后,会使用 LCKR[15:0] 的值来锁定 I/O 的配置(在写序列期间,LCKR[15:0] 的值必须相同)。将 LOCK 序列应用到某个端口位后,在执行下一次复位之前,将无法对该端口位的值进行修改。每个 GPIOx_LCKR 位都会冻结控制寄存器(GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR、GPIOx_AFRL 和 GPIOx_AFRH)中的对应位。
) r, Z! n2 Z6 A2 `# [& C1 E! I8 H# q9 p- B0 N, u
09. GPIO寄存器描述% j* _- }! w* @: c
9.1 GPIO端口模式寄存器 (GPIOx_MODER) (x = A…I)

1 O- G5 Y' j& w2 n+ {GPIO port mode register
3 [* H0 n3 z& g, H9 `9 ~( z. ]8 u偏移地址:0x00" z3 c5 r2 m; N; _5 D( N& Q
复位值:1 Z. @+ K5 L. p6 N$ X% ^6 n; Z. d- ]
● 0xA800 0000(端口 A)
4 E6 e+ G$ s5 D6 x% b, E● 0x0000 0280(端口 B)
/ n5 R- f. ^; R9 i4 O● 0x0000 0000(其它端口)
" `2 T6 Y& _* O
& D3 i% b0 l4 A' C- l) ?6 O. k# {/ i% T RX6Y80WED68`$%WIC`WVW.png 2 |2 E/ D" h1 x4 n  s
" M  v2 n4 W# {7 S- B2 W
9.2 GPIO端口输出类型寄存器 (GPIOx_OTYPER) (x = A…I)
  q/ r  s3 w$ ~GPIO port output type register1 L  B0 o  B1 v
偏移地址:0x04
+ ]. B: r6 {6 q, l+ `复位值:0x0000 0000: k) W# U6 s: W& m- [- x; {
/ }% ]: i2 m. s! u4 I0 @
20200819195020422.png
6 o- }1 a# o5 Z7 U# ?, x  s3 ^& E2 p* c3 s# @
位 31:16 保留,必须保持复位值。0 ^' |( }. |, L; V& |4 Z) X
位 15:0 OTy[1:0] :端口 x 配置位 (Port x configuration bits) (y = 0…15)% s9 m+ L7 ^. T& {" O
这些位通过软件写入,用于配置 I/O 端口的输出类型。  h2 P- ?2 V. I0 T2 `' w5 x
0:输出推挽(复位状态)
  M$ |6 ]! \, R  d. }$ ~+ m3 ^6 y1:输出开漏
: E6 p; S/ o1 \, L, @' [" J# k2 j  K# {: Z) c! \$ d; ^, P
9.3 GPIO端口输出速度寄存器 (GPIOx_OSPEEDR) (x = A…I/)1 A/ l& t- P, p2 G, ^  X
GPIO port output speed register
! w1 i% p- L9 \* [7 [* C5 h' j偏移地址:0x08+ O& c9 W1 ?6 f; q* l! U# p: |
复位值:
5 b3 R3 O8 u+ L. s1 v) v● 0x0000 00C0(端口 B)
/ k. ]1 u# c& |! y● 0x0000 0000(其它端口)
9 Z8 h2 t+ ~6 F: w* g" V; r) {+ J' t; g$ [, v: w( H% n
IPA@WB7F03@I48DE7{7%X(K.png 5 l5 r% E2 L0 I2 j" [

7 f* H# i6 d+ V' I. E( t$ [9.4 GPIO端口上拉/下拉寄存器 (GPIOx_PUPDR) (x = A…I/). A- o' T/ B6 y
GPIO port pull-up/pull-down register
6 y: b% m: W" _- m5 X1 v偏移地址:0x0C. j! c$ s, ?# N# \$ h" ~4 x
复位值:
4 A3 J( ?  s7 `5 V* V! E8 |● 0x6400 0000(端口 A)
1 f5 J& w) v% S0 ~: W! \● 0x0000 0100(端口 B)
9 q7 h% f( c# n● 0x0000 0000(其它端口)6 Q$ [" F# M% Z
6 D& P2 l7 i/ X5 R3 P
20200819195047873.png
' d9 [0 I; H! u2 H8 u  o: b* R$ h/ O1 i. A) H* X3 {* e6 q: `! w+ o
位 2y:2y+1 PUPDRy[1:0] :端口 x 配置位 (Port x configuration bits) (y = 0…15)
, X1 T+ n6 K+ m9 q! \. Y这些位通过软件写入,用于配置 I/O 上拉或下拉。& c0 C5 [+ i. k. [
00:无上拉或下拉2 u" U7 {' h, X" [- F
01:上拉
# d. N! \' [( l/ S# t10:下拉( i- g  P5 Y8 M& p0 l" m3 z
11:保留; t8 m& H7 [& ]9 M2 v8 T; T
- g7 V: e  {: L- r
9.5 GPIO端口输入数据寄存器 (GPIOx_IDR) (x = A…I)5 b+ j% q  c1 S1 k
GPIO port input data register
7 ^. V. V" S# C9 K% N6 Q+ D偏移地址:0x10
, k& j$ X/ T8 r0 i复位值:0x0000 XXXX(其中 X 表示未定义)
9 h; Y1 n0 x- l, j6 M9 K, c
. ~' q  a; I& z9 O5 H# }8 g V(X8@6ZL`4%]~W99BPQW[)K.png
: j0 ]4 P- P- r; v. P
9 o8 n% A0 E" y7 I3 q2 M  U, [9.6 GPIO端口输出数据寄存器 (GPIOx_ODR) (x = A…I)
4 x- ?% R+ D% WGPIO port output data register# E# N- N% m) w- |6 N
偏移地址:0x14
' _  o$ q! w$ B/ b复位值:0x0000 0000
1 H. g4 c! \( O8 V7 V# O! T! O* M
; t% u+ z3 l: @7 l0 L7 ~/ K& i1 d3 n K)-T4YJYQU}N@~`JPM40O.png
' V+ S3 ^  N$ ~0 Y5 Z; c2 c) ?- \! }, ?
9.7 GPIO端口置位/复位寄存器 (GPIOx_BSRR) (x = A…I)
0 k) o- @" {$ j9 r6 Z' N+ y/ ~0 BGPIO port bit set/reset register
! I  z" Q0 [* p  t8 `1 e偏移地址:0x186 c  ?! [  i; b/ m/ e3 m8 a
复位值:0x0000 0000- [4 i% U2 V1 w* O$ L7 }9 _: V+ ?
- h& v/ f4 U/ p4 }( R: F8 e+ J( A
A]64TM95W)L{V90KLVXA020.png 0 I" Z% y4 D4 v' A9 a: @% S7 a9 q
9 J- b% d; D6 ^# ^
9.8 GPIO复用功能低位寄存器 (GPIOx_AFRL) (x = A…I)# E3 L( R- V, L1 X
GPIO alternate function low register
4 q5 H0 _9 |- e2 y偏移地址:0x20
, P$ k' Y6 l0 |2 F5 p5 k+ }5 m0 G: J! [复位值:0x0000 0000
- Y: _1 i$ m; a/ u) R3 \0 l; `+ P- G  g( J% @
}EC%9KMXUO9N1Y5HUG@I.png
( E- b5 M% N9 d+ G* z# a( Z: y' x7 s  v. b1 l
9.9 GPIO复用功能高位寄存器 (GPIOx_AFRH) (x = A…I)
1 m, f9 F. q7 W9 L3 T0 z  oGPIO alternate function high register
4 s8 A- }* V5 ~5 f/ A: C偏移地址:0x24
) Y& F( X& d. G5 H复位值:0x0000 0000
& l" ?; q9 @! ^" |
9 [2 m2 [6 ~- n5 T7 p ' u1 D1 l0 Z3 m% f& m" o- L

. b6 @% ~# p8 d: i$ _+ [7 C5 @7 L' n9 o( H$ t
赞 收藏 评论0 发布时间:2022-4-3 16:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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