1、GPIO 内部结构
GPIO 的电路是一堆电路,所以需要配置寄存器,来打开对应的开关,来实现不同的功能。
输入部分:
输入的信号,不会反向的回流到输出电路,因为 N-MOS、P-MOS 不会被反向导通。(输入电路不会影响到输出电路)
输入电路内部有两个电阻:上拉电阻、下拉电阻。
- 上下拉电阻对应两个开关:这个开关也是通过 GPIO 的配置寄存器,来进行配置打开或者关闭。
- VDD 开关闭合:上拉输入。(即没有信号输入的时候,触发器里面存储 1 )
- VSS 开关闭合:下拉输入。(即没有信号输入的时候,触发器里面存储 1)
- VDD、VSS 都不导通:浮空输入。
模拟输入:不经过触发器,直接接到片上外设 ADC ,从而进行模数转换。
触发器:存储高低电平的 bit 位。(代表数字输入)
输出部分:
N-MOS 管:高电平 导通
P-MOS 管: 低电平 导通
当输出寄存器为高电平的时候,经过一个非门,传到输出控制的时候,就变成了一个低电平,从而将 P-MOS 导通。
电位的提供不是靠数据寄存器,而是通过打开对应的开关,从而利用对应的电源实现。(VDD、VSS)
输出控制有两个控制端
- 输出数据寄存器:代表通用的 GPIO
- 片上外设寄存器:代表 GPIO 的复用功能。
2、GPIO 的 8种工作模式
不同模式对应的电路流向:
浮空输入:
输入上拉、下拉:
模拟输入:
开漏输出:此时的 I/O 端口,既可以做输入模式、也可以做输出模式。
- 此时的输出电平,并不会影响到输入电路。(与推完输出不同)
- 因为开漏输出:VDD 不会起作用,输出高电平的时候,依靠外面外接一个上拉电阻。
- 所以开漏输出的高电平,并不会影响到对应的输入电路。
推挽输出:
- 此时输出高电平,是依靠 VDD 来实现的,所以同时会影响到输入电路。
- 此时输入电路就无法分辨,高电平是自己输出的,还是外部输入的。
3、GPIO 的复用
STM32基本上每个引脚都有8种配置模式:
1)浮空输入
2)带弱上拉输入
3)带弱下拉输入
4)模拟输入
5)推挽输出
6)开漏输出
7)复用推挽输出
8)复用开漏输出
STM32Fxx内部集成了很多的外设控制器,比如USART、SPI、bxCAN等等,这些外设控制器,也需要通过引脚与外设连接。
复用功能是相对于单片机的引脚而言的。所谓“复用功能”,是指单片机的引脚既可以做普通GPIO使用,也可以作为内部外设控制器的引脚来使用。
比如我们来看看STM32F103xx单片机的PA5引脚,如下图:
(1)GPIO 支持多种外设的时候,如何区别
!!!:通过外设时钟是否是能,以及当前 GPIO 处于什么模式。
PA5 的功能:
- 普通GPIO
- SPI1的时钟(SPI1_SCK)
- DAC的输出通道1(DAC_OUT1)
- ADC的输入通道5(ADC12_IN5)
PA5支持的三种外设(SPI1、DAC、ADC)在同一时刻只能选择一种。
选择的方法是:开启相应外设的时钟,并使其它外设的时钟保持关闭状态。
如果PA5被配置为复用功能,但是没有开启它支持的任何外设的时钟,它的输出是不确定的。
(2)普通推挽输出、复用推挽输出的区别
复用推挽输出和(普通)推挽输出在输出的时候均使用两个MOS管(P-MOS和-MOS),其输出电路是相同的。
!!!!区别在于控制输出的信号来源:
- (普通)推挽输出控制MOS管的信号来自 输出数据寄存器。
- 复用推挽输出的控制信号来自单片机的 内置外设控制器(比如SPI1)。
下面这张图,是普通GPIO输出的引脚配置图,可以看到其输出信号来自输出 数据寄存器(Output data register):
下面这张图,是选择复用功能后的引脚配置图,可以看到其输出信号来自 芯片内置的外设控制器:
注意:虽然复用模式的控制信号来自内置外设控制器,但是单片机(CPU)依然可以读取相应的数据。
- 在 复用推挽输出模式 下,单片机可以通过读取输出数据寄存器(Output Data Register)的数据来获取上次输出的值;
- 在 复用开漏输出的模式 下,单片机可以通过读取输入数据寄存器(Input Data Register)的值来获取引脚的状态。
版权声明:本文为CSDN博主「想文艺一点的程序员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/vincent3678/article/details/122263348
1、GPIO 内部结构
GPIO 的电路是一堆电路,所以需要配置寄存器,来打开对应的开关,来实现不同的功能。
输入部分:
输入的信号,不会反向的回流到输出电路,因为 N-MOS、P-MOS 不会被反向导通。(输入电路不会影响到输出电路)
输入电路内部有两个电阻:上拉电阻、下拉电阻。
- 上下拉电阻对应两个开关:这个开关也是通过 GPIO 的配置寄存器,来进行配置打开或者关闭。
- VDD 开关闭合:上拉输入。(即没有信号输入的时候,触发器里面存储 1 )
- VSS 开关闭合:下拉输入。(即没有信号输入的时候,触发器里面存储 1)
- VDD、VSS 都不导通:浮空输入。
模拟输入:不经过触发器,直接接到片上外设 ADC ,从而进行模数转换。
触发器:存储高低电平的 bit 位。(代表数字输入)
输出部分:
N-MOS 管:高电平 导通
P-MOS 管: 低电平 导通
当输出寄存器为高电平的时候,经过一个非门,传到输出控制的时候,就变成了一个低电平,从而将 P-MOS 导通。
电位的提供不是靠数据寄存器,而是通过打开对应的开关,从而利用对应的电源实现。(VDD、VSS)
输出控制有两个控制端
- 输出数据寄存器:代表通用的 GPIO
- 片上外设寄存器:代表 GPIO 的复用功能。
2、GPIO 的 8种工作模式
不同模式对应的电路流向:
浮空输入:
输入上拉、下拉:
模拟输入:
开漏输出:此时的 I/O 端口,既可以做输入模式、也可以做输出模式。
- 此时的输出电平,并不会影响到输入电路。(与推完输出不同)
- 因为开漏输出:VDD 不会起作用,输出高电平的时候,依靠外面外接一个上拉电阻。
- 所以开漏输出的高电平,并不会影响到对应的输入电路。
推挽输出:
- 此时输出高电平,是依靠 VDD 来实现的,所以同时会影响到输入电路。
- 此时输入电路就无法分辨,高电平是自己输出的,还是外部输入的。
3、GPIO 的复用
STM32基本上每个引脚都有8种配置模式:
1)浮空输入
2)带弱上拉输入
3)带弱下拉输入
4)模拟输入
5)推挽输出
6)开漏输出
7)复用推挽输出
8)复用开漏输出
STM32Fxx内部集成了很多的外设控制器,比如USART、SPI、bxCAN等等,这些外设控制器,也需要通过引脚与外设连接。
复用功能是相对于单片机的引脚而言的。所谓“复用功能”,是指单片机的引脚既可以做普通GPIO使用,也可以作为内部外设控制器的引脚来使用。
比如我们来看看STM32F103xx单片机的PA5引脚,如下图:
(1)GPIO 支持多种外设的时候,如何区别
!!!:通过外设时钟是否是能,以及当前 GPIO 处于什么模式。
PA5 的功能:
- 普通GPIO
- SPI1的时钟(SPI1_SCK)
- DAC的输出通道1(DAC_OUT1)
- ADC的输入通道5(ADC12_IN5)
PA5支持的三种外设(SPI1、DAC、ADC)在同一时刻只能选择一种。
选择的方法是:开启相应外设的时钟,并使其它外设的时钟保持关闭状态。
如果PA5被配置为复用功能,但是没有开启它支持的任何外设的时钟,它的输出是不确定的。
(2)普通推挽输出、复用推挽输出的区别
复用推挽输出和(普通)推挽输出在输出的时候均使用两个MOS管(P-MOS和-MOS),其输出电路是相同的。
!!!!区别在于控制输出的信号来源:
- (普通)推挽输出控制MOS管的信号来自 输出数据寄存器。
- 复用推挽输出的控制信号来自单片机的 内置外设控制器(比如SPI1)。
下面这张图,是普通GPIO输出的引脚配置图,可以看到其输出信号来自输出 数据寄存器(Output data register):
下面这张图,是选择复用功能后的引脚配置图,可以看到其输出信号来自 芯片内置的外设控制器:
注意:虽然复用模式的控制信号来自内置外设控制器,但是单片机(CPU)依然可以读取相应的数据。
- 在 复用推挽输出模式 下,单片机可以通过读取输出数据寄存器(Output Data Register)的数据来获取上次输出的值;
- 在 复用开漏输出的模式 下,单片机可以通过读取输入数据寄存器(Input Data Register)的值来获取引脚的状态。
版权声明:本文为CSDN博主「想文艺一点的程序员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/vincent3678/article/details/122263348
暂无评论