【STM32】GPIO基础知识、8种工作模式、10种寄存器详细介绍

时间:2024-03-30 08:44:13

一、GPIO入门知识

(1)GPIO是什么?

全称:general purpose intput output 通用输入输出端口。

可以做输入也可以做输出。GPIO端口可通过程序配置成输入或者输出。

(2)引脚和GPIO的区别和联系?

STM32的引脚中,有部分是做GPIO使用,部分是电源引脚/复位引脚/启动模式引脚/晶振引脚/调试下载引脚。

(3)STM32F767IGT6 IO口引脚资源

①一共有9组IO:PA~PI ②其中PA~PH每组16个IO,PI只有PIO~PI11。

③一共有140个I0口:16*8+12=140

(4)绝多数引脚都是GPIO,有限的引脚怎么实现更多的功能?

STM32的大部分引脚除了当GPIO使用外,还可以复用为外设功能引脚(比如串口,定时器,CAN,ADC,DAC等)。一个引脚,可以作为IO口,同时也可以作为复用功能外设引脚。

(5)上电复位后IO口状态?

上电复位后,GPIO默认为输入浮空状态,部分特殊功能引脚为特定状态。

复位后,调试引脚处于复用功能上拉/下拉状态:

PA15:JTDI处于上拉状态

PA14:JTCK/SWCLK处于下拉状态

PA13:JTMS/SWDAT处于下拉状态

PB4:NJTRST处于上拉状态

PB3:JTDO处于浮空状态

(5)复用原理

AFRL复用功能低位寄存器,控制8个IO口。每四位控制1个引脚,可以配置该引脚复用为AF0~AF15。

【STM32】GPIO基础知识、8种工作模式、10种寄存器详细介绍

二、GPIO的8种工作模式

                                                                           表1 GPIO的8种工作模式

4种输入模式

对应的标识

作用

输入浮空

 

多用于外部按键输入,在浮空输入状态下,IO 的电平状态是不确定的,完全由外部输入决定。

输入上拉

GPIO_MODE_INPUT

IO 外部上拉电阻输入

输入下拉

 

IO 外部下拉电阻输入

模拟输入

GPIO_MODE_ANALOG

用于 ADC 模拟输入,或者低功耗下省电

 

 

 

4种输出模式(带上下拉)

 

 

开漏输出(带上拉或者下拉)

 

GPIO_MODE_OUTPUT_OD

IO 输出 0 接 GND,IO 输出 1,悬空,IO 口的状态由上拉电阻拉高电平。由于是开漏输出模式 IO 口也可以由外部电路改变为低电平或不变。

开漏复用功能(带上拉或者下拉)

 

GPIO_MODE_AF_OD

 

推挽式输出(带上拉或者下拉)

 

GPIO_MODE_OUTPUT_PP

IO 输出 0接 GND, IO 输出 1 接 VCC,读取输入值是未知的

推挽式复用功能(带上拉或者下拉)

 

GPIO_MODE_AF_PP

 

                                                                                  表2 GPIO的4种输出速度

4种最大输出速度

速度

对应的标识

2MHZ

低速

GPIO_SPEED_LOW

25MHZ

中速

GPIO_SPEED_MEDIUM

50MHZ

快速

GPIO_SPEED_FAST

100MHZ

高速

GPIO_SPEED_HIGH

                                                                              表3 GPIO的上下拉情况说明

上/下拉

对应的标识

无上下拉

GPIO_NOPULL

上拉

GPIO_PULLUP

下拉

GPIO_PULLDOWN

【STM32】GPIO基础知识、8种工作模式、10种寄存器详细介绍

输入浮空模式分析:

①无上、下拉。

②输出驱动器被禁止,模拟和复用功能输入也不起作用。

 ③施密特触发器输入被打开,CPU从输入数据寄存器去读取IO口的状态。

【STM32】GPIO基础知识、8种工作模式、10种寄存器详细介绍

输入上拉模式分析:

①外部上拉电阻起作用

 ②输出驱动器被禁止,模拟和复用功能输入也不起作用。

③施密特触发器输入被打开,CPU从输入数据寄存器去读取IO口的状态。

【STM32】GPIO基础知识、8种工作模式、10种寄存器详细介绍

输入下拉模式分析:

①外部下拉电阻起作用

②输出驱动器被禁止,模拟和复用功能输入也不起作用。

 ③施密特触发器输入被打开,CPU从输入数据寄存器去读取IO口的状态。

【STM32】GPIO基础知识、8种工作模式、10种寄存器详细介绍

模拟输入模式分析:

①外部上、下拉电阻都不起作用

② 信号到达施密特触发器之前直接走模拟通道,ADC会去采集IO口的电压信号。

③CPU 会去读取ADC控制单元的相关的寄存器,去读取IO口的模拟信号,ADC控制单元把它转化为数字信号。

【STM32】GPIO基础知识、8种工作模式、10种寄存器详细介绍

开漏模式分析:

①CPU往BSRR寄存器写值,并反映到输出数据寄存器(ODR),设置对应的I0口的为为1,ODR相应的位也为1

② 写1时经过输出控制电路,N-MOS管截至,没有反映到IO口。此时,要想使IO口输出1,要接上拉电阻。

③ 写0时经过输出控制电路,N-MOS导通,此时接下拉电阻,IO口输出0。

④CPU可以通过输入数据寄存器,来读取IO口电平的状态。

【STM32】GPIO基础知识、8种工作模式、10种寄存器详细介绍

推挽输出模式分析:

 ①输出数据寄存器为1,IO口就为高电平。

 ② 输出数据寄存器为0,IO口就为低电平。

 ③ 写1,P-MOS导通,IO口输出VDD,为高电平。写0,N-MOS导通,IO口输出VSS,为低电平。

 ④ CPU可以通过输入数据寄存器,来读取IO口电平的状态。

三、GPIO相关的寄存器

                                                                            表4GPIO寄存器表述

寄存器种类

英文表示

说明

端口模式寄存器 (GPIOx_MODER) (x =A..K)

port mode register(MODE R)

4个32位配置寄存器

端口输出类型寄存器 (GPIOx_OTYPER) (x = A..K)

port output type register(O TYPE R)

端口输出速度寄存器 (GPIOx_OSPEEDR) (x = A..K)

port output speed register(O SPEED R)

端口上拉/ 下拉寄存器 (GPIOx_PUPDR) (x = A..K)

port pull-up/pull-down register(PU PD R)

端口输入数据寄存器 (GPIOx_IDR) (x = A..K)

port input data register(I D R)

2个32位数据寄存器

端口输出数据寄存器 (GPIOx_ODR) (x = A..K)

port output data register(O D R)

端口置位/ 复位寄存器 (GPIOx_BSRR) (x = A..K)

port bit set/reset register(B S R R)

1个32位置/位复位寄存器

端口配置锁定寄存器 (GPIOx_LCKR) (x = A..K)

port configuration lock register(LCK R)

1个32位锁存寄存器

复用功能低位寄存器 (GPIOx_AFRL) (x = A..K)

alternate function low register(A F R L )

2个复用功能寄存器

复用功能高位寄存器 (GPIOx_AFRH) (x = A..J)

alternate function high register(A F R H)

【STM32】GPIO基础知识、8种工作模式、10种寄存器详细介绍