文章目录
- 前言
- 一、GPIO的功能描述
- 二、GPIO的四种输入模式
-
- 1.GPIO浮空输入_IN_FLOATING
- 2.GPIO上拉输入_IPU
- 3.GPIO下拉输入_IPD
- 4.GPIO模拟输入_AIN
- 三、GPIO的四种输出模式
-
- 1.GPIO开漏输出_OUT_OD
- 2.GPIO推挽输出_OUT_PP
- 3.GPIO开漏复用输出_AF_OD
- 4.GPIO推挽复用输出_AF_PP
- 四、GPIO的配置方法
-
- 1.定义GPIO引脚的结构体变量
- 2.配置引脚的速度
- 3.初始化结构体的变量
- 4.初始化对应的端口
前言
一、GPIO的功能描述
每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_ IDR和GPIOx_ ODR),一个32位置位/复位寄存器(GPIOx_ BSRR),一个16位复位寄存器(GPIOx_ BRR)和一个32位锁定寄存器(GPIOx_ LCKR)。
根据数据手册中列出的每个I/O端口的特定硬件特征,GPIO端口的每个位可以由软件分别配置成多种模式。
-输入浮空
-输入上拉
-输入下拉
-模拟输入
-开漏输出
-推挽式输出
-推挽式复用功能
-开漏复用功能
二、GPIO的四种输入模式
当IO口配置为输入时:
- 输出缓冲器被禁止
- 施密特触发输入被激活
- 根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接
- 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
- 对输入数据寄存器的读访问可得到I/O状态
如:按键采用浮空输入,则在按键按下时输入电平为低,但是当松开按键时输入端口悬空,外界有微弱的干扰都会被端口检测到。此时端口可能高,也可能低。
2.GPIO上拉输入_IPU
与上一部分的浮空输入模式相比,仅仅是在数据通道上面,接入了一个上拉电阻。
根据STM32的数据手册,这个下拉电阻阻值也是介于30K~50K 欧姆。
浮空输入在外界没有输入时状态不确定,可能对电路造成干扰。为了使得电路更加稳定,不出现没有输入时端口的输入数据被干扰 (比如手碰一下电压就发生变化)。
这时就需要下拉(上拉)电阻。此电阻与端口输入阻抗相比仍然较小。有输入信 时端口读取输入信 ,无输入信 时端口电平被拉到低(高)电平。
当单片机的IO口作输出时,如果不接上拉电阻只能提供灌电流。无法输出电流驱动外接设备。这时也需要考虑上拉电阻。这样才可以使IO输出高电平。
4.GPIO模拟输入_AIN
如果把STM32配置为模拟输入模式时,工作原理就十分简单了,信 从左边编 为1 的端口进从右边编 为2的一端直接进入STM32单片机的AD模块。
- 在开漏或推挽式配置中,输出缓冲器被打开
- 内置外设的信 驱动输出缓冲器(复用功能输出)
- 施密特触发输入被激活
- 弱上拉和下拉电阻被禁止
- 在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器
- 开漏模式时,读输入数据寄存器时可得到I/O口状态
- 在推挽模式时,读输出数据寄存器时可得到最后一次写的值
开漏输出高电平时是由外接电源输出的,因此可以实现高于输出端口电压的输出。可以实现电平的转换。开漏输出可以实现线与功能,方法是多个输出共接一个上拉电阻。但是漏极开路输出上升沿慢,因为上升沿是外接电源对上拉电阻以及外接负载充电。
2.GPIO推挽输出_OUT_PP
不同的是编 为2的输入源不同,它是和复用功能的输出端相连
此时的“输出数据寄存器”被输出通道给断开了。
同样,CPU也可以从“输入数据寄存器”读取到外部IO端口变化的电平信 。
4.GPIO推挽复用输出_AF_PP

编 2 “输出控制电路” 输入与复用功能的输出端相连
此时“输出数据寄存器”被从输出通道断开了,片上外设的输出信 直接与“输出控制电路”的输入端想连接。
在将GPIO配置成复用输出功能后,假如相应的外设模块没有被激活,那么此时IO端口的输出将不确定。
四、GPIO的配置方法
1.定义GPIO引脚的结构体变量
2.配置引脚的速度
3.初始化结构体的变量
(1)引脚
(2)速度
(3)模式
模式的配置介绍:
一个IO口需要4个bit来控制:
CNF MODE CNF MODE
00 00 ~ 11 11
也就是十六进制的 0x 0 ~ 0x F
其中MODE是设置输入输出模式::
- 00:输入(复位后的状态)
- 01:输出,最大速度10MHz
- 10:输出,最大速度2MHz
- 11:输出,最大速度50MHz
而CNF是在MODE的基础上选择更细分的模式:
(1)当MODE为00,即输入模式下:
- 00:模拟输入
- 01:浮空输入
- 10:上拉/下拉输入
- 11:保留
(2)当MODE为01,10,11,即输出模式时:
- 00:推挽输出
- 01:开漏输出
- 10:复用推挽输出
- 11:复用开漏输出
4.初始化对应的端口
(1) 作为普通GPIO输入:
根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时不要使能该引脚对应的所有复用功能模块。
(2) 作为普通GPIO输出:
根据需要配置该引脚为推挽输出或开漏输出,同时不要使能该引脚对应的所有复用功能模块。
(3) 作为普通模拟输入:
配置该引脚为模拟输入模式,同时不要使能该引脚对应的所有复用功能模块。(A/D模拟输入)
(4) 作为内置外设的输入:
根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时使能该引脚对应的某个复用功能模块。
(5)作为内置外设的输出:
根据需要配置该引脚为复用推挽输出或复用开漏输出,同时使能该引脚对应的所有复用功能模块。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!