请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
STMCU小助手 发布时间:2021-11-20 22:00
一. GPIO (General Purpose I/O Port) 统称为通用输入/输出端口。
' F4 O! Z1 l. R/ F2 V一个完整的GPIO组由16个引脚构成,每个GPIO引脚都可以通过软件配置为
. i9 Y( U! K4 Q" A4 x1 d* F$ q输出 ,输入,复用的外设功能" W) o4 J1 i+ I0 z' S/ s
并且所有的I/O都可以配置为外部中断的输入端。
9 P! J* R; y' Z: a' B: T$ [/ |! D" B* T
GPIO——输出状态下,可以配置成带有上拉或下拉的推挽输出或开漏输出。! T  ]1 a2 S, S
GPIO——输入状态下,可以配置成浮空,上拉,下拉,或模拟输入。8 F8 `( O+ C9 [
5 t/ U. t2 ~1 T$ U7 v/ a
系统复位后所有的GPIO端口被配置成浮空输入模式,- }6 }9 y7 P6 U* M! P" b3 V: z
特殊的是由于调试的0 k7 i+ D4 g( }& f1 A) N4 u. V! o; T
PA13 (SWDAT)引脚置于上拉模式。
2 l3 }- `. Y( h5 N1 hPA14 (SWCLK)引脚置于下拉模式。
! |: S$ `2 ]% Y6 a; S8 R& b& J3 P6 _5 n' v0 X
二. GPIO的基本结构
( O+ D3 ]  b, G& g- {# ]保护二极管,上下拉电阻9 U# j6 Q, {" t& |" V8 [
引脚的两个二极管可以防止引脚外部过高或过低的电压输入,( k- H6 n2 b0 _2 ]) P7 x$ b# `' K
当引脚的电压输入高于VDD时,上方的二极管导通。
5 s; t+ }8 ~% ^. }当引脚的电压输入低于VSS时,下方的二极管导通。9 k6 O* ~7 c! m
) Y6 Z  Z* P" H6 l

/ b( r' t% J9 l1. 输入配置9 m# L: I- a: v) B0 O
GPIO端口配置为输入模式时,端口的输出缓冲区禁止,输入端连接的TTL施密特触发器激活,GPIOx_PUPDR寄存器可以配置成上拉、下拉电阻。
  y7 R) g& v+ y. u) L( ^% z9 y1 [2 d  Q# j
TTL施密特触发器:. b; x6 q; p4 w
当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;当输入在正负向阈值电压之间,输出不改变。
" T, c- A2 z' _- ~能将模拟信号波形整形为数字电路能够处理的方波波形。5 I0 K3 d# _) L* Z  Z# D
在此处的作用就是将模拟信号转化为0,1的数字信号,然后储存在 输入数据寄存器中。7 Q0 X1 L* u. b8 Q* a3 {) `
7 E; u9 ^, J2 q2 R& b
在每个AHB时钟周期,引脚上的数据都会被锁存至输入数据寄存器,CPU通过对输入数据寄存器的访问可以获取I/O口的实际状态。% L; ^9 s" y; m0 h- T) V9 S1 P

  f1 v. E7 W4 y  [, {; ^# S9 a/ i4 c; L9 F/ z
2.输出配置
* s6 w) B/ r/ }( w* L3 q$ GGPIO端口配置为输出模式时,输出缓冲器开启。2 A' L4 s/ s; O4 `. a5 ]; O" E  G7 A

8 h( W9 P$ o! F2 y  {! e如果GPIO工作在开漏模式,- ?+ ]' Y3 L6 E
输出数据寄存器上的数字“0“将激活N-MOS,端口输出低电平,
: e; i1 Y. M! V& G) N输出数据寄存器上的数字“1“则不会激活P-MOS,也就是N-MOS 和 P-MOS 都处于关闭状态,端口处于高阻状态。9 a/ H" l6 ?* f7 t

+ u. a$ Z7 y6 T6 _/ l* x如果GPIO工作在推挽模式,输出数据寄存器上的数字“0“将激活N-MOS,端口输出低电平,输出数据寄存器上的数字“1“将激活P-MOS,端口处于高电平。. A3 r; N& ]6 o( m
当引脚高低电平切换时,两个 MOS管轮流导通,P负责管电流,N负责拉电流,使其负载能力和开关速度比普通方式有了很大的提高。推挽输出的低电平为0v,高电平为3.3v。  t  ?, u+ X8 ~) p4 o' f

% h3 a$ W4 J: _# n7 q同时,在GPIO配置为输出时,施密特触发器输入也会激活,弱上拉,弱下拉电阻是否激活取决于GPIOx_PUPDR寄存器的值。也就是此时对输入数据寄存器的读操作同样可以获取I/O口的真实状况。
8 S- B' ?; y6 i; @2 a  q$ [, N2 q

