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

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

[复制链接]
STMCU小助手 发布时间:2021-11-20 22:00
一. GPIO (General Purpose I/O Port) 统称为通用输入/输出端口。
3 U, k" i! w* m1 f4 c/ }* y- h一个完整的GPIO组由16个引脚构成,每个GPIO引脚都可以通过软件配置为
+ ^$ G5 j1 C4 ]/ D: q输出 ,输入,复用的外设功能
, ~2 Y' i# u3 k8 `2 ?/ p0 `并且所有的I/O都可以配置为外部中断的输入端。& D" ^1 N0 f( H4 t2 \- O+ B$ O( i
& K% ^# m) N- `# M/ m) A: @: L& Z
GPIO——输出状态下,可以配置成带有上拉或下拉的推挽输出或开漏输出。* ^; K; c( L% h
GPIO——输入状态下,可以配置成浮空,上拉,下拉,或模拟输入。: C3 `4 Y# z$ Z+ d

% p- ^8 e, N6 O( w. _; N+ t系统复位后所有的GPIO端口被配置成浮空输入模式,# r) k5 v. k! s( ^; k
特殊的是由于调试的8 F$ F8 i) B4 ]7 E' b; f. x8 W  J
PA13 (SWDAT)引脚置于上拉模式。" ?* l& _! j- Z
PA14 (SWCLK)引脚置于下拉模式。
+ p. G, S' ?1 Q3 s# F1 |9 Z  {+ V7 u: O
二. GPIO的基本结构
3 J, W2 \- O. U; I1 y. |保护二极管,上下拉电阻* _# q, M2 y  f  X
引脚的两个二极管可以防止引脚外部过高或过低的电压输入,! Y1 Y3 ^1 ~4 Q9 o7 S3 `
当引脚的电压输入高于VDD时,上方的二极管导通。
' f6 V0 O1 E7 u7 M6 o当引脚的电压输入低于VSS时,下方的二极管导通。; U4 n4 |. W, J+ {0 R

% j6 ^3 \6 e1 w; I+ W
  U1 [  J8 h% ~- ?) ]1. 输入配置
