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

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

[复制链接]
STMCU小助手 发布时间:2021-11-20 22:00
一. GPIO (General Purpose I/O Port) 统称为通用输入/输出端口。
# @7 B, V& ]- N: G* h一个完整的GPIO组由16个引脚构成,每个GPIO引脚都可以通过软件配置为
! s$ x: B6 h- d. H输出 ,输入,复用的外设功能
  ~3 ]  d" C9 t并且所有的I/O都可以配置为外部中断的输入端。
& d- ^- u# D4 P4 u: u  u; b: v
- N0 B) A/ s$ K; eGPIO——输出状态下,可以配置成带有上拉或下拉的推挽输出或开漏输出。
$ H: @: a3 C6 B5 l3 nGPIO——输入状态下,可以配置成浮空,上拉,下拉,或模拟输入。3 M4 p6 ^" {7 A7 K2 B: p  F$ D

7 \% o) F7 f8 I# g! ~2 h" y系统复位后所有的GPIO端口被配置成浮空输入模式,
7 @; ]: Z7 W2 V5 J" \, g特殊的是由于调试的1 [/ b8 Q; \  d; ?1 j
PA13 (SWDAT)引脚置于上拉模式。2 M$ X- ]- m* s2 G' `
PA14 (SWCLK)引脚置于下拉模式。
# h; X1 V# u8 O- l* p* Q" E
* o- v7 q4 ~$ g4 a6 l二. GPIO的基本结构
9 g  V: T3 v4 g; O保护二极管,上下拉电阻
/ z- v# U$ H9 @8 m) O7 `; E引脚的两个二极管可以防止引脚外部过高或过低的电压输入,- `6 Y# e& U. ^* G4 n0 z# E$ K4 c
当引脚的电压输入高于VDD时,上方的二极管导通。- Y: ^9 _& T) E8 N
当引脚的电压输入低于VSS时,下方的二极管导通。/ Q  |# U' v0 p7 o5 g. t$ V5 `
) c- g4 o* `) U# |6 E2 e5 e
7 `7 ^) n7 B# V9 t
1. 输入配置* Y9 [4 }  p, O& c, K; B( M4 h
GPIO端口配置为输入模式时,端口的输出缓冲区禁止,输入端连接的TTL施密特触发器激活,GPIOx_PUPDR寄存器可以配置成上拉、下拉电阻。$ y9 A8 f% L( m' M- {6 n

! _; _. [+ O( FTTL施密特触发器:
+ j+ J: h4 k( ]8 r$ ?# e当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;当输入在正负向阈值电压之间,输出不改变。6 d4 e  G! X+ `$ A* M) a  G
能将模拟信号波形整形为数字电路能够处理的方波波形。) W: ~  \0 X- x% P% @
在此处的作用就是将模拟信号转化为0,1的数字信号,然后储存在 输入数据寄存器中。
  q5 a. m& H4 l1 f' e1 t+ p  Y  [9 q" ^) X% a8 s  u
在每个AHB时钟周期,引脚上的数据都会被锁存至输入数据寄存器,CPU通过对输入数据寄存器的访问可以获取I/O口的实际状态。
# ^% O) ]" v  I! e( }" }. ?1 B  J) r3 Q

& @  M5 d5 {$ b) }2.输出配置
; \4 Z7 a0 Y  t" l( \8 _GPIO端口配置为输出模式时,输出缓冲器开启。/ ^" ^& l/ U- j! I9 M

: {0 J$ ]9 ^; d: c1 i( G如果GPIO工作在开漏模式,2 [3 s+ F/ a7 Z" m( \% _
输出数据寄存器上的数字“0“将激活N-MOS,端口输出低电平,9 T: c9 ~/ o, K. M
输出数据寄存器上的数字“1“则不会激活P-MOS,也就是N-MOS 和 P-MOS 都处于关闭状态,端口处于高阻状态。" R; {8 D1 c( H6 `! o
5 a2 z) \9 w) W+ u2 w  o
如果GPIO工作在推挽模式,输出数据寄存器上的数字“0“将激活N-MOS,端口输出低电平,输出数据寄存器上的数字“1“将激活P-MOS,端口处于高电平。
0 W* X  i4 i0 q+ U7 M当引脚高低电平切换时,两个 MOS管轮流导通,P负责管电流,N负责拉电流,使其负载能力和开关速度比普通方式有了很大的提高。推挽输出的低电平为0v,高电平为3.3v。7 `, q0 W( A3 k5 l) i- m- K
- C# ~- R8 t0 w# D
同时,在GPIO配置为输出时,施密特触发器输入也会激活,弱上拉,弱下拉电阻是否激活取决于GPIOx_PUPDR寄存器的值。也就是此时对输入数据寄存器的读操作同样可以获取I/O口的真实状况。
" d0 K2 Q8 C, z5 q7 @; F5 d
& \4 Q7 o! d9 U+ O$ b# ]2 Y
% M) o* q0 p2 k* J) [8 _
: O- V" @5 V; R" ^% x; c* B3. 复用功能配置
; u# v( Q0 h( O' v' X  P% {7 d绝大多数GPIO端口与外设输入输出共同使用引脚。
8 a7 g- n: S) {. W7 p. r当端口被配置为复用功能时,来自外设的信号会驱动输出缓冲器,此时输出数据寄存器将无法驱动输出缓冲器,也就是说,端口的状态完全有外设信号来决定。
8 w( f: b5 [8 i+ Q+ A同时,施密特触发器输入也会激活,弱上拉,弱下拉电阻是否激活取决于GPIOx_PUPDR寄存器的值,此时对输入数据寄存器的读操作同样可以获取I/O口的真实状况。( D7 X) R8 Z/ e/ ]* C
; R8 M+ q2 E% n% z; D4 k4 y

  i" a$ A) V: y- N4 o# G% K% ~5 g/ X- f
4. 模拟配置( T9 o2 i, m) ]" W) }
当端口被配置为模拟输入时,例如作为ADC模块的输入时,输出缓冲器关闭,施密特触发器关闭,上下拉电阻被禁止。此时输入的电流电压完全是外部的真实电流电压。
$ z- m) T8 Z" v3 L' C
% y: ^' X& b/ L& V+ x% y& r& \* f7 q
1 [7 u0 j$ b" w  F1 ~三. GPIO的特殊功能
. p8 c- c) v2 D& L+ F  F+ ?" qGPIO除了可以配置输入,输出和复用功能外,还具有一些较为特殊的功能,比如可以单独对某一位进行置位/复位操作, 端口锁定操作,或将端口的复用功能重映射到其他引脚上等。
* T$ v1 o$ @! r5 s9 x6 F& Y: w3 `. {% C
1. 位操作1 _" A4 S! L; e6 M" v
GPIO端口通过置位/复位寄存器 GPIOx_BSRR,可以对端口输出数据寄存器的每个位进行置位和复位操作。
* N2 ]' c9 J- L& g7 \2 D/ I置位/复位寄存器 GPIOx_BSRR是一个32位寄存器,而端口输出数据寄存器GPIOx_ODR是16位的,相对于GPIOx_ODR寄存器中的每一位,GPIOx_BSRR寄存器中有两位与之对应,即 BSx和BRx。
8 V4 @) @2 N* g. E8 }6 ]对BSx位写1时会将相应的ODRx位置位,对BRx位写1时会将相应的ODRx位复位,
4 ~2 u- m9 E9 y2 C* ~对GPIOx_BSRR的任意位写0时,都不影响GPIOx_ODR的值。4 K4 M2 Y) @9 J) E5 r; I0 \5 t: A, y
如果对GPIOx_BSRR寄存器的BSx和BRx同时写1,那么置位操作具有优先权。) m9 `! h3 L1 W

' R) n" S7 a$ H# B/ i2.端口锁定8 r" ?4 G$ z  q1 N8 Y* p
端口配置锁定寄存器(GPIOx_LCKR)用于冻结端口的控制寄存器。' D  l1 N- \$ b6 a- }. H; ~0 A
当一个特定的写/读序列作用于GPIOx_LCKR寄存器时,相应端口的控制寄存器将会冻结,直到复位才有效。
) ?+ T2 a" D/ l+ s$ `
% B* b) E+ x( v3. 端口复用功能映射。6 }+ H% q' k- u- s; n
STM32F系列微控制器的大部分GPIO端口会与多个外设共用,选择每个端口的有效复用功能可以通过GPIOx_AFR寄存器来实现。通过对GPIOx_AFR寄存器的AFRLx[3:0] 为赋值,可以选择该端口所连接的外设,也可以根据需要将某一外设复用功能映射到其他引脚。
: D6 _: I- J4 M& i
7 Y9 B5 d* S4 y- s  ?四,GPIO寄存器分类。
1 T- d3 D, J2 T& t1. I/O端口控制寄存器3 y/ n9 I0 w% p
每个GPIO端口都有4个32为控制寄存器,
# j4 A9 h+ L5 i$ Q( n6 IGPIOx_MODER: 选择I/O模式,如输入,输出,复用或模拟等。
& W; f9 U+ k/ B* s- @+ ^* A. `GPIOx_OTYPER: 选择输出类型,如推挽,开漏等。( l  X) a/ `4 R2 z- V+ ]0 E
GPIOx_OSPEEDR: 设定I/O口的速度。/ _8 M# d8 P& i
GPIOx_PUPDR: 选择I/O口上拉,下拉方式。7 C) @' x# |, C* ~
+ @# D9 U) g' w6 _
2. I/O端口数据寄存器' M& @8 B, n6 b+ z, C
每个GPIO口有2个16位数据寄存器和一个32位置位/复位寄存器5 x3 ?9 k) H, \2 \! U; m7 o
输入数据寄存器 GPIOx_IDR : 存放I/O口锁存的输入数据,只读寄存器。
" v- [  y8 z7 E输出数据寄存器 GPIOx_ODR: 存储输出数据,配置输出I/O, 可读可写。
# W2 K0 H+ r. s3 h置位/复位寄存器 GPIOx_BSRR: 用于对端口的某一位进行单独的操作。
% @; ^$ z1 @& D) K- w
) Z8 Z% t; B- g% J5 S4 W( }3. I/O端口锁定及复用功能寄存器0 [0 s/ r" B+ k7 N& k- F
32位端口配置锁存寄存器GPIOx_LCKR: 用于锁定I/O口配置,防止被微控制器在运行过程中更改。
1 z; S' `2 h+ r( Y6 M, N- K3 ~2个32位复用功能寄存器GPIOx_AFRH, GPIOx_AFRL: 用于端口复用功能配置。
# B/ ^$ `7 G" n5 ]" Z+ ?4 R+ T; S0 O
/ o$ R; C) q0 N$ N2 _. [3 G
收藏 评论0 发布时间:2021-11-20 22:00

举报

0个回答

所属标签

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