- R1 ?4 Q3 y! R0 A2 ~$ H( ?2 E1 A- ~) Y
3. 复用功能配置! N8 L5 p7 h1 S8 |4 I7 Y
绝大多数GPIO端口与外设输入输出共同使用引脚。0 i* M  F8 w$ w6 d; v
当端口被配置为复用功能时,来自外设的信号会驱动输出缓冲器,此时输出数据寄存器将无法驱动输出缓冲器,也就是说,端口的状态完全有外设信号来决定。. d) G9 O* m/ r4 w2 k( q) I( X$ |
同时,施密特触发器输入也会激活,弱上拉,弱下拉电阻是否激活取决于GPIOx_PUPDR寄存器的值,此时对输入数据寄存器的读操作同样可以获取I/O口的真实状况。# k+ E$ d& J5 I2 O! E
, t8 S0 f/ v  ~
$ P# ?5 S/ D- |7 N0 ^, [: S

7 q( a& U" M; Q0 f( N3 f4. 模拟配置- b. W+ m5 W& i8 g7 Z6 E$ j1 l
当端口被配置为模拟输入时,例如作为ADC模块的输入时,输出缓冲器关闭,施密特触发器关闭,上下拉电阻被禁止。此时输入的电流电压完全是外部的真实电流电压。# d! K1 g" s# ^9 }* b; D) @
' {( i6 d% U" G8 H/ ~1 ?

# Y7 l% G7 P, k三. GPIO的特殊功能
6 u$ W: ?$ J, j) pGPIO除了可以配置输入,输出和复用功能外,还具有一些较为特殊的功能,比如可以单独对某一位进行置位/复位操作, 端口锁定操作,或将端口的复用功能重映射到其他引脚上等。! G% I4 S& r) d+ k2 Q( X( v

" t$ J* B' {, V1. 位操作8 V6 q% o# g1 D7 N
GPIO端口通过置位/复位寄存器 GPIOx_BSRR,可以对端口输出数据寄存器的每个位进行置位和复位操作。
3 y9 W- d* t3 A置位/复位寄存器 GPIOx_BSRR是一个32位寄存器,而端口输出数据寄存器GPIOx_ODR是16位的,相对于GPIOx_ODR寄存器中的每一位,GPIOx_BSRR寄存器中有两位与之对应,即 BSx和BRx。/ w- i3 Z6 m. M- q- {
对BSx位写1时会将相应的ODRx位置位,对BRx位写1时会将相应的ODRx位复位,
+ Z! M6 `# w; Y6 @& j1 ?对GPIOx_BSRR的任意位写0时,都不影响GPIOx_ODR的值。& N! B/ R3 m* A: I: C  y$ \
如果对GPIOx_BSRR寄存器的BSx和BRx同时写1,那么置位操作具有优先权。
& c& q2 F1 F% M5 g4 }
" ^( s$ N8 y! D6 I6 J. q% }2.端口锁定0 N8 o4 _" a, A  J. B& K3 y1 Z4 y
端口配置锁定寄存器(GPIOx_LCKR)用于冻结端口的控制寄存器。
3 p# W/ i! F+ K- j% `1 v. e当一个特定的写/读序列作用于GPIOx_LCKR寄存器时,相应端口的控制寄存器将会冻结,直到复位才有效。
: F1 h% B% V. W$ T4 [) ~% Y$ M2 Q0 K: f
3. 端口复用功能映射。' e1 R, f! `2 B7 g7 n4 Q! [
STM32F系列微控制器的大部分GPIO端口会与多个外设共用,选择每个端口的有效复用功能可以通过GPIOx_AFR寄存器来实现。通过对GPIOx_AFR寄存器的AFRLx[3:0] 为赋值,可以选择该端口所连接的外设,也可以根据需要将某一外设复用功能映射到其他引脚。
5 e# O! ^5 l7 x  B
$ [9 i' f3 z' Z& x* f( R四,GPIO寄存器分类。
$ J4 x+ Z( J# Y* z7 B1. I/O端口控制寄存器
) O/ y& g( T' X+ ]8 Z每个GPIO端口都有4个32为控制寄存器,; @& c) @  a  `8 L2 P- \2 L6 b/ s
GPIOx_MODER: 选择I/O模式,如输入,输出,复用或模拟等。
* T* C+ |; u$ T  L* z6 ~: ~, d$ ]GPIOx_OTYPER: 选择输出类型,如推挽,开漏等。/ j, k; Z) Y8 o( D+ F4 S& a' g
GPIOx_OSPEEDR: 设定I/O口的速度。
- F. b% v/ c% L  ?7 c" Q9 H! ZGPIOx_PUPDR: 选择I/O口上拉,下拉方式。! i6 X) a* o1 b* {
7 l- u1 e: Q3 r. Y. W
2. I/O端口数据寄存器
0 k0 ?- H* L/ Y4 L  l# N' {$ [每个GPIO口有2个16位数据寄存器和一个32位置位/复位寄存器
' a( \2 p9 P) P- Q3 B% T! R- }输入数据寄存器 GPIOx_IDR : 存放I/O口锁存的输入数据,只读寄存器。$ ]. f7 E) X$ e6 P; \: y3 n
输出数据寄存器 GPIOx_ODR: 存储输出数据,配置输出I/O, 可读可写。
' K, K. W' C: ~* E! l6 C置位/复位寄存器 GPIOx_BSRR: 用于对端口的某一位进行单独的操作。
  ^2 c2 Q! m+ J( w4 g$ n3 v% Q" E8 b3 x9 |; N
3. I/O端口锁定及复用功能寄存器
( L0 b4 S+ [4 S4 i32位端口配置锁存寄存器GPIOx_LCKR: 用于锁定I/O口配置,防止被微控制器在运行过程中更改。" M/ p+ r1 A* b- h* B
2个32位复用功能寄存器GPIOx_AFRH, GPIOx_AFRL: 用于端口复用功能配置。$ p4 C9 T* G: T2 ~! C/ R

7 t/ F2 F2 |/ Z& A$ T# n
0 h7 e- b/ ?: X
收藏 评论0 发布时间:2021-11-20 22:00

举报

0个回答

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版