STM32学习-GPIO


一、GPIO功能描述 

        STM32是一款由STMicroelectronics开发的系列32位微控制器。GPIO(General Purpose Input/Output)是STM32微控制器中用于控制输入和输出的通用引脚。在STM32中,可以通过配置GPIO引脚的工作模式(输入或输出)以及相应的控制寄存器来控制GPIO引脚的状态。通过设置输入模式,可以读取外部信号,而通过设置输出模式,则可以控制外部设备。要使用STM32的GPIO功能,首先需要在代码中包含相应的库文件,并初始化相应的GPIO引脚。然后,可以通过设置相应的寄存器来配置引脚的工作模式和其他属性。最后,可以通过读取或写入相应的寄存器来读取或控制GPIO引脚的状态。

二、GPIO引脚分类

以STM32F103RCT6为例:

  1. 电源管脚: 引脚图中的 VDD、VSS、VBAT 等都属于电源引脚。
  2. 晶振管脚:引脚图中PC14-OSC32_IN、PC15-OSC32_OUT、PD0-OSC_IN、PD1-OUT都属于晶振引脚
  3. 复位引脚:引脚图中NRST属于复位引脚,低电平有效
  4. 下载引脚:引脚图中的 PA13、PA14、PA15、PB3 和 PB4 属于 JTAG 或SW 下载引脚。不过它们还可以作为普通引脚或者特殊功能使用,具体的功能可以查看芯片数据手册,里面都会有附加功能说明。当然,STM32 的串口功能引脚也是可以作为下载引脚使用。
  5. BOOTx 引脚:引脚图中的 BOOT0 和 PB2(BOOT1)属于 BOOT 引脚,在STM32F10xxx里,可以通过BOOT[1:0]引脚选择三种不同启动模式。
  6. GPIO管脚:引脚图中的 PA、PB、PC、PD 等均属于 GPIO 引脚。从引脚图可以看出,GPIO 占用了 STM32 芯片大部分的引脚。并且每一个端口都有 16 个引脚,比如 PA 端口,它有 PA0-PA15。其他的 PB、PC 等端口是一样的。

 三、GPIO内部结构

        

        

STM32GPIO的内部结构包括以下几个主要部分:

  1. GPIO引脚:STM32GPIO控制器具有多个引脚,每个引脚都可以用作输入或输出。每个引脚都有一个唯一的标识符,如PA0、PB1等。

  2. 输入/输出寄存器:STM32GPIO有两种类型的寄存器,用于配置引脚的输入或输出状态。输入寄存器用于读取引脚的状态,输出寄存器用于设置引脚的输出状态。

  3. 状态寄存器:状态寄存器用于存储引脚的当前状态,比如输入寄存器、输出寄存器的值,中断使能等。

  4. 控制寄存器:控制寄存器用于配置引脚的工作模式、输入输出模式、中断使能等。

  5. 引脚复用寄存器:STM32GPIO控制器支持多种外设连接,可以将GPIO引脚用作这些外设的输入输出。引脚复用寄存器用于配置引脚的复用功能,以及选择外设连接。

  6. 中断控制器:STM32GPIO控制器支持中断功能,可以在引脚状态改变时触发中断。中断处理模块用于配置和处理GPIO引脚的中断事件。

四、GPIO的八种工作模式

浮空输入(Floating input):浮空输入是指在输入引脚上没有提供明确的电平信号,即输入引脚既不连接到高电平也不连接到地线。通常情况下,应尽量避免使用浮空输入,因为在浮空状态下,输入引脚可能会受到噪声的干扰,导致不可预测的输入结果。

模拟输入(Analog input):模拟输入用于接收连续变化的电压信号。比如,温度传感器、压力传感器等模拟传感器通常会将感测到的模拟信号转换为适当范围的电压信号,并通过模拟输入引脚输入到微控制器或其他处理器中进行处理。

