概述
GPIO,即通用I/O(输入/输出)端口,是STM32可控制的引脚。STM32芯片的GPIO引脚与外部设备连接起来,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。STM32F407有9组IO。分别为GPIOA~GPIOH,除了GPIOH只有两个IO引脚外,每组IO有16根引脚,一共114个I/O引脚。
每组通用I/O端口包括:
4个32位()、GPIOx_OTYPER、GPIOx_OSPEEDR 和 GPIOx_PUPDR)、2个32位数据寄存器(GPIOx_IDR 和 GPIOx_ODR)、1个32 位置位/复位寄存器 (GPIOx_BSRR)、1个32位锁定寄存器(GPIOx_LCKR)和2个32位复用功能选择寄存器(GPIOx_AFRH 和 GPIOx_AFRL)。
寄存器 | 功能 |
---|---|
配置寄存器GPIOx_MODER | 配置IO引脚为输入或输出,复用功能,模拟模式 |
端口引脚输出类型寄存器GPIOx_OTYPER | 配置IO引脚的输出类型为推挽输出或开漏输出 |
端口引脚输出速度寄存器GPIOx_OSPEEDR | 配置引脚的响应速度为2MHz,25MHz,50MHz,100MHz |
端口上拉/下拉寄存器 (GPIOx_PUPDR) | 设置上拉或下拉,或者都不要 |
端口引脚输入数据寄存器GPIOx_IDR | 输入模式,用于输入设备,如读IO引脚对应此寄存器的位判断按键是否按下 |
端口引脚输出数据寄存器GPIOx_ODR | 输出模式,输出需要的高电平或低电平 |
置位/复位寄存器GPIOx_BSRR | 对GPIOx_ODR的位进行置位或清零操作 |
锁定寄存器GPIOx_LCKR) | 锁定端口引脚的位置,直到系统复位才能解除锁定 |
复用功能高位选择寄存器GPIOx_AFRH | 用于配置高位引脚8~15的复用功能 |
复用功能低位选择寄存器GPIOx_AFRL | 用于配置低位引脚0~7的复用功能 |
GPIO功能描述
GPIO可以配置成如下模式,实际应用中应该配置成什么模式,可以根据连接的外设来决定:
输入浮空
输入上拉
输入下拉
模拟功能
具有上拉或下拉功能的开漏输出
具有上拉或下拉功能的推挽输出
具有上拉或下拉功能的复用功能推挽
具有上拉或下拉功能的复用功能开漏
GPIO端口位基本结构
输入浮空
该模式下,I/O引脚的电平信号直接进入输入数据寄存器读取数据。处理器直接读取I/O引脚电平,I/O引脚的电平状态完全由外部输入决定;如果在该引脚悬空(在无信号输入)的情况下,读取该端口的电平是不确定的。
输入上拉
该模式下,I/O引脚内部接上拉电阻(内部上拉),此时如果I/O引脚外部没有信号输入或者引脚悬空,I/O引脚默认为高电平 如果I/O引脚输入低电平,那么引脚就为低电平,处理器读取到的就是低电平,但是STM32的内部上拉电阻是"弱上拉",输出的电流很微弱,如要求大电流还是需要外部上拉。
输入下拉
与输入上拉相反的就是输入下拉,也就是当I/O引脚外部没有信号输入或者引脚悬空,I/O引脚默认为低电平,如果I/O引脚输入高电平,那么引脚就为高电平。
模拟功能
该模式下,I/O引脚用于ADC采集电压的输入通道时,用作"模拟输入"功能,此时信号不经过施密特触发器,直接直接进入ADC模块,并且输入数据寄存器为空 ,处理器不能在输入数据寄存器上读到引脚状态,当I/O用于模拟功能时,引脚的上、下拉电阻不需配置。
具有上拉或下拉功能的开漏输出
该模式下,P-MOS管完全不工作,当需要输出高电平时,N-MOS管呈现高阻态,I/O引脚电平完全由外部上拉或下拉电阻决定,当需要输出低电平时,N-MOS将被导通,电流被引到地中,输出低电平0V;此模式施密特触发器是打开的,当有输入数据时可以读取输入数据寄存器,内部上拉和下拉电阻的作用是控制在没有输出时IO引脚电平。
具有上拉或下拉功能的推挽输出
该模式下,P-MOS管和N-MOS管一起工作,当需要输出高电平时P-MOS被导通,I/O引脚输出电平VDD,当需要输出低电平是N-MOS管被导通,输出电平VSS(公共接地端电压),当有输入数据时可以读取输入数据寄存器,内部上拉和下拉电阻的作用是控制在没有输出时IO引脚电平。
具有上拉或下拉功能的复用功能推挽和开漏
此模式下除了输出控制源不同,其他的都和普通的开漏和推挽输出一样,需要注意的是输出数据寄存器GPIOx_ODR是无效的。
总结
1.STM32F4有很多的内置外设,这些外设的外部引脚都是与GPIO共用的。如果想使用一GPIO内置外设的功能引脚,就需要复用GPIO作为内置外设,比如说I2C,SPI,USART等等的引脚就需要;
2.芯片数据手册的引脚定义中记录了每个I/O引脚是否支持5V;
3.开漏输出模式应用在电平不匹配场合,利用一个外部上拉电阻来匹配电平;推挽输出模式一般应用在输出电平为0和3.3伏而且需要高速切换开关状态的场合。
相关下载
链接:https://pan.baidu.com/s/10gTR5-5cFMnb9XZZmtxjsQ
提取码:nfsj
复制这段内容后打开百度网盘手机App,操作更方便哦