STM32(一)_GPIO框图剖析

GPIO框图剖析

框图

在这里插入图片描述

图1 GPIO框图

基本结构分析

保护二极管

在这里插入图片描述

图2 保护二极管

保护二极管用于防止引脚外部过高或过低的电压,当外部电压低于VSS,下方二极管导通,当外部电压高于VDD_FT,上方二极管导通。

上、下拉电阻

在这里插入图片描述

图3 上、下拉电阻

上、下拉电阻可以控制引脚默认电压(高电平和低电平),可以消除引脚不定状态的影响。也可以配置为浮空模式(既不上拉也不下拉)。

值得注意的是,STM32的内部上拉是弱上拉,要求大电流还是需要外部上拉。

通过“上、下拉寄存器GPIOx_PUPDR”控制引脚上、下拉模式。

P-MOS管和N-MOS管

在这里插入图片描述

图4 P-MOS和N-MOS

P-MOS管和N-MOS管组成的单元电路使GPIO具有了"推挽输出"和“开漏输出”两种模式。

1 推挽输出
在这里插入图片描述

图5 推挽输出电路

​ 在IN输入高电平时,P-MOS导通,N-MOS关闭,输出高电平;

​ 在IN输入低电平时,P-MOS关闭,N-MOS导通,输出低电平;

2 开漏输出

在这里插入图片描述

图6 开漏输出电路

​ 在开漏模式中,P-MOS管完全不工作,若想要输出0,P-MOS关闭,N-MOS导通,输出接地;

​ 若想要输出1(无法输出高电平),P-MOS和N-MOS都关闭,引脚既不输出高电平也不输出低电平,为高阻态,为正常使用,必须接外部上拉;

除了I2C等需要“线与”功能(多个开漏引脚接一起,都输出高阻态,才由上拉电阻提供高电平,若一个引脚为地,则线路短路接地)的总线电路和电平不匹配(需输出5V高电平,则外部接上拉电阻,上拉电压为5V)的场合,通常情况下使用推挽输出模式。

通过“输出类型寄存器GPIOx_OTYPER”控制端口是推挽模式还是开漏模式。

输出数据寄存器

单片机可通过修改**“置位/复位寄存器GPIOx_BSRR”来修改“输出数据寄存器GPIOx_ODR”**的值,从而影响电路的输出。

复用功能输出

“复用”指的是STM32的其他片上外设对GPIO引脚进行控制,此时其他片上外设出来的信号连接到双MOS管结构中。

例如我们使用 USART 串口通讯时,需要用到某个 GPIO 引脚作为通讯发送引脚,这个时候就可以把该 GPIO 引脚配置成 USART 串口复用功能,由串口外设控制该引脚,发送数据。

通过“端口模式寄存器GPIOx_MODER”控制端口为复用模式。

输入数据寄存器

输入信号经过施密特触发器后,模拟信号转为0、1的数字信号,然后存储在**“输出数据寄存器GPIOx_IDR”**中,通过读取该寄存器就可以了解 GPIO 引脚的电平状态。

通过“输入数据寄存器GPIOx_IDR”读取I/O状态。

复用功能输入

与复用输出类似,信号通过GPIO引脚传输到其他片上外设,由该外设读取引脚状态。

通过“端口模式寄存器GPIOx_MODER”控制端口为复用模式。

模拟输入输出

模拟输入用于采集原始的模拟信号(ADC需要),不经过施密特触发器;类似的,当引脚用于DAC作为模拟信号输出通道时,此时为模拟输出功能,信号直接输出到引脚;

当GPIO用于模拟功能时(包括输入输出),引脚的上、下拉电阻是不起作用的。

通过“端口模式寄存器GPIOx_MODER”控制端口为模拟模式。

GPIO的工作模式

总结一下,由GPIO的结构决定了可以配置为以下几种工作模式。

输入模式

通过**“端口模式寄存器GPIOx_MODER”**控制端口为输入模式;

通过**“输入数据寄存器GPIOx_IDR”**读取I/O状态;

通过**“上/下拉寄存器GPIOx_PUPDR”**设置上、下拉状态。

输出模式

通过**“端口模式寄存器GPIOx_MODER”**控制端口为输出模式;

通过**“输出类型寄存器GPIOx_OTYPER”**控制端口是推挽模式还是开漏模式;

通过**“输出速度寄存器GPIOx_OSPEEDR”**设置输出速度;

通过**“上/下拉寄存器GPIOx_PUPDR”设置上、下拉状态,由于“输出数据寄存器GPIOx_ODR”**的影响(ODR对应的引脚为0,即引脚初始化后默认状态为低,上拉不足以影响引脚默认状态),;

通过**“输出数据寄存器GPIOx_ODR”**控制IO高低电平(推挽);

此时输入可用,可通过**“输入数据寄存器GPIOx_IDR”**读取I/O状态。

复用功能

通过**“端口模式寄存器GPIOx_MODER”**控制端口为复用模式;

通过**“输出类型寄存器GPIOx_OTYPER”**控制端口是推挽模式还是开漏模式;

通过**“输出速度寄存器GPIOx_OSPEEDR”**设置输出速度;

通过**“上/下拉寄存器GPIOx_PUPDR”**设置上、下拉状态;

输出源于其他外设,**“输出数据寄存器GPIOx_ODR”**无效,同输出模式,此时引脚默认状态为低;

此时输入可用,可通过**“输入数据寄存器GPIOx_IDR”**读取I/O状态,但一般用外设的寄存器获取数据信号。

模拟输入输出

通过**“端口模式寄存器GPIOx_MODER”**控制端口为模拟模式;

此时,双MOS管结构关闭,施密特触发器停用,上/下拉禁止,其他外设通过模拟通道进行输入输出。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值