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

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

[复制链接]
STMCU小助手 发布时间:2021-11-20 22:00
一. GPIO (General Purpose I/O Port) 统称为通用输入/输出端口。1 v4 I4 E/ ^" \2 V9 W* i3 Y3 V% w9 t$ @4 _
一个完整的GPIO组由16个引脚构成,每个GPIO引脚都可以通过软件配置为8 w5 z3 n5 _) O" F' m- Q
输出 ,输入,复用的外设功能  R. Z$ c  n7 I  S0 L7 e1 x
并且所有的I/O都可以配置为外部中断的输入端。4 a5 L  q$ R, m9 {3 x- o
( ^5 g: _( M+ @' d2 b8 ?, U, j7 ?
GPIO——输出状态下,可以配置成带有上拉或下拉的推挽输出或开漏输出。
' Y0 u* S; B/ k6 c/ |( uGPIO——输入状态下,可以配置成浮空,上拉,下拉,或模拟输入。
: t* S# S  X9 l# k! M: n4 T* D2 o
0 {0 [5 N  T0 i7 x: {系统复位后所有的GPIO端口被配置成浮空输入模式,
' S' {: a* S( O( ^特殊的是由于调试的
# T$ @% D& o. R% R8 Q$ ?PA13 (SWDAT)引脚置于上拉模式。0 r, B" Y) D0 i4 h
PA14 (SWCLK)引脚置于下拉模式。( j: R, a; d4 M5 ]8 C7 ^
; q0 F- W# S- ?- m4 ]
二. GPIO的基本结构
, B3 d! ]% a  J& R3 o保护二极管,上下拉电阻& |! H4 ^7 y# m9 T1 N; x% V
引脚的两个二极管可以防止引脚外部过高或过低的电压输入,$ h) ]; p/ ^' B. g9 h* I
当引脚的电压输入高于VDD时,上方的二极管导通。$ G6 e* z( W$ L+ y, e
当引脚的电压输入低于VSS时,下方的二极管导通。7 |, v% I5 e- c0 w% c' G1 ?& h  ^
: f. t9 P5 {( e" Q
. m, J+ B) z0 ^5 d
1. 输入配置4 g, O  E. _# a
GPIO端口配置为输入模式时,端口的输出缓冲区禁止,输入端连接的TTL施密特触发器激活,GPIOx_PUPDR寄存器可以配置成上拉、下拉电阻。$ W( C: P& {. I
3 G. s! m' ^; [% s
TTL施密特触发器:- _. i" g0 w" s1 b
当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;当输入在正负向阈值电压之间,输出不改变。# W5 l4 n# O8 A' ?" G! L; ?' @
能将模拟信号波形整形为数字电路能够处理的方波波形。
0 C' z: T) U  D) ^: {在此处的作用就是将模拟信号转化为0,1的数字信号,然后储存在 输入数据寄存器中。! E' y" P. o- P" ]) z$ n

) M9 g! X  j+ c" Q* }' H在每个AHB时钟周期,引脚上的数据都会被锁存至输入数据寄存器,CPU通过对输入数据寄存器的访问可以获取I/O口的实际状态。& Q7 ^) h7 w1 {6 h0 l/ _  \# S
  W, `$ e! l- D
# J5 w/ @3 `* {/ k$ L% Q2 z
2.输出配置
* Y" K7 z& c0 ]& e" y: s* q  YGPIO端口配置为输出模式时,输出缓冲器开启。8 T! P% l7 z* d4 Y2 k" t# N

  K) Q0 l0 n# B7 s% F: W. n$ ]( E  m如果GPIO工作在开漏模式,! D" E& y! Z: |3 G! ~
输出数据寄存器上的数字“0“将激活N-MOS,端口输出低电平,
4 Y0 x! e# L* [/ Y# E输出数据寄存器上的数字“1“则不会激活P-MOS,也就是N-MOS 和 P-MOS 都处于关闭状态,端口处于高阻状态。& o; G- t4 n2 W& x

3 M0 K  @+ _# X9 y& Y5 w- _如果GPIO工作在推挽模式,输出数据寄存器上的数字“0“将激活N-MOS,端口输出低电平,输出数据寄存器上的数字“1“将激活P-MOS,端口处于高电平。  h1 R. d. w% ^& i
当引脚高低电平切换时,两个 MOS管轮流导通,P负责管电流,N负责拉电流,使其负载能力和开关速度比普通方式有了很大的提高。推挽输出的低电平为0v,高电平为3.3v。' L. P( M% A, R

; T9 k1 Q7 `: Z4 c同时,在GPIO配置为输出时,施密特触发器输入也会激活,弱上拉,弱下拉电阻是否激活取决于GPIOx_PUPDR寄存器的值。也就是此时对输入数据寄存器的读操作同样可以获取I/O口的真实状况。
, w# g- |+ n+ {0 g( E2 D6 o7 g6 Y6 L! ]  [2 F
, \: w7 A1 [7 Z' r1 A. ?( I
& ?% ~  ?# x6 z! o5 _& b- A
3. 复用功能配置$ t4 M4 ]- a. @0 U6 n
绝大多数GPIO端口与外设输入输出共同使用引脚。) I3 @% Q5 d0 ], O& B' n( m
当端口被配置为复用功能时,来自外设的信号会驱动输出缓冲器,此时输出数据寄存器将无法驱动输出缓冲器,也就是说,端口的状态完全有外设信号来决定。
" v2 p! m& p3 V. L同时,施密特触发器输入也会激活,弱上拉,弱下拉电阻是否激活取决于GPIOx_PUPDR寄存器的值,此时对输入数据寄存器的读操作同样可以获取I/O口的真实状况。
$ M0 e5 s3 s- i
: s7 u% \5 [" Y/ i8 k2 R2 _
5 X3 i$ u/ E9 M$ {+ v, ]
3 U4 \5 b  y/ ^1 m1 C4. 模拟配置" D( g* }# J7 E4 x
当端口被配置为模拟输入时,例如作为ADC模块的输入时,输出缓冲器关闭,施密特触发器关闭,上下拉电阻被禁止。此时输入的电流电压完全是外部的真实电流电压。
0 k( x0 d3 C7 S6 v6 g4 N$ a$ u' j: j4 S1 f' q9 ]

1 Z/ v2 i5 z; z* `) O/ I5 a( f三. GPIO的特殊功能+ P) x+ S. t' C: }* T
GPIO除了可以配置输入,输出和复用功能外,还具有一些较为特殊的功能,比如可以单独对某一位进行置位/复位操作, 端口锁定操作,或将端口的复用功能重映射到其他引脚上等。
9 \+ A* c: U) d, n
0 }& t& A' [2 A4 t3 y1. 位操作' @# F' }- K8 |: Q* y5 K2 w5 a
GPIO端口通过置位/复位寄存器 GPIOx_BSRR,可以对端口输出数据寄存器的每个位进行置位和复位操作。
4 ~! k+ V7 _: H0 y置位/复位寄存器 GPIOx_BSRR是一个32位寄存器,而端口输出数据寄存器GPIOx_ODR是16位的,相对于GPIOx_ODR寄存器中的每一位,GPIOx_BSRR寄存器中有两位与之对应,即 BSx和BRx。* m1 w; }6 ~& E9 z! ]
对BSx位写1时会将相应的ODRx位置位,对BRx位写1时会将相应的ODRx位复位,7 d- U/ i5 x- e$ H; \  I+ {
对GPIOx_BSRR的任意位写0时,都不影响GPIOx_ODR的值。
. }0 l4 s  X3 X2 |如果对GPIOx_BSRR寄存器的BSx和BRx同时写1,那么置位操作具有优先权。
. O! @8 X" |/ u0 p, v3 Y: ~
+ D  p0 W" I0 y2.端口锁定
' P2 [2 C6 X( p  f6 g# J端口配置锁定寄存器(GPIOx_LCKR)用于冻结端口的控制寄存器。
8 C" n( g1 J) E/ q5 ~) m% m. X当一个特定的写/读序列作用于GPIOx_LCKR寄存器时,相应端口的控制寄存器将会冻结,直到复位才有效。
( j: S: R2 ^& O$ T' f+ W) t8 I& W3 b
3. 端口复用功能映射。" s$ q3 Z8 W3 F# [
STM32F系列微控制器的大部分GPIO端口会与多个外设共用,选择每个端口的有效复用功能可以通过GPIOx_AFR寄存器来实现。通过对GPIOx_AFR寄存器的AFRLx[3:0] 为赋值,可以选择该端口所连接的外设,也可以根据需要将某一外设复用功能映射到其他引脚。
  a# m  N! r+ U4 s1 ~: D  k* }5 j) v( h1 y8 H0 u+ Y
四,GPIO寄存器分类。
1 P% k; U  C) H$ r% m/ E+ \1. I/O端口控制寄存器
( |* U3 d, T( W, e& z) m; Z每个GPIO端口都有4个32为控制寄存器,
0 J8 y" }* A9 e" u; T$ ^GPIOx_MODER: 选择I/O模式,如输入,输出,复用或模拟等。
; c7 s8 P0 j8 y4 t% w2 ~3 e/ kGPIOx_OTYPER: 选择输出类型,如推挽,开漏等。& ]* y' }% t+ N7 F
GPIOx_OSPEEDR: 设定I/O口的速度。
7 W& i5 Q+ y+ Y" PGPIOx_PUPDR: 选择I/O口上拉,下拉方式。0 @7 }- h0 A. N0 S1 U

# g- Q% ^: e: r( g* ?4 X4 c2. I/O端口数据寄存器
( f$ J6 t9 t5 [每个GPIO口有2个16位数据寄存器和一个32位置位/复位寄存器3 n! T* E! b0 W3 k, _7 a$ e/ c% C
输入数据寄存器 GPIOx_IDR : 存放I/O口锁存的输入数据,只读寄存器。2 ]# H5 D7 j% c! t
输出数据寄存器 GPIOx_ODR: 存储输出数据,配置输出I/O, 可读可写。$ K7 J8 y7 O$ `2 ~
置位/复位寄存器 GPIOx_BSRR: 用于对端口的某一位进行单独的操作。3 J8 G0 S3 v7 e2 g+ Z& |' n

* `  A0 e" E: d3. I/O端口锁定及复用功能寄存器
4 x4 ^% E9 I$ ?2 g32位端口配置锁存寄存器GPIOx_LCKR: 用于锁定I/O口配置,防止被微控制器在运行过程中更改。5 k8 d6 U8 J7 q
2个32位复用功能寄存器GPIOx_AFRH, GPIOx_AFRL: 用于端口复用功能配置。% ^& o+ K( r- G: `+ x6 }7 j

4 o9 g+ x" G4 t; D
+ e0 `4 E3 s$ b, ~" G: g: @
收藏 评论0 发布时间:2021-11-20 22:00

举报

0个回答

所属标签

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