找回密码
 注册
关于网站域名变更的通知
查看: 320|回复: 2
打印 上一主题 下一主题

学习STM32,先了解它的GPIO内部结构及相关寄存器

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-9-16 10:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 hunterccc 于 2021-9-16 11:28 编辑
2 P, {8 R+ a( ~1 z, T% t" S$ b
  s) A& l& [$ L$ m0 M: ?$ K& L1. GPIO简介
+ s& c% \7 n3 G/ p) j9 NGPIO是通用输入/输出端口的简称,是STM32可控制的引脚。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。最简单的helloworld级别的例子: 将GPIO引脚接到LED灯,通过控制引脚的输出高、低电平试下开关控制LED;将按键接到GPIO引脚,通过读取GPIO引脚区分按键是按下还是松开。" m7 y3 q  `4 L" W2 z8 c# S3 ~
9 h& L0 y1 q1 C& ]5 L) N
接下来干嘛?肯定是上那副经典的GPIO内部结构图了:. M  @4 Z* j  R8 U

$ s& p6 d( p, q3 ^: v
+ ^' h3 N% b) H! u" n6 l9 \
7 J+ j9 x" \" x5 [1.1 保护二极管
4 _% n% x  V, I8 g3 ~" D( @9 aIO引脚上下两边两个二极管用于防止引脚外部过高/过低的电压输入,当引脚电压高于VDD时,上方的二极管导通,当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。但是尽管如此,还是不能直接外接大功率器件,须加大功率及隔离电路驱动,防止烧坏芯片或者外接器件无法正常工作。  E) i, }1 u7 K, }- w
7 f) k% P' {2 X
1.2 P-MOS管和N-MOS管1 B7 k& g3 X0 p2 y- ?
输出模式的GPIO,由P-MOS管和N-MOS管组成的单元电路使得GPIO具有“推挽输出”和“开漏输出”的模式。这两个MOS管接管电路的输入信号是由GPIO的输出数据寄存器GPIOx_ODR提供的,也就是我们可以通过编程修改GPIOx_ODR寄存器的值从而影响该单元电路的输出。) W1 ^; D* y) x8 J
常用的还用置位/复位寄存器GPIOx_BSRR和复位寄存器GPIOx_BRR,设置这两个寄存器后也能影响GPIOx_ODR,进而影响单元电路输出。
# P0 o* T5 U! k0 j除此,还有复用功能输出,意思是指STM32的其它片上外设对GPIO引脚进行控制,此时该引脚作为外设功能的一部分。片上外设数据信号作为双MOS管接管的输入,进而输出到GPIO引脚中。例如USART串口通讯,要用到某个GPIO 引脚作为通讯发送引脚,就可以把该GPIO 引脚配置成USART 串口复用功能,由串口外设控制该引脚,发送数据。
' W. v! [6 Z' j% v6 }: O( w
3 e6 r% j% L7 N1.3 TTL肖特基触发器( w1 `' D- Z6 {  M
输入模式的GPIO,GPIO引脚经过内部上/下拉电阻配置成上/下拉、或者浮空输入,然后连接到触发器。信号经过触发器后,模拟信号转化为0和1的数字信号,然后存储在输入寄存器GPIOx_IDR中,通过读取GPIOx_IDR寄存器就可以知道GPIO的电平状态。
9 D1 [6 n$ U+ t; }' {9 |同理,与复用功能输出类似,这里也有复用功能输入,GPIO引脚的输入信号会传输到STM32的其他片上外设,由外设去读取该引脚状态。例如使用USART串口通讯,用某个GPIO引脚作为通讯的接收引脚。6 c) a9 ^  m- G' \0 s, W) c1 I
另外,当GPIO引脚作为ADC采集电压的输入通道时,用其“模拟输入”功能,此时信号不再经过触发器进行TTL电平转换。ADC外设要采集到的原始的模拟信号。类似的,当GPIO引脚用于DAC模拟电压输出通道时,此时作为“模拟输出”功能,DAC信号输出不经过双MOS管。
' v9 }- S: K. q4 H! a8 ^9 i- d" ]5 f2 z
2. GPIO的工作模式  ~% A& h% c6 F0 |
GPIO的硬件结构,决定了GPIO可以配置成的工作模式有:. U' F: K. f" v2 g5 m& Y7 R
2 @: d5 j5 ?3 I1 u; R. C) U2 \
typedef enum
  K$ H( s7 q3 \* L8 v! R5 [) U& Q{ GPIO_Mode_AIN = 0x0,              //模拟输入4 Y; G6 s) X3 A
  GPIO_Mode_IN_FLOATING = 0x04, //浮空输入  U  y) n" z. C# }% y3 R, W
  GPIO_Mode_IPD = 0x28,             //下拉输入
2 z7 D- z' o, z* i& M7 e! k  GPIO_Mode_IPU = 0x48,             //上拉输入
( v/ H; e* p" |  GPIO_Mode_Out_OD = 0x14,          //开漏输入' \2 G, o4 `9 B

( c$ _. ~. \0 V& {6 l. w4 {+ g  GPIO_Mode_Out_PP = 0x10,          //推挽输出' e9 I) G, e+ ^
  GPIO_Mode_AF_OD = 0x1C,           //复用开漏输出9 y, m. ?& h' V3 H, V' r
  GPIO_Mode_AF_PP = 0x18            //复用推挽输出
; o& Y6 u7 Y/ ?# @" L}GPIOMode_TypeDef;
, \/ d8 ~. ]3 t1 Q
3 f" A+ G1 A& X; {9 b7 L/ S2.1 输入模式(上拉/下拉/浮空/模拟)
: v0 e6 y# e! r. q8 xGPIO在输入模式中,肖特基触发器被打开,输出被禁止,通过GPIOx_IDR读取I/O状态。上拉/下拉输入,其默认电平由上拉/下拉决定,浮空输入的电平则是不确定的,完全由外部决定,一般按键就是采用浮空输入;模拟输入用于ADC采样。2 @* J5 ?$ ^  D: A7 L- T

( [4 g  F& x9 G6 d' p' P+ y2.2 输出模式(推挽/开漏); n5 d1 Q1 f4 \, s
GPIO在输出模式中,肖特基触发器同样被打开着的,即输入可用,这样通过输入数据寄存器GPIOx_IDR可以读取到IO实际状态。推挽模式时,双MOS以轮流方式工作,开漏模式下,只有N-MOS管工作。输出寄存器GPIOx_ODR可控制是输出高低电平;输出的速率可配,有2MHz/10MHz/50MHz。频率越高,功耗越大,效率也越高。8 b% N( h1 V" d; s

- t8 e! v; C3 E6 Q2.3 复用功能* C2 t" `% G, G, o  I; M0 ^
复用功能中,输出输入都使能,可工作与开漏或推挽模式,但是输出信号源于片上外设,输出数据寄存器GPIOx_ODR无效,输入寄存器GPIOx_IDR仍然有效,可通过它获取IO实际状态,片上外设相关寄存器也是通过GPIOx_IDR获取该数据信号。
1 m' K5 k. c. w! K) c$ A0 ]. J
% f& J5 w$ c  ?& D/ s控制GPIO端口工作模式寄存器是GPIOx_CRL和GPIOx_CRH,它们都是32位的寄存器,分别管控GPIO的低8位IO和高8位IO。另外涉及到的寄存器还有:9 j+ A3 I. v; b/ J/ X& m
GPIOx_ODR: 设置输出数据* d2 C/ W& d+ B& k& J
GPIOx_IDR:读取输入数据
9 y. P! d! p& T4 v: S: l0 l; FGPIOx_BSRR:置1/清零GPIO的相应引脚5 _  U* d# J* U' o
GPIOx_BRR:清零GPIO的相应引脚* a5 r; A- e: ~6 b+ n4 k, S
这些寄存器的设置参照STM32中文参考手册即可,很简单,不赘述。另外,要让GPIO正常工作,记得打开GPIO的时钟。
/ q# F- O- h! J  v* h( h" H+ d/ i- X+ @6 [

# d, s0 e, ?+ |

该用户从未签到

2#
发表于 2021-9-16 11:03 | 只看该作者
GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能

该用户从未签到

3#
发表于 2021-9-16 15:18 | 只看该作者
控制GPIO端口工作模式寄存器是GPIOx_CRL和GPIOx_CRH,32位
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-18 16:27 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表