: E, `3 f" m9 v5 f& U: t* L6 \GPIO端口配置为输入模式时,端口的输出缓冲区禁止,输入端连接的TTL施密特触发器激活,GPIOx_PUPDR寄存器可以配置成上拉、下拉电阻。, i2 d/ f8 E7 w) H5 X, I

! Z5 c9 f, f% D$ Z- aTTL施密特触发器:
( S3 a2 P7 S, N" w$ h当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;当输入在正负向阈值电压之间,输出不改变。  ?, m, i% [+ E( R  \
能将模拟信号波形整形为数字电路能够处理的方波波形。" ]- g- U& }! Q% H0 z* E9 U
在此处的作用就是将模拟信号转化为0,1的数字信号,然后储存在 输入数据寄存器中。
% @! R  g: D- n0 J  p1 x- a( P7 U; Q6 a
在每个AHB时钟周期,引脚上的数据都会被锁存至输入数据寄存器,CPU通过对输入数据寄存器的访问可以获取I/O口的实际状态。# f  w, j# l" H8 w- I

0 N- `0 D$ ?: x; u/ l; `* M2 D/ {/ P. m3 V4 u. f
2.输出配置, o3 b7 M, u! Q' H' c
GPIO端口配置为输出模式时,输出缓冲器开启。
' n; ^# u; e  e. d# v3 Z- G5 V& \; ?( S* A9 }2 k6 g
如果GPIO工作在开漏模式,5 ~, B' `, }0 V5 Z3 k- f5 g& J$ M3 o
输出数据寄存器上的数字“0“将激活N-MOS,端口输出低电平,+ b  v* k7 _+ L- ]# n$ `" x
输出数据寄存器上的数字“1“则不会激活P-MOS,也就是N-MOS 和 P-MOS 都处于关闭状态,端口处于高阻状态。
* I" ~& O: j+ B* m! S; M$ C4 M  a" n
如果GPIO工作在推挽模式,输出数据寄存器上的数字“0“将激活N-MOS,端口输出低电平,输出数据寄存器上的数字“1“将激活P-MOS,端口处于高电平。
8 n+ f8 f4 p* x) d* s# c当引脚高低电平切换时,两个 MOS管轮流导通,P负责管电流,N负责拉电流,使其负载能力和开关速度比普通方式有了很大的提高。推挽输出的低电平为0v,高电平为3.3v。
# \' C  E* u- n; y/ E
. P/ H! [( M, i" [) T  H同时,在GPIO配置为输出时,施密特触发器输入也会激活,弱上拉,弱下拉电阻是否激活取决于GPIOx_PUPDR寄存器的值。也就是此时对输入数据寄存器的读操作同样可以获取I/O口的真实状况。
) a% u& _7 o, r# }& u8 c6 X# J# t( I  b

& p; F% t' A- |1 m, N
3 J' V. }7 o( @& W3. 复用功能配置
1 J3 x) n( X1 b. u% l$ ^- b, G绝大多数GPIO端口与外设输入输出共同使用引脚。1 Y* P, U( r# D; @- F2 |
当端口被配置为复用功能时,来自外设的信号会驱动输出缓冲器,此时输出数据寄存器将无法驱动输出缓冲器,也就是说,端口的状态完全有外设信号来决定。
4 H% y9 W0 t$ k- E7 r/ w5 d同时,施密特触发器输入也会激活,弱上拉,弱下拉电阻是否激活取决于GPIOx_PUPDR寄存器的值,此时对输入数据寄存器的读操作同样可以获取I/O口的真实状况。
* g7 n( _: i% f0 L% M; o( h3 I* f$ V3 x# H9 E- h: A8 y; k
" g( ?5 c( J2 ]7 d" r% C
/ e5 [' Z* d" c0 m& \# Q8 c8 j7 s
4. 模拟配置
- c7 Z7 Q$ j) N$ f+ {* q  i  e当端口被配置为模拟输入时,例如作为ADC模块的输入时,输出缓冲器关闭,施密特触发器关闭,上下拉电阻被禁止。此时输入的电流电压完全是外部的真实电流电压。- U7 y* S# S8 s7 M9 W2 B
2 z, p6 X' ?, `; x5 p7 _
; m1 M1 ?1 ?8 U2 P+ n, {* ~' j
三. GPIO的特殊功能
8 R7 E' U- ]3 C& k4 v" A8 R3 HGPIO除了可以配置输入,输出和复用功能外,还具有一些较为特殊的功能,比如可以单独对某一位进行置位/复位操作, 端口锁定操作,或将端口的复用功能重映射到其他引脚上等。
% ?& x4 N. {! F' \; T
) o& c" b+ Z" K, P( P% H) K' A1. 位操作
4 U' r) v/ O* H: n+ q4 HGPIO端口通过置位/复位寄存器 GPIOx_BSRR,可以对端口输出数据寄存器的每个位进行置位和复位操作。
4 _) K" l' u+ q: F4 h, L置位/复位寄存器 GPIOx_BSRR是一个32位寄存器,而端口输出数据寄存器GPIOx_ODR是16位的,相对于GPIOx_ODR寄存器中的每一位,GPIOx_BSRR寄存器中有两位与之对应,即 BSx和BRx。
5 m" U2 ~( z$ b/ G+ _对BSx位写1时会将相应的ODRx位置位,对BRx位写1时会将相应的ODRx位复位,
& x' X/ D: ^( S6 d$ l对GPIOx_BSRR的任意位写0时,都不影响GPIOx_ODR的值。3 H' w) G* h' A/ f% ?3 {
如果对GPIOx_BSRR寄存器的BSx和BRx同时写1,那么置位操作具有优先权。
+ g2 G2 I' g3 ?1 c1 M0 _( x' ?4 D' x6 }% v1 Y+ c- j
2.端口锁定
8 ]7 ?* A( F* I. }端口配置锁定寄存器(GPIOx_LCKR)用于冻结端口的控制寄存器。5 ?6 R6 D! I& Z$ w9 x
当一个特定的写/读序列作用于GPIOx_LCKR寄存器时,相应端口的控制寄存器将会冻结,直到复位才有效。+ l' B( \- Q# Z9 W) |0 K

$ ]7 h. \: Z5 u& w, O3. 端口复用功能映射。
, g3 w5 w5 A1 ^' R* T* ?STM32F系列微控制器的大部分GPIO端口会与多个外设共用,选择每个端口的有效复用功能可以通过GPIOx_AFR寄存器来实现。通过对GPIOx_AFR寄存器的AFRLx[3:0] 为赋值,可以选择该端口所连接的外设,也可以根据需要将某一外设复用功能映射到其他引脚。
0 h( j. F" }" \; G2 ]
6 N* s* U5 C. a1 ~/ E1 O四,GPIO寄存器分类。) R# H1 \. K1 x1 i
1. I/O端口控制寄存器
( b9 W4 o# y* n' P# x5 i每个GPIO端口都有4个32为控制寄存器,
1 r( s" _( L2 n. Q: c+ I  D3 Y% }, ]GPIOx_MODER: 选择I/O模式,如输入,输出,复用或模拟等。
' {& ?0 r( G8 b/ [+ XGPIOx_OTYPER: 选择输出类型,如推挽,开漏等。
1 W+ o& v' w3 t% v; `GPIOx_OSPEEDR: 设定I/O口的速度。2 ~/ k5 X" P4 [8 A: p- ~- z  ?# k
GPIOx_PUPDR: 选择I/O口上拉,下拉方式。/ Q( M, v6 ~/ N
! Q+ l6 o! O5 F
2. I/O端口数据寄存器
" T& F, }8 c5 G5 ]1 M5 d每个GPIO口有2个16位数据寄存器和一个32位置位/复位寄存器$ P6 J! Q; M+ P0 r* y/ q3 L
输入数据寄存器 GPIOx_IDR : 存放I/O口锁存的输入数据,只读寄存器。$ c" R5 {* h5 w4 F
输出数据寄存器 GPIOx_ODR: 存储输出数据,配置输出I/O, 可读可写。* k/ S2 ?# V2 R* P  M
置位/复位寄存器 GPIOx_BSRR: 用于对端口的某一位进行单独的操作。
) h: V( k5 {3 K/ V! e2 o2 |0 g* K0 l# y! |, V  u+ w9 S
3. I/O端口锁定及复用功能寄存器- d# x. ^, ^! @' a2 Y6 \
32位端口配置锁存寄存器GPIOx_LCKR: 用于锁定I/O口配置,防止被微控制器在运行过程中更改。
3 n, C3 [- y; ]+ y5 P# e2个32位复用功能寄存器GPIOx_AFRH, GPIOx_AFRL: 用于端口复用功能配置。# X1 M! K$ {2 y, V4 H

7 |. ~  W/ q9 ~* Q5 ?, M
- E3 i" A/ S3 C3 G- m# z2 t
收藏 评论0 发布时间:2021-11-20 22:00

举报

0个回答

所属标签

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