一、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。
二、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 |
输入浮空模式分析:
①无上、下拉。
②输出驱动器被禁止,模拟和复用功能输入也不起作用。
③施密特触发器输入被打开,CPU从输入数据寄存器去读取IO口的状态。
输入上拉模式分析:
①外部上拉电阻起作用
②输出驱动器被禁止,模拟和复用功能输入也不起作用。
③施密特触发器输入被打开,CPU从输入数据寄存器去读取IO口的状态。
输入下拉模式分析:
①外部下拉电阻起作用
②输出驱动器被禁止,模拟和复用功能输入也不起作用。
③施密特触发器输入被打开,CPU从输入数据寄存器去读取IO口的状态。
模拟输入模式分析:
①外部上、下拉电阻都不起作用
② 信号到达施密特触发器之前直接走模拟通道,ADC会去采集IO口的电压信号。
③CPU 会去读取ADC控制单元的相关的寄存器,去读取IO口的模拟信号,ADC控制单元把它转化为数字信号。
开漏模式分析:
①CPU往BSRR寄存器写值,并反映到输出数据寄存器(ODR),设置对应的I0口的为为1,ODR相应的位也为1
② 写1时经过输出控制电路,N-MOS管截至,没有反映到IO口。此时,要想使IO口输出1,要接上拉电阻。
③ 写0时经过输出控制电路,N-MOS导通,此时接下拉电阻,IO口输出0。
④CPU可以通过输入数据寄存器,来读取IO口电平的状态。
推挽输出模式分析:
①输出数据寄存器为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) |