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

【经验分享】STM32 GPIO概述

[复制链接]
STMCU小助手 发布时间:2022-4-3 16:00
01. GPIO简介
2 D8 M, [  j( P+ G每个通用 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)。
$ X' K3 W9 N8 y' L
" V7 S, E3 Q# }& ?* J1 m1 {9 ^9 {02. GPIO主要特性
  |7 H3 ^  k( _8 Y0 o● 受控 I/O 多达 16 个  Y7 p3 H4 l) ?# Z$ M1 X9 I9 h
● 输出状态:推挽或开漏 + 上拉/下拉8 w. S2 A1 e1 a- b7 k
● 从输出数据寄存器 (GPIOx_ODR) 或外设(复用功能输出)输出数据
0 Z/ u! e& ^! Y● 可为每个 I/O 选择不同的速度
6 A9 p) F+ `. ]$ v& w● 输入状态:浮空、上拉/下拉、模拟
! Y# d' j; k) ^# ^● 将数据输入到输入数据寄存器 (GPIOx_IDR) 或外设(复用功能输入)2 p! u: V. P1 |8 R" {9 b
● 置位和复位寄存器 (GPIOx_BSRR),对 GPIOx_ODR 具有按位写权限
: X- B7 @; U1 m' ]. ]8 p* i● 锁定机制 (GPIOx_LCKR),可冻结 I/O 配置! C% w- ~) o- |
● 模拟功能3 q& p. Q' [5 Q# n
● 复用功能输入/输出选择寄存器(一个 I/O 最多可具有 16 个复用功能)
2 G* l: c3 M/ \" c5 r● 快速翻转,每次翻转最快只需要两个时钟周期7 W4 G/ ~* S) ^0 X5 U
● 引脚复用非常灵活,允许将 I/O 引脚用作 GPIO 或多种外设功能中的一种
7 R- ?$ Z) r& e% Y0 B4 {# x* p' H
03. GPIO功能描述
7 u# u5 _2 Z- H/ b2 N根据数据手册中列出的每个 I/O 端口的特性,可通过软件将通用 I/O (GPIO) 端口的各个端口位分别配置为多种模式:# L" P! S6 ]" Y5 X  }
● 输入浮空
5 m  \2 i2 M" G" e4 x● 输入上拉% ]& V: S& k1 ~; p- [
● 输入下拉7 t8 M  K2 f) U7 m; b
● 模拟功能4 u/ q$ O6 Y/ A' Q8 J% Q7 u
● 具有上拉或下拉功能的开漏输出
  L  i7 f1 X& }" P3 T6 M3 |0 m● 具有上拉或下拉功能的推挽输出
/ a, |) c! l5 ^● 具有上拉或下拉功能的复用功能推挽
; @! X- o' h' G! [, y) v: d/ e● 具有上拉或下拉功能的复用功能开漏6 G& Q, ?1 G' I# V$ A$ A

; X6 A- D( {1 f" I6 f: `0 z04. I/O引脚复用器和映射
' _2 n9 f! p7 L2 w$ E. J. }微控制器 I/O 引脚通过一个复用器连接到板载外设/模块,该复用器一次仅允许一个外设的复用功能 (AF) 连接到 I/O 引脚。这可以确保共用同一个 I/O 引脚的外设之间不会发生冲突。
" {* D* O, k" U  `9 y. z0 O
- L/ N. y0 r: M每个 I/O 引脚都有一个复用器,该复用器采用 16 路复用功能输入(AF0 到 AF15),可通过GPIOx_AFRL(针对引脚 0 到 7)和 GPIOx_AFRH(针对引脚 8 到 15)寄存器对这些输入进行配置。
" h! z' J; t# Y' I
! b4 D/ i5 z  D● 完成复位后,所有 I/O 都会连接到系统的复用功能 0 (AF0)。) V! M. r% ~& w8 L7 w" R! D
● 外设的复用功能映射到 AF1 至 AF13。% \$ G, a( Y% r) m
● Cortex™-M4F EVENTOUT 映射到 AF15。
- e( `; Q0 ]  o! G, Q
, i3 O- W( ]" ]4 l: b 2020081919495415.png   Z2 F- m+ l# O3 h4 o/ Z
: ]$ X8 y4 q* J( g1 C7 u
05. I/O端口控制寄存器

& Y: I* v- g2 f, X. d, u% X# F每个 GPIO 有 4 个 32 位存储器映射的控制寄存器(GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR),可配置多达 16 个 I/O。
% Q! q- G, w& a& Z$ d, x; K" M: G3 k- _  y; @0 y7 }1 I
GPIOx_MODER 寄存器用于选择 I/O 方向(输入、输出、AF、模拟)。
, V  y6 L0 f. ^- @* C& B- `  I& r6 r# J$ m
GPIOx_OTYPER 和 GPIOx_OSPEEDR 寄存器分别用于选择输出类型(推挽或开漏)和速度 (无论采用哪种 I/O 方向,都会直接将 I/O 速度引脚连接到相应的 GPIOx_OSPEEDR 寄存器位)。, o- L" f  D$ Q" L3 X8 V

, C  [6 T% C4 s9 n0 T无论采用哪种 I/O 方向,GPIOx_PUPDR 寄存器都用于选择上拉/下拉。8 ^" a7 ^  ]% n  T9 ]4 }
6 E9 C& [. q+ Y" L- P- x
06. I/O端口数据寄存器
% d" d$ Z  ]6 }' B每个 GPIO 都具有 2 个 16 位数据寄存器:输入和输出数据寄存器(GPIOx_IDR 和GPIOx_ODR)。GPIOx_ODR 用于存储待输出数据,可对其进行读/写访问。通过 I/O 输入的数据存储到输入数据寄存器 (GPIOx_IDR) 中,它是一个只读寄存器。6 l) P, \: _9 K4 I/ y- e- A2 p
7 v! v3 ^) W& g1 ^3 [5 F( m+ N
07. I/O数据位操作
2 `1 i  _3 W% @9 ^& \  N2 U, d置位复位寄存器 (GPIOx_BSRR) 是一个 32 位寄存器,它允许应用程序在输出数据寄存器(GPIOx_ODR) 中对各个单独的数据位执行置位和复位操作。置位复位寄存器的大小是GPIOx_ODR 的二倍。% ~$ H' J4 J% v) `
- ^: \+ ~$ g1 M2 m7 B6 Y+ U9 ?' Y
08. GPIO锁定机制
$ O7 w% j# ]! B2 @; Z) Y5 p通过将特定的写序列应用到 GPIOx_LCKR 寄存器,可以冻结 GPIO 控制寄存器。冻结的寄存器包括 GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR、GPIOx_AFRL 和 GPIOx_AFRH。. S4 R  y0 V/ a3 D% }
/ E% ~) F4 K7 `2 G) B
要对 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)中的对应位。4 W8 `& a7 `3 Y
/ K: h% x  u. ]8 d$ k; \
09. GPIO寄存器描述" j( ?7 x* Q$ N8 f, ^( H+ ~# y$ ]6 ^# N# b
9.1 GPIO端口模式寄存器 (GPIOx_MODER) (x = A…I)
- R9 L) B! ]; u# D2 W8 E) ^! t- I
GPIO port mode register
* E2 L  Z( Z' m% y偏移地址:0x00* v( G$ S& F0 D  M3 v# {
复位值:
6 y  y5 F; h( V& r3 q5 s● 0xA800 0000(端口 A)
3 ^, A1 m: J+ v; J● 0x0000 0280(端口 B)
; S+ W/ j3 [6 d# {$ N0 N0 p● 0x0000 0000(其它端口)2 O  E9 b/ ^1 T/ a0 Z! Q. Q: U
. @+ J" A4 j5 n* k+ [4 T
RX6Y80WED68`$%WIC`WVW.png
3 A3 H5 `  ~& K; i. u8 x2 F( ^' w1 i) [) ~8 W: d
9.2 GPIO端口输出类型寄存器 (GPIOx_OTYPER) (x = A…I)
- D2 x  @6 T) L7 K8 A4 m! mGPIO port output type register4 v& a, a9 o7 i* Y8 b
偏移地址:0x04
! K* B( j3 I; l复位值:0x0000 0000
$ ]& }6 W* z# C4 `( V+ q3 Y
) M0 n# a# w4 F+ K 20200819195020422.png
  r" {' ]# k- @4 f6 X! T$ `
) \# v) H. [" k$ w位 31:16 保留,必须保持复位值。2 t$ t% S' \5 K% q! ~/ T' f
位 15:0 OTy[1:0] :端口 x 配置位 (Port x configuration bits) (y = 0…15)
6 q' |- C# I) x' C4 C这些位通过软件写入,用于配置 I/O 端口的输出类型。
) R4 ?5 p5 ~) M. M% ^0:输出推挽(复位状态)/ F3 b" C$ L6 A( J
1:输出开漏
/ X. [1 j$ S8 U6 ^, z- ?4 u% ^3 K% H& M
9.3 GPIO端口输出速度寄存器 (GPIOx_OSPEEDR) (x = A…I/)
2 {. I2 A7 b7 }% TGPIO port output speed register
4 @6 F/ X5 ?; X* _6 j* C' K偏移地址:0x086 q  K, k) Z0 Q+ r' `5 g
复位值:
1 y8 g/ x( F5 ~7 `1 N$ X/ b● 0x0000 00C0(端口 B). [+ s" q, I% Z+ s
● 0x0000 0000(其它端口)' M9 K2 [1 N  H
5 _, p1 e, j( g: d5 |
IPA@WB7F03@I48DE7{7%X(K.png ! I- W( \, `8 \( y3 u, ~% d

7 Y- F, O1 t, K; q  q9.4 GPIO端口上拉/下拉寄存器 (GPIOx_PUPDR) (x = A…I/), u9 }* Z, [* t, q0 p' }
GPIO port pull-up/pull-down register5 }* ~, G, T: v8 p# o9 b" o* c
偏移地址:0x0C
2 V. T$ s0 j' D2 P复位值:" M3 E7 w; \" i9 s8 x* Z) L, @+ D
● 0x6400 0000(端口 A)! ], J% c9 u; F! H5 m" }
● 0x0000 0100(端口 B)
$ q' A7 q( U( s- J6 l" }1 u& {● 0x0000 0000(其它端口)! e8 N& E# C" \% U! I
9 W2 X7 r1 `% d
20200819195047873.png 8 {" N. Z& R. u$ l% M, o, l/ `5 l  A" r

* I$ h6 D$ W% I4 q& G位 2y:2y+1 PUPDRy[1:0] :端口 x 配置位 (Port x configuration bits) (y = 0…15)4 U+ X+ P# v. e  e" a3 O
这些位通过软件写入,用于配置 I/O 上拉或下拉。0 E: O2 N/ W: I/ R. [, R
00:无上拉或下拉. Q& p1 ]. `7 X2 }
01:上拉  E, Z8 }' |; i& u3 J8 N. e2 i
10:下拉
- b2 U- J6 u* @( n4 n& [9 W! Q- j11:保留
/ T3 M8 r) p! h& Z2 v1 ^" ^$ i# T
6 R' F! J5 a& q( f2 v# D8 P9.5 GPIO端口输入数据寄存器 (GPIOx_IDR) (x = A…I)
& Q+ x8 @: G" g& r& yGPIO port input data register! g8 @3 _7 {' f5 o9 a
偏移地址:0x10
) h; V" _* S/ N, N# z  u复位值:0x0000 XXXX(其中 X 表示未定义)
: s- k- I% b0 P, ?5 a8 b" F  Y- E2 k/ Q( Z2 {% y- {- }
V(X8@6ZL`4%]~W99BPQW[)K.png * Z6 ^, j( _, s$ R0 T

3 o% o4 _  q" g# S0 W) R% Y, w9.6 GPIO端口输出数据寄存器 (GPIOx_ODR) (x = A…I)# v. Q$ @1 k' C/ z" r
GPIO port output data register
4 g+ u( H3 @3 d5 g6 L" W偏移地址:0x14& u  M( S7 X0 L8 a# B$ z: {
复位值:0x0000 0000  p4 y; B1 f9 Z( }# D& |
1 n5 h+ f, X' P$ l( E( n0 {
K)-T4YJYQU}N@~`JPM40O.png 5 L6 E( K, ~; C6 g/ H& @  [
5 v$ D3 V2 M( ^
9.7 GPIO端口置位/复位寄存器 (GPIOx_BSRR) (x = A…I)& V/ y6 B/ b$ k  t, D
GPIO port bit set/reset register* k) V* p* W* |: S6 A$ n
偏移地址:0x184 ?' l) G8 l2 G
复位值:0x0000 0000- J6 c: U4 H! J+ P7 ~/ O( Q& `) W

8 n' M! q1 }' G* d# x A]64TM95W)L{V90KLVXA020.png , C# u7 g% E, [. t

: D9 m4 j$ P6 ]$ R/ k9.8 GPIO复用功能低位寄存器 (GPIOx_AFRL) (x = A…I)! L" `( }7 K6 Q
GPIO alternate function low register2 P# S" T/ U. U) @* q4 C8 S% Z
偏移地址:0x20( V; S1 D/ i1 k' \: L
复位值:0x0000 00009 F9 \( N& p6 p1 f/ U& }
  A0 C5 X4 s- t, G' y$ e+ j
}EC%9KMXUO9N1Y5HUG@I.png $ t1 K/ }0 T: E4 ~1 S+ R

( ^4 d9 D; d7 U9.9 GPIO复用功能高位寄存器 (GPIOx_AFRH) (x = A…I)
8 O. I7 m. W  k" Z" jGPIO alternate function high register: R. _; D) ?# Z: ^6 w- @# I
偏移地址:0x24
; O  n9 w5 \1 `复位值:0x0000 0000  P. z6 U7 m: _8 B
" I! e; x3 g6 `9 {- q. |/ I

- ]7 I! s' M6 j0 A2 s
, h& g0 C2 Q5 s; K
% ^* j' H. _% R% w# ^6 a6 O8 m
赞 收藏 评论0 发布时间:2022-4-3 16:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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