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

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

[复制链接]
STMCU小助手 发布时间:2021-11-20 22:00
一. GPIO (General Purpose I/O Port) 统称为通用输入/输出端口。0 F2 f+ v4 v2 G2 w4 C" @9 [3 s) ~6 ?
一个完整的GPIO组由16个引脚构成,每个GPIO引脚都可以通过软件配置为0 h$ q6 f: b# R4 `9 r, H- E; O
输出 ,输入,复用的外设功能
; X: Z" K4 ]& i) E+ K" r- `并且所有的I/O都可以配置为外部中断的输入端。5 r# @& \: {9 F% P0 g9 n$ w/ {
8 e. R! O1 W% l( k  Z0 v
GPIO——输出状态下,可以配置成带有上拉或下拉的推挽输出或开漏输出。
& ~8 c) O, S7 W9 c8 ?GPIO——输入状态下,可以配置成浮空,上拉,下拉,或模拟输入。/ e8 ]6 x" N6 ~2 x

6 c2 n# _! g1 X/ C% Z系统复位后所有的GPIO端口被配置成浮空输入模式,
) f" Q3 ]8 P* M+ B$ t特殊的是由于调试的
9 z( c# b* i; U* [/ \PA13 (SWDAT)引脚置于上拉模式。1 l- f# q1 P' `; d
PA14 (SWCLK)引脚置于下拉模式。
2 s1 Z; K. w+ {/ c9 j( c7 r2 O+ D3 p. e* |3 T# D7 ]. X4 P* V
二. GPIO的基本结构
, V7 K. ^' f7 h& ^7 s9 l0 ^保护二极管,上下拉电阻
+ r5 Z/ E6 E1 g/ [引脚的两个二极管可以防止引脚外部过高或过低的电压输入,
; F, s1 [0 ^+ n9 \: q, v% M当引脚的电压输入高于VDD时,上方的二极管导通。6 e: n& s. |! B1 @
当引脚的电压输入低于VSS时,下方的二极管导通。
7 x* `/ t5 b# Y; q
5 H' l4 B8 Z( ~; v# X7 x
$ x+ v/ ^' C2 T- W1. 输入配置# H' {9 F: R' Y$ O' e
GPIO端口配置为输入模式时,端口的输出缓冲区禁止,输入端连接的TTL施密特触发器激活,GPIOx_PUPDR寄存器可以配置成上拉、下拉电阻。
* _9 o9 m+ C, A3 g6 T7 V7 \& ~, I3 S" c* A
TTL施密特触发器:
. E8 [8 W' `, y5 K+ b当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;当输入在正负向阈值电压之间,输出不改变。8 D* p7 o1 [0 G( g% i$ V& s6 k- g/ X
能将模拟信号波形整形为数字电路能够处理的方波波形。
! M' r- _9 ^8 F$ [8 _; n在此处的作用就是将模拟信号转化为0,1的数字信号,然后储存在 输入数据寄存器中。
1 G6 P' Q, n& n1 @) ~; H( O
/ u2 B+ h1 w( c在每个AHB时钟周期,引脚上的数据都会被锁存至输入数据寄存器,CPU通过对输入数据寄存器的访问可以获取I/O口的实际状态。7 ]+ ^3 h2 t" q. Y

$ S7 `- B* @. ]! C2 I5 S, P: o9 x( D
2.输出配置% L' O8 B# W3 t; F8 M
GPIO端口配置为输出模式时,输出缓冲器开启。
0 W3 F! d- ?& U* p0 L
, t  {. Y0 Z/ j" O* m/ a7 s& e9 |# Y如果GPIO工作在开漏模式,8 ]- C* B: {# a3 W" C  u( t2 H
输出数据寄存器上的数字“0“将激活N-MOS,端口输出低电平,
# g0 _# Q4 n' \( @0 C8 l. n/ a( y- g输出数据寄存器上的数字“1“则不会激活P-MOS,也就是N-MOS 和 P-MOS 都处于关闭状态,端口处于高阻状态。9 K% I  b" t/ X0 z

7 L. {, L( V8 s# _$ G5 N! I如果GPIO工作在推挽模式,输出数据寄存器上的数字“0“将激活N-MOS,端口输出低电平,输出数据寄存器上的数字“1“将激活P-MOS,端口处于高电平。
" i) v6 @1 i: ]' U! B( N当引脚高低电平切换时,两个 MOS管轮流导通,P负责管电流,N负责拉电流,使其负载能力和开关速度比普通方式有了很大的提高。推挽输出的低电平为0v,高电平为3.3v。% W! u6 S; C' n2 `
6 }, a3 z) y1 P0 V9 `' {3 c
同时,在GPIO配置为输出时,施密特触发器输入也会激活,弱上拉,弱下拉电阻是否激活取决于GPIOx_PUPDR寄存器的值。也就是此时对输入数据寄存器的读操作同样可以获取I/O口的真实状况。( L" s9 y( |0 ~

! ^. ?! p- M( v: H! W/ `* ~' z8 D8 R" d; Q/ P7 G
6 G: w+ P# s3 ]9 P. Q' C( ?  w& d
3. 复用功能配置4 |* z+ Y% d' x' z
绝大多数GPIO端口与外设输入输出共同使用引脚。- U) ~5 y4 P# o
当端口被配置为复用功能时,来自外设的信号会驱动输出缓冲器,此时输出数据寄存器将无法驱动输出缓冲器,也就是说,端口的状态完全有外设信号来决定。
( u0 p! J. Q! w9 S  q0 D同时,施密特触发器输入也会激活,弱上拉,弱下拉电阻是否激活取决于GPIOx_PUPDR寄存器的值,此时对输入数据寄存器的读操作同样可以获取I/O口的真实状况。9 I0 [2 q# Q0 L% `; ]

( k& N* k8 \+ y8 y# o/ x% V7 [7 {8 E/ t$ M

( E$ R# G4 L$ i4. 模拟配置5 s, S( ~, |" e& N, N+ ]) @  i
当端口被配置为模拟输入时,例如作为ADC模块的输入时,输出缓冲器关闭,施密特触发器关闭,上下拉电阻被禁止。此时输入的电流电压完全是外部的真实电流电压。4 [. ?! s" p8 x) c

) b6 p$ s; K, \- a5 }7 Z$ \9 R1 u, e% ~7 m+ B9 f2 V
三. GPIO的特殊功能
$ f3 x) g2 k$ [( S2 k1 B6 `GPIO除了可以配置输入,输出和复用功能外,还具有一些较为特殊的功能,比如可以单独对某一位进行置位/复位操作, 端口锁定操作,或将端口的复用功能重映射到其他引脚上等。' Q0 o! m* }7 L

* l3 H; Y# [1 h7 f8 b1. 位操作
6 [  [- [& F2 P5 T7 uGPIO端口通过置位/复位寄存器 GPIOx_BSRR,可以对端口输出数据寄存器的每个位进行置位和复位操作。5 E9 q9 [, C6 K& `8 n' a
置位/复位寄存器 GPIOx_BSRR是一个32位寄存器,而端口输出数据寄存器GPIOx_ODR是16位的,相对于GPIOx_ODR寄存器中的每一位,GPIOx_BSRR寄存器中有两位与之对应,即 BSx和BRx。8 M, \( S8 a2 p3 @7 ~0 O6 B# |
对BSx位写1时会将相应的ODRx位置位,对BRx位写1时会将相应的ODRx位复位,6 ~" o6 H' D1 W& Z- j, _, k
对GPIOx_BSRR的任意位写0时,都不影响GPIOx_ODR的值。
( t4 e  F' [( m) g' E/ N如果对GPIOx_BSRR寄存器的BSx和BRx同时写1,那么置位操作具有优先权。* K' }( E$ U: v) h! J( ]6 v0 m
2 J/ d/ \5 s% a: E: r6 J8 E% V
2.端口锁定$ G/ w* u8 Y; Y7 x# E2 l
端口配置锁定寄存器(GPIOx_LCKR)用于冻结端口的控制寄存器。8 q3 J" z+ F) t2 \. K
当一个特定的写/读序列作用于GPIOx_LCKR寄存器时,相应端口的控制寄存器将会冻结,直到复位才有效。
* d- N$ n4 V% i+ s9 }/ i  R9 N+ |: ]+ Y7 k, ?! d& O
3. 端口复用功能映射。- w% ^1 H' b! d; ^5 q" ^* G' u
STM32F系列微控制器的大部分GPIO端口会与多个外设共用,选择每个端口的有效复用功能可以通过GPIOx_AFR寄存器来实现。通过对GPIOx_AFR寄存器的AFRLx[3:0] 为赋值,可以选择该端口所连接的外设,也可以根据需要将某一外设复用功能映射到其他引脚。
" U, ]) x% b. x+ X6 t5 c, E; |; u1 S- T" g
四,GPIO寄存器分类。
" m5 B7 W* n: Z; e6 C$ u1. I/O端口控制寄存器
4 t( ~# B6 t7 T7 O$ B每个GPIO端口都有4个32为控制寄存器,. ]3 v! p# b6 M& S$ D: e  o' p
GPIOx_MODER: 选择I/O模式,如输入,输出,复用或模拟等。+ }+ y/ k4 ^) v# ^) l
GPIOx_OTYPER: 选择输出类型,如推挽,开漏等。# z3 R7 u/ v7 D4 e6 o" x% \. M8 R
GPIOx_OSPEEDR: 设定I/O口的速度。8 u' [7 M1 C/ S& V
GPIOx_PUPDR: 选择I/O口上拉,下拉方式。) u- K7 U9 X7 O8 w: D5 d, m

! i) {0 \+ T2 U% u+ L" w* f, x2. I/O端口数据寄存器
+ ^3 }8 e4 O- U每个GPIO口有2个16位数据寄存器和一个32位置位/复位寄存器! I% h8 P3 G1 O# Y5 U+ ], G( p
输入数据寄存器 GPIOx_IDR : 存放I/O口锁存的输入数据,只读寄存器。! q2 N, J8 ^: k% L7 Y' w; F7 o
输出数据寄存器 GPIOx_ODR: 存储输出数据,配置输出I/O, 可读可写。
" U5 U# g$ z% ~, [* h0 j置位/复位寄存器 GPIOx_BSRR: 用于对端口的某一位进行单独的操作。
' G9 A6 U  C* ^+ v- Q
+ `2 Z3 x8 C! H- [: f' Y! I6 u  N3. I/O端口锁定及复用功能寄存器, O% D5 Y( ~3 H! F4 l
32位端口配置锁存寄存器GPIOx_LCKR: 用于锁定I/O口配置,防止被微控制器在运行过程中更改。
; }/ O; v% [! y2 y8 |; u2个32位复用功能寄存器GPIOx_AFRH, GPIOx_AFRL: 用于端口复用功能配置。
- z8 o0 f% s  r- v0 f/ T
  F1 u! u' Z# @# B, [* ^) c
; H9 F  E" E/ u
收藏 评论0 发布时间:2021-11-20 22:00

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版