上拉输入(Pull-up input):上拉输入是指在输入引脚上连接了一个上拉电阻。当未提供明确的电平信号时,上拉电阻会将输入引脚拉高至高电平,以确保输入引脚的状态不会浮空。上拉输入适用于接收低频率的数字信号或开关信号,比如按钮的输入。

下拉输入(Pull-down input):下拉输入是指在输入引脚上连接了一个下拉电阻。当未提供明确的电平信号时,下拉电阻会将输入引脚拉低至地线电平,以确保输入引脚的状态不会浮空。下拉输入和上拉输入相反,适用于接收低频率的数字信号或开关信号。

推挽模式(Push-Pull):推挽输出模式是指在输出状态时,输出引脚以推挽方式连接到电源电压或地,并能够提供高电平和低电平信号。这种模式适合需要在引脚上提供电平高低状态的应用,如驱动电机或LED等。

开漏模式(Open Drain):开漏输出模式是指在输出时,输出引脚以开漏方式连接到地,并通过外部上拉电阻连接到电源电压。该模式允许引脚通过开漏方式将输出信号拉低,但无法提供高电平信号。这种模式适合需要连接到其他外部元件的应用,如驱动开关或与其他设备通信的总线。在开漏模式下,GPIO的输出状态可以是高阻态(输出电平不确定)、低电平(GND连接)、或者电压悬空(输出电平不确定)。开漏输出需要外部上拉电阻连接到正电源上拉到高电平。

复用推挽模式(Alternate Function Push-Pull):复用推挽模式是将GPIO引脚和特定的外设功能相连接的模式,适用于需要连接到外设的输入输出信号线的场景。在复用推挽模式下,GPIO引脚可以具备特定的功能,如UART通信、SPI通信、PWM控制等。

复用开漏模式(Alternate Function Open Drain):复用开漏输出模式是指引脚既可以作为I/O引脚进行输入输出,同时也可以作为复用功能的引脚使用。在输出时,该模式与开漏输出模式一样可以拉低输出信号,而在复用功能时,则具备某种特定的功能,如I2C通信或SPI通信等。

总结:浮空输入应尽量避免使用,模拟输入用于接收连续变化的信号,上拉输入和下拉输入分别用于接收低频数字信号或开关信号,并通过连接上拉或下拉电阻来确保输入引脚的状态不会浮空。具体情况下,根据输入信号的特性和电路设计的要求进行选择。

        在选择推挽输出模式或开漏输出模式时,主要考虑需要连接的外部元件的特性和对输出信号的需求。如果需要提供双向的高低电平信号,则选择推挽输出模式;如果需要与其他外部元件进行通信或连接到总线上,则选择开漏输出模式。而复用推挽输出和复用开漏输出模式是在需要同时使用引脚作为普通I/O和特定功能接口时选择的,可以根据具体的需求来决定使用哪种模式。

五、GPIO的配置

配置GPIO的一般步骤:

        1.定义一个引脚初始化的结构体

        2.使能GPIO时钟,在STM32中使用IO口前都要使能对应时钟

        3.对结构体成员赋值

typedef struct
{
  uint16_t GPIO_Pin;              //指定要配置的GPIO引脚

  GPIOSpeed_TypeDef GPIO_Speed;   //指定所选引脚的速度

  GPIOMode_TypeDef GPIO_Mode;     //指定所选引脚的操作模式

}GPIO_InitTypeDef;

        4.根据设置好的结构体参数,初始化引脚

下面是一个点亮LED的列子

void LED_Init(void)
{
	
	GPIO_InitTypeDef GPIO_InitStructure; //定义一个引脚初始化的结构体
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA时钟
	
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4; //引脚4
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //引脚输入输出模式为推挽输出模式
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //引脚输出速度为50MHZ
	GPIO_Init(GPIOA, &GPIO_InitStructure); //根据上面设置好的参数,初始化引脚GPIOA_PIN4
	
	GPIO_SetBits(GPIOA, GPIO_Pin_4); //初始化设置引脚GPIOA4为高电平
}

GPIO的相关函数:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值