STM32的标准库与HAL库学习——以F407为例(二)GPIO

一、简介

  定义:GPIO英文全称general purpose intput output,是通用输入输出端口的简称,可以通过软件来控制其输入和输出。STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。

  分类:STM32从管脚类型被分为了:电源管脚、晶振管脚、复位管脚、下载管脚、BOOT管脚、GPIO管脚。

二、工作模式

  根据数据手册中列出的每个 I/O 端口的特性,可通过软件将通用 I/O (GPIO) 端口的各个端口 位分别配置为多种模式:

● 输入浮空

● 输入上拉

● 输入下拉

● 模拟功能

● 具有上拉或下拉功能的开漏输出

● 具有上拉或下拉功能的推挽输出

● 具有上拉或下拉功能的复用功能推挽

● 具有上拉或下拉功能的复用功能开漏

三、结构

STM32的标准库与HAL库学习——以F407为例(二)GPIO_第1张图片

  (1)保护二极管:IO引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入,当引脚电压高于VDD_FT时,上方的二极管导通,当引脚电压低于VSS时,下方的二极管导通,防止异常常电压引入芯片导致芯片烧毁。
(2)上拉、下拉电阻:控制引脚默认状态的电压。打开上拉的时候引脚默认电压为高电平,打开下拉的时候引脚默认电压为低电平。
(3)TTL施密特触发器:基本原理是当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;IO口信号经过触发器后,可以将电平分为高电平与低电平,也就是1和0的数字信号,并且符合TTL电平协议,这就是STM32可以产生TTL信号的原因。
(4)P-MOS管和N-MOS管:输出电平信号由P-MOS管和N-MOS管决定,高电平时,P-MOS管导通,N-MOS管关闭输出高电平,低电平时,P-MOS管关闭,N-MOS管导通输出低电平,这就使得GPIO具有“推挽输出”和“开漏输出”的模式 。

 浮空输入

  不接上下拉电阻,输入由外部决定。但输入信号经过施密特触发器,只能读出高低电平(不同于模拟输入)。

 输入上拉

  接上拉电阻,外部无信号默认高电平。

 输入下拉

  接下拉电阻,外部无信号默认低电平。

 模拟功能

  通常在ADC/DAC时使用,直接走模拟信号。

 具有上拉或下拉功能的开漏输出

  在开漏输出模式时,只有N-MOS管工作,如果我们控制输出为低电平时,则P-MOS管关闭,N-MOS管导通,使输出低电平,I/O端口的电平就是低电平,若控制输出为1高电平时,则P-MOS管和N-MOS管都关闭,输出指令不会起到作用,此时IO端口要输出高电平,就要让I/O端口外部的上拉或者下拉决定,如果没有上拉或者下拉 IO口就处于悬空状态。

 具有上拉或下拉功能的推挽输出

  在推挽输出模式时,N-MOS管和P-MOS管都工作,如果我们控制输出为低电平,则P-MOS管关闭,N-MOS管导通,I/O端口输出低电平,若控制输出为高电平,则P-MOS管导通N-MOS管关闭,I/O端口输出高电平

  • 此时输入是可用,通过输入数据寄存器GPIOx_IDR可读取I/O的实际状态。I/O口的电平是输出的电平。

 复用

  输出来自外设,但输入仍可用,其余功能与与推挽/开漏类似。

四、标准库配置

  1、结构体

typedef struct
{
  uint32_t GPIO_Pin;        //要配置的管脚      

  GPIOMode_TypeDef GPIO_Mode;   //工作模式  

  GPIOSpeed_TypeDef GPIO_Speed; //速度  

  GPIOOType_TypeDef GPIO_OType;   //推挽或开漏

  GPIOPuPd_TypeDef GPIO_PuPd;   //上下拉  
}GPIO_InitTypeDef;

2、参数(见stm32f4xx_gpio.h)

3、LED闪烁实例

初始化配置

void MYGPIO_Init(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIOF时钟
 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;//配置9、10脚
 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;//输出模式
 GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽
 GPIO_InitStructure.GPIO_Speed=GPIO_Medium_Speed;//25M
 GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP ;//上拉
 GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化
}

五、HAL库配置

较简单,不记录。

六、参考资料

https://xiuchengzhen.blog.csdn.net/article/details/120950878

你可能感兴趣的:(stm32,学习,嵌入式硬件)