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

【经验分享】STM32 GPIO概述

[复制链接]
STMCU小助手 发布时间:2022-6-11 21:25
01. GPIO简介9 q' F8 Q9 y) D6 w* e
每个通用 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)。
7 _  N+ {+ l4 |# \& D4 y* \" C/ }' G& H' N
02. GPIO主要特性
& y5 ?' \- y: G" K4 G● 受控 I/O 多达 16 个3 B! O8 c; `% }( C7 I3 N* j
● 输出状态:推挽或开漏 + 上拉/下拉
4 _# S# A6 e( L0 n' n● 从输出数据寄存器 (GPIOx_ODR) 或外设(复用功能输出)输出数据
; H! z8 Q9 v4 F2 `/ f& w% ^0 d$ a; K* l● 可为每个 I/O 选择不同的速度
# C1 G3 R# a3 O$ o9 q● 输入状态:浮空、上拉/下拉、模拟8 S+ w' J5 r6 E  T7 O1 R& S
● 将数据输入到输入数据寄存器 (GPIOx_IDR) 或外设(复用功能输入); x% s0 e) H4 t3 W
● 置位和复位寄存器 (GPIOx_BSRR),对 GPIOx_ODR 具有按位写权限
6 X. t! Q( a# i. I( ^● 锁定机制 (GPIOx_LCKR),可冻结 I/O 配置
# f7 l* b! j" ?: h2 r5 p8 L● 模拟功能! T7 E5 i/ A0 Y9 U! p* d3 T8 {1 x
● 复用功能输入/输出选择寄存器(一个 I/O 最多可具有 16 个复用功能)
) w* T( l" `3 J; ^● 快速翻转,每次翻转最快只需要两个时钟周期
( y* v  Z8 k, l! t7 I● 引脚复用非常灵活,允许将 I/O 引脚用作 GPIO 或多种外设功能中的一种
) O0 z3 `; N( W: P/ Q, P& h/ h! r% G6 ]( u/ a
03. GPIO功能描述, |" a$ T$ @& {
根据数据手册中列出的每个 I/O 端口的特性,可通过软件将通用 I/O (GPIO) 端口的各个端口位分别配置为多种模式:: _$ _7 V7 w( h/ H& M
● 输入浮空
/ U4 Q$ m! n* R+ W( T  g● 输入上拉
. A, {  Z) r% B# H7 W) n● 输入下拉
6 u4 X- m( s1 t● 模拟功能5 @& h/ Z5 E% S9 p; \" g- Q
● 具有上拉或下拉功能的开漏输出; k, _) t1 H4 x' t8 F; l
● 具有上拉或下拉功能的推挽输出
3 s. q. E' A, J# t+ G● 具有上拉或下拉功能的复用功能推挽; I+ s" I7 ~" y6 B0 y: V
● 具有上拉或下拉功能的复用功能开漏* L% `0 v3 M* h: j1 W! T8 o

' o$ s, h( v; G04. I/O引脚复用器和映射

5 B; O; F1 U2 A- }  b& O5 a微控制器 I/O 引脚通过一个复用器连接到板载外设/模块,该复用器一次仅允许一个外设的复用功能 (AF) 连接到 I/O 引脚。这可以确保共用同一个 I/O 引脚的外设之间不会发生冲突。
8 `# \2 y6 |& k. S. z5 u0 X
3 \* ^% ~" u+ ]0 T3 y5 o每个 I/O 引脚都有一个复用器,该复用器采用 16 路复用功能输入(AF0 到 AF15),可通过GPIOx_AFRL(针对引脚 0 到 7)和 GPIOx_AFRH(针对引脚 8 到 15)寄存器对这些输入进行配置。& r. N' {8 l& }. B& X
. `$ a4 R7 g7 L3 N
● 完成复位后,所有 I/O 都会连接到系统的复用功能 0 (AF0)。/ ?( ~8 J, |( S$ \
● 外设的复用功能映射到 AF1 至 AF13。
8 @+ ?7 N% Z% [: s) u● Cortex™-M4F EVENTOUT 映射到 AF15。
, S' H) X& q) D& A: Q  d: d' I: w9 A; ^; T, ^% j
2020081919495415.png
0 G' a9 ?! _2 X, Q
2 [8 }1 g* C6 G, U1 O; e3 k05. I/O端口控制寄存器. x' v* A8 M) E8 v
每个 GPIO 有 4 个 32 位存储器映射的控制寄存器(GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR),可配置多达 16 个 I/O。
2 P2 n; M$ s* [! N8 E
) G5 ^9 c$ G  o5 @- PGPIOx_MODER 寄存器用于选择 I/O 方向(输入、输出、AF、模拟)。! a$ W; R1 N- F# M6 Y$ s2 s9 ]

' V) h7 V& K% m: a  }- `GPIOx_OTYPER 和 GPIOx_OSPEEDR 寄存器分别用于选择输出类型(推挽或开漏)和速度 (无论采用哪种 I/O 方向,都会直接将 I/O 速度引脚连接到相应的 GPIOx_OSPEEDR 寄存器位)。
2 L4 O6 V7 K5 d( D6 a' |/ O8 d' y1 e
无论采用哪种 I/O 方向,GPIOx_PUPDR 寄存器都用于选择上拉/下拉。! Y4 p$ |5 c+ E# M4 }! |
& Q" @. k5 r1 F( a- d8 |
06. I/O端口数据寄存器  V+ `9 \* @2 b8 r
每个 GPIO 都具有 2 个 16 位数据寄存器:输入和输出数据寄存器(GPIOx_IDR 和GPIOx_ODR)。GPIOx_ODR 用于存储待输出数据,可对其进行读/写访问。通过 I/O 输入的数据存储到输入数据寄存器 (GPIOx_IDR) 中,它是一个只读寄存器。
2 V1 s% _( I, i& y$ F2 x0 T
2 ~+ W/ K5 P* t% c. s07. I/O数据位操作) R2 K9 C$ H8 [% d7 U) Y
置位复位寄存器 (GPIOx_BSRR) 是一个 32 位寄存器,它允许应用程序在输出数据寄存器(GPIOx_ODR) 中对各个单独的数据位执行置位和复位操作。置位复位寄存器的大小是GPIOx_ODR 的二倍。8 \6 u0 a3 j1 _; a
: v; f' V' `8 s' h6 {0 l
08. GPIO锁定机制
! {! X6 n' M- h) c; V8 S4 c! l4 \# r通过将特定的写序列应用到 GPIOx_LCKR 寄存器,可以冻结 GPIO 控制寄存器。冻结的寄存器包括 GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR、GPIOx_AFRL 和 GPIOx_AFRH。9 e3 m4 a" s6 M& f1 o* o

+ j! }) @0 d2 c1 e3 e要对 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)中的对应位。
7 I+ A# i" j& w! {. K! h- U2 P" ]5 m4 P& s, b+ Z- Q7 V& W
09. GPIO寄存器描述
8 c9 p( g/ q" `* j5 N( ?4 g: M2 E9.1 GPIO端口模式寄存器 (GPIOx_MODER) (x = A…I)
. ~" A  `* s& D+ B& c
GPIO port mode register
( B3 A4 W$ i' m) J3 M6 r3 Y* J' I6 s# h偏移地址:0x00+ P1 @+ a8 |: d: G6 Q" h; q& D
复位值:) Y0 t3 ~& k2 {2 v) P
● 0xA800 0000(端口 A)
5 v& `0 p1 H! l( F' A- \● 0x0000 0280(端口 B)
/ @5 ~* N& g4 Z0 m, K# P● 0x0000 0000(其它端口)
0 O! o1 B  l! v/ p5 k; r9 ^! q1 w+ B. Q! @+ _, |) k
2020081919500924.png
/ ]3 b+ ]8 ]# \" w' x) c* z, w9 i
+ S9 H) P+ |. X7 J9.2 GPIO端口输出类型寄存器 (GPIOx_OTYPER) (x = A…I)  J2 ]( o5 r- B* z
GPIO port output type register
. m  K# i# `. c5 A$ ]: A% A偏移地址:0x04
9 G' v8 U3 k9 g5 }复位值:0x0000 0000
+ |+ R2 M: ^2 R# |6 \' _3 H4 r1 g4 T2 i7 K* V
20200819195020422.png 4 A/ Q. [6 A4 E" C) P: A0 p
' z  Q5 w4 E( Q5 Q
位 31:16 保留,必须保持复位值。
4 l, i# Y$ A* V2 n2 N- j! n位 15:0 OTy[1:0] :端口 x 配置位 (Port x configuration bits) (y = 0…15)& }  y% O  r9 B8 q8 y6 D4 F
这些位通过软件写入,用于配置 I/O 端口的输出类型。% p- E8 H, I4 D+ p; w
0:输出推挽(复位状态)
4 a3 f- V3 @2 P8 L, U1:输出开漏
2 i8 j( h) I+ f1 _0 A7 R# ?
7 R' H% H  `3 {2 w, }( a8 Z  G/ k; x9.3 GPIO端口输出速度寄存器 (GPIOx_OSPEEDR) (x = A…I/)2 j" u* m2 K. v- L4 W& Z
GPIO port output speed register; ]% k9 d6 ~1 B2 R/ ^; q
偏移地址:0x085 T3 Y5 u2 d0 [" l0 J5 z
复位值:/ y6 H  _3 d4 D9 `
● 0x0000 00C0(端口 B)8 S3 {/ i8 V9 }' @2 P. l4 u
● 0x0000 0000(其它端口)! |; G1 `2 O2 \
8 G) e0 b% s4 L2 N: j/ u1 B
20200819195036730.png , h/ c& A9 @5 \  j1 B
; T2 k$ g' q  C
9.4 GPIO端口上拉/下拉寄存器 (GPIOx_PUPDR) (x = A…I/)
7 @7 x: S3 l% h7 e' pGPIO port pull-up/pull-down register
. t: F" W3 y# m4 x# L偏移地址:0x0C3 z# k4 @' ]' b
复位值:% E; M, d% }4 |$ u) o
● 0x6400 0000(端口 A)6 I: z: C) h: F1 ^6 v, I
● 0x0000 0100(端口 B): w/ g! f  T# j6 h4 Z
● 0x0000 0000(其它端口): e. k* _$ y8 a9 j2 ^. a, g4 ?) H

! ?$ l1 w. N# h9 s 20200819195047873.png 0 y5 T8 Z+ `' Y4 o1 T
% k  L) ^* ^) t0 f/ M4 B
位 2y:2y+1 PUPDRy[1:0] :端口 x 配置位 (Port x configuration bits) (y = 0…15)
' b/ K- r& r+ g& I, D这些位通过软件写入,用于配置 I/O 上拉或下拉。
5 q" A3 x- K% i9 o' R7 N) V00:无上拉或下拉; }/ h2 o6 V9 S! c
01:上拉
8 z% S- \9 n+ o10:下拉' r; N+ b% O3 m6 B3 ]8 P
11:保留( a+ j+ ~$ n" [# E

2 {. i- E) _* }) S5 u9 T9.5 GPIO端口输入数据寄存器 (GPIOx_IDR) (x = A…I)) W( p7 n0 z2 z
GPIO port input data register
; T* k: `) W0 J: {- E6 e偏移地址:0x10
  F  s9 m  [  V# ^7 X- }6 m复位值:0x0000 XXXX(其中 X 表示未定义)
) I. C( l8 _* x7 `7 `& c6 ]1 W) g
5 l, p+ O+ O+ y" g% X* [$ l$ p 2020081919510533.png : ^6 X6 M6 A; _: I* I2 m* z$ T/ e
6 s% v! n& J  y( q/ h- n& i" y
9.6 GPIO端口输出数据寄存器 (GPIOx_ODR) (x = A…I)
1 }3 Z2 K- d0 t1 a6 G9 F; gGPIO port output data register/ s9 o! K& M: Z8 g% Y" ]
偏移地址:0x14
9 k; _" E) l- \5 M# m9 D+ |% R6 }复位值:0x0000 0000
1 Q- ^, J9 ^! e) x4 \) G: w
7 j9 T) b! V" [) p% r/ h 20200819195116400.png % \: }1 f- e# |
8 k7 N/ Z5 X9 I$ b9 z; o
9.7 GPIO端口置位/复位寄存器 (GPIOx_BSRR) (x = A…I)$ @) l6 R7 K; r( z8 x/ d( N
GPIO port bit set/reset register* ~4 P  b+ H4 H) _* z' N) E
偏移地址:0x18% l& `! t2 X* h+ V  |, L
复位值:0x0000 00004 S/ B; N4 U) B2 h
2 m& |% P9 J' N4 |! y
20200819195131333.png
4 U( m' @  S& p+ D4 w5 z6 U4 L" M* D9 @# i; M" W6 A
9.8 GPIO复用功能低位寄存器 (GPIOx_AFRL) (x = A…I)
( k; S: J# g7 ~GPIO alternate function low register2 ]1 T. f  ?8 V; s& z/ p+ ^) D
偏移地址:0x205 J6 d) o: m+ e- F: I# U/ N
复位值:0x0000 0000. e2 H5 C% s( F: _

( R, B% u; M9 h; ? 20200819195141881.png 6 @" y' Z5 f9 C5 @4 _
: s( y2 c4 V0 T! M$ H: N) O
9.9 GPIO复用功能高位寄存器 (GPIOx_AFRH) (x = A…I)2 K2 N; h. G# c( p# d) E) s* f
GPIO alternate function high register: K6 }7 R+ J# [& T8 i! x. e! s
偏移地址:0x243 `& h  O6 R, f# S! b6 B1 o
复位值:0x0000 0000
$ R) @2 K" {% F) t( V" c7 x 20200819195203238.png + B" y+ C: ?- A: |

0 ?5 m; B. u' K$ U
, M; s% j) f$ @, S3 T
9 o  j6 ]+ F% {: b$ n  i- {) H1 U& y* e* t* k$ [6 ]
赞 收藏 1 评论0 发布时间:2022-6-11 21:25

举报

0个回答

所属标签

相似技术帖

官网相关资源

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