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

【经验分享】STM32F0——GPIO详解

[复制链接]
STMCU小助手 发布时间:2021-11-20 22:00
一. GPIO (General Purpose I/O Port) 统称为通用输入/输出端口。" E, E- }% b, M8 r" R4 w, u
一个完整的GPIO组由16个引脚构成,每个GPIO引脚都可以通过软件配置为
, T' f, a$ Z2 @输出 ,输入,复用的外设功能
0 v4 S7 N, N: D) _3 `并且所有的I/O都可以配置为外部中断的输入端。
: t& a- d/ o. b' Y( f1 u: |2 A: p1 Y( b9 v
GPIO——输出状态下,可以配置成带有上拉或下拉的推挽输出或开漏输出。
8 A; h& {, @. m7 |GPIO——输入状态下,可以配置成浮空,上拉,下拉,或模拟输入。
# `7 d3 o7 {. m( ]. |! A
# `6 i" k& t  g系统复位后所有的GPIO端口被配置成浮空输入模式,. j2 L* r/ R- a) [! s- R9 O
特殊的是由于调试的& t: t1 P, k9 k/ d# A, S
PA13 (SWDAT)引脚置于上拉模式。; S0 @8 [8 B, H6 M
PA14 (SWCLK)引脚置于下拉模式。) w; a9 D& L/ A; H+ G8 i) k' s! i
) w5 F# h1 i- I3 B9 D
二. GPIO的基本结构
& q. C2 p% o  h8 a6 J2 |8 w! j6 }6 t保护二极管,上下拉电阻5 \$ b! O  f+ l) b" K# O: E
引脚的两个二极管可以防止引脚外部过高或过低的电压输入,
; o  I' Q' V5 r7 B  Y7 v当引脚的电压输入高于VDD时,上方的二极管导通。  R& U' T0 ~2 Q3 Y) o4 `7 ]& Q
当引脚的电压输入低于VSS时,下方的二极管导通。
/ V. ?- r5 M& [8 R# G" M  }' m# ?4 D- f1 ~7 m4 z7 E- k7 W1 L

$ _1 V" L. L( ]1 _5 N1. 输入配置# z( l' A; v6 K- I
GPIO端口配置为输入模式时,端口的输出缓冲区禁止,输入端连接的TTL施密特触发器激活,GPIOx_PUPDR寄存器可以配置成上拉、下拉电阻。7 `' E- U+ k- ]. g) X" k5 Z

* D4 @; V/ L0 w* B: O1 hTTL施密特触发器:
- j: V. ~2 B" {: `2 I3 D当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;当输入在正负向阈值电压之间,输出不改变。4 V  z& O9 t. M* e
能将模拟信号波形整形为数字电路能够处理的方波波形。
' `  r" y- V. I在此处的作用就是将模拟信号转化为0,1的数字信号,然后储存在 输入数据寄存器中。8 S5 e' s5 |% q3 j+ ?/ {/ L3 }0 ~% |

, x) G, d$ _! {4 E8 D/ M) f/ _在每个AHB时钟周期,引脚上的数据都会被锁存至输入数据寄存器,CPU通过对输入数据寄存器的访问可以获取I/O口的实际状态。
5 I0 @3 i9 Z: A& t
$ J6 Z8 D. \9 u  L- o' Y  X/ }
2 r, Q$ a; V/ ^( f. n3 g2.输出配置+ ^' J9 C( B% ^4 M& x( D6 _. m
GPIO端口配置为输出模式时,输出缓冲器开启。
  P& n( V+ Z8 q1 x5 l9 l
5 S" k9 A0 B  F如果GPIO工作在开漏模式,3 r9 C) u3 l. P( n
输出数据寄存器上的数字“0“将激活N-MOS,端口输出低电平,$ r/ S  R. F) g/ B  q5 G
输出数据寄存器上的数字“1“则不会激活P-MOS,也就是N-MOS 和 P-MOS 都处于关闭状态,端口处于高阻状态。" c& K" x$ a* O; t4 M" U$ O
/ ^3 R( l, {6 C4 R
如果GPIO工作在推挽模式,输出数据寄存器上的数字“0“将激活N-MOS,端口输出低电平,输出数据寄存器上的数字“1“将激活P-MOS,端口处于高电平。
5 x( V( ~$ y  k) J当引脚高低电平切换时,两个 MOS管轮流导通,P负责管电流,N负责拉电流,使其负载能力和开关速度比普通方式有了很大的提高。推挽输出的低电平为0v,高电平为3.3v。
' i- V# Z$ m3 O# T7 G# Q% i8 \: o# U; `+ ]9 `1 `* m
同时,在GPIO配置为输出时,施密特触发器输入也会激活,弱上拉,弱下拉电阻是否激活取决于GPIOx_PUPDR寄存器的值。也就是此时对输入数据寄存器的读操作同样可以获取I/O口的真实状况。' s3 `$ K- o1 ^' u' K
8 ~5 l  O" e9 S4 `9 j. ]% U. i

+ k1 e$ Y8 |( o2 c5 w" ~. A; `- x. c. e3 o1 u! E
3. 复用功能配置
* x: Q. ^4 p2 S9 V+ H5 e绝大多数GPIO端口与外设输入输出共同使用引脚。
& l9 G( z2 Z1 x: q, @& d2 f$ h当端口被配置为复用功能时,来自外设的信号会驱动输出缓冲器,此时输出数据寄存器将无法驱动输出缓冲器,也就是说,端口的状态完全有外设信号来决定。
6 ?9 T$ @6 w- a* U% J7 d) H/ E同时,施密特触发器输入也会激活,弱上拉,弱下拉电阻是否激活取决于GPIOx_PUPDR寄存器的值,此时对输入数据寄存器的读操作同样可以获取I/O口的真实状况。0 R! {8 d6 Q3 A; i) D: Q
3 @7 M/ q/ }; P
; T. A; J$ H( t* J+ i0 ^

) o; o) g2 {+ N: ~" w( Q4. 模拟配置) G1 e2 F7 y' ^3 J& F% G
当端口被配置为模拟输入时,例如作为ADC模块的输入时,输出缓冲器关闭,施密特触发器关闭,上下拉电阻被禁止。此时输入的电流电压完全是外部的真实电流电压。, w( h5 `) s4 N$ W6 E
" Y% M" L; J6 i, q- ]. W$ N

  A3 l! V" j1 z0 E三. GPIO的特殊功能
) G5 l+ q: L. XGPIO除了可以配置输入,输出和复用功能外,还具有一些较为特殊的功能,比如可以单独对某一位进行置位/复位操作, 端口锁定操作,或将端口的复用功能重映射到其他引脚上等。
) P( |# C) R; U5 o/ i+ |- [, w; x$ Y6 F/ ?1 _
1. 位操作4 g$ _$ l8 K4 Q4 N* }
GPIO端口通过置位/复位寄存器 GPIOx_BSRR,可以对端口输出数据寄存器的每个位进行置位和复位操作。
8 k! q/ Z1 {/ f5 s2 ?+ j, i# n: F置位/复位寄存器 GPIOx_BSRR是一个32位寄存器,而端口输出数据寄存器GPIOx_ODR是16位的,相对于GPIOx_ODR寄存器中的每一位,GPIOx_BSRR寄存器中有两位与之对应,即 BSx和BRx。: v5 }; G4 W( F; v+ J& B- W
对BSx位写1时会将相应的ODRx位置位,对BRx位写1时会将相应的ODRx位复位,& s6 O0 o9 F9 s  z9 o; X
对GPIOx_BSRR的任意位写0时,都不影响GPIOx_ODR的值。
. h+ g0 v8 \" h$ N如果对GPIOx_BSRR寄存器的BSx和BRx同时写1,那么置位操作具有优先权。
6 Y1 w* p0 Y. V/ \' u0 D
, ]; E  K! `1 a- I2.端口锁定0 |; t0 {5 o* P( [
端口配置锁定寄存器(GPIOx_LCKR)用于冻结端口的控制寄存器。5 A# q/ P; o1 K" Z/ e: i
当一个特定的写/读序列作用于GPIOx_LCKR寄存器时,相应端口的控制寄存器将会冻结,直到复位才有效。
- H' u- |2 k' s- @3 P5 u/ M" h6 N" k$ I+ h5 i- y+ b
3. 端口复用功能映射。7 @( H( a. u- I4 j' R& q! f
STM32F系列微控制器的大部分GPIO端口会与多个外设共用,选择每个端口的有效复用功能可以通过GPIOx_AFR寄存器来实现。通过对GPIOx_AFR寄存器的AFRLx[3:0] 为赋值,可以选择该端口所连接的外设,也可以根据需要将某一外设复用功能映射到其他引脚。9 ~  f; |3 G: D! U( `

( Q% r6 C7 E" ~$ a5 Q) b% `8 `) \四,GPIO寄存器分类。
  R+ o% o3 m$ ~1. I/O端口控制寄存器) Z! G: `, w# ]% H, O0 a8 i
每个GPIO端口都有4个32为控制寄存器,
2 q5 j# g2 K- ]) N2 s* BGPIOx_MODER: 选择I/O模式,如输入,输出,复用或模拟等。
' v6 k2 I: p. L8 v1 a& d, h/ ^GPIOx_OTYPER: 选择输出类型,如推挽,开漏等。0 d+ m$ K5 [6 o% q* ]
GPIOx_OSPEEDR: 设定I/O口的速度。  I7 |) A- e0 {8 Y% `
GPIOx_PUPDR: 选择I/O口上拉,下拉方式。3 s$ c) }: L# ^

( Y! o! q/ B- y0 B" ^( y2. I/O端口数据寄存器. M/ l$ P4 V. Q. b# v5 v
每个GPIO口有2个16位数据寄存器和一个32位置位/复位寄存器
1 P7 k6 }/ J8 n  R# \# a# v输入数据寄存器 GPIOx_IDR : 存放I/O口锁存的输入数据,只读寄存器。2 U( g7 l3 v. g
输出数据寄存器 GPIOx_ODR: 存储输出数据,配置输出I/O, 可读可写。
3 b# \' g, t- C4 `1 ^5 Q5 Y置位/复位寄存器 GPIOx_BSRR: 用于对端口的某一位进行单独的操作。6 b' z* C- [2 j# g4 Q& N# J
1 ^4 r) U" m+ Q) H9 Z% j" P# m' J5 J
3. I/O端口锁定及复用功能寄存器
# N) y9 ]6 @# m* j: w1 A) O4 E32位端口配置锁存寄存器GPIOx_LCKR: 用于锁定I/O口配置,防止被微控制器在运行过程中更改。! b2 E5 V1 _8 \5 U- X
2个32位复用功能寄存器GPIOx_AFRH, GPIOx_AFRL: 用于端口复用功能配置。
* k1 s8 Z% R5 @; b) w5 J8 q% F. N: |2 M: e

3 X4 g6 m+ {! z; T4 z! W, V# z
收藏 评论0 发布时间:2021-11-20 22:00

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版