【STM32】 浅谈STM32关于GPIO的认识

一.GPIO的基本概念

1.GPIO的定义

GPIO是“General Purpose Input/Output”的英文缩写,中文翻译为“通用输入输出”。GPIO是一种用于与外部设备进行通信的物理引脚接口。GPIO可以在不同的嵌入式系统上具有不同的功能,例如作为输入引脚接收信号,或作为输出引脚发送信号。

2.GPIO的特点

通用性:GPIO可以灵活配置为输入或输出,并且可以根据应用需求进行重新配置。

数字信号:GPIO的信号通常是数字信号,即高电平(1)或低电平(0)。

多功能:同一个GPIO可以具有多种不同的功能,例如输入、输出、中断等。

可编程性:某些嵌入式系统允许通过编程方式对GPIO进行配置和控制,以满足特定的应用需求。

3.GPIO的作用

GPIO引脚在嵌入式系统中重要的作用是实现stm32与各种外部硬件之间的连接和数据交互,负责外部器件的信息和控制外部器件工作,例如传感器、执行器、显示器、通信模块等。

二.GPIO的引脚 

1.引脚的概念

负责芯片内部的控制单元与外部相应外设的连接。 引脚其实本质上就是一根电线。
 

 2.引脚的作用

  1)引脚可以输入/输出一个电平信号(1/0)
        这个电平信号是对于CPU来说的,因为CPU只能识别 0/1
  2)引脚可以输入/输出一个高低电压。
        因为对于外部电路来说,外部电路的工作是采用的模拟电信号(电压值)。

【STM32】 浅谈STM32关于GPIO的认识_第1张图片  

不同MCU,GPIO口的引脚数量不同 。

三.GPIO的分类

GPIO分为输出和输入两种模式,两种模式又分别对应一下方式:

1.GPIO的输出模式

输入:

信号从IO脚输入,经过保护电路后进入GPIO内部,然后进入上下拉电路,然后分成两部分,上面的是模拟输入(ADC/DAC),下面再分为两部分,上面是复用输入至片上外设,下面进入输入寄存器(IDR),CPU就能读取其中的信号获得信息。

四种输出方式
  (1)推挽输出:

可以输出高、低电平,连接数字器件,驱动能力强,25mA(MAX),通用输出。上下拉电阻关闭,施密特触发器打开,ODR对应位写0时,NMOS管导通,输出低电平,写1则PMOS管导通,输出高电平。

  (2)开漏输出:

输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行。适合于做电流型的驱动,其吸收电流的能力相对强(一般20mA以内)。

  (3)复用推挽输出(4)复用开漏输出:
  复用推挽,复用开漏可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用)

注:【STM32】 浅谈STM32关于GPIO的认识_第2张图片 

【STM32】 浅谈STM32关于GPIO的认识_第3张图片  

 2.GPIO的输入模式

输出:

如果需要输出高电平,就使PMOS管导通,从VDD接进高电平输出3.3V,如果需要输出低电平就使NMOS管导通将VSS(0V)导通至外部。上面的是连接输出寄存器(ODR),可以通过对位清除寄存器(BSRR)对ODR进行读写,也可以直接进行读写操作,然后进行二选一选择器,再进入输出控制器。

四种输入方式
  (1)浮空输入:

浮空输入一般多用于外部按键输入,浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况(高阻态)下,读取该端口的电平是不确定的。


  (2)上拉输入:

用内部上拉,默认为高电平。使用上拉电阻,下拉电阻关闭,施密特触发器打开,模拟输入关闭,引脚悬空时,IO呈现高电平。

  (3)下拉输入:

用内部下拉,默认为低电平。使用下拉电阻,上拉电阻关闭,施密特触发器打开,模拟输入关闭,引脚悬空时,IO呈现低电平。

  (4)模拟输入:

上下拉电阻关闭,施密特触发器关闭,模拟输入打开,专门用于模拟信号输入

3.GPIO的中断 

GPIO中断,指有GPIO模块产生的中断,有边沿触发中断或者电平翻转中断。GPIO模块能检测到引脚上的值是0还是1,并能通过外部拓展将电平从变为1或是从1变到0。CPU接收外部的中断请求,并进行处理,是一个被动接受的过程,这样能保证主任务的执行效率,又能及时获取外部请求,从而处理重要的设备请求中断。当GPIO模块检测到管脚电平变化且满足中断触发条件,就会触发中断,CPU会跳转到中断处理地址进行中断处理,为了避免破坏主任务数据,CPU会处理保存当前相关寄存器并进入中断服务函数,执行完中断服务函数后,CPU会恢复相关寄存器,回到主任务继续执行程序。

4.GPIO的结构图 

【STM32】 浅谈STM32关于GPIO的认识_第4张图片

四. STM32控制器中的GPIO模块 

在STM32控制器中,GPIO模块内包含寄存器和驱动器:

1.GPIO寄存器:

GPIO模块内部有多个寄存器,用于控制GPIO口的工作模式、电平状态、中断控制等。常见的GPIO寄存器包括GPIOx_MODER、GPIOx_ODR、GPIOx_IDR、GPIOx_BSRR等。这些寄存器可以通过编程来进行配置和控制。

Ⅰ.端口配置低寄存器(GPIOx_CRL) (x=A..E)

偏移地址: 0x00
复位值: 0x4444 4444
  【STM32】 浅谈STM32关于GPIO的认识_第5张图片

【STM32】 浅谈STM32关于GPIO的认识_第6张图片

Ⅱ.端口配置高寄存器(GPIOx_CRH) (x=A..E)

偏移地址: 0x04
复位值: 0x4444 4444

 【STM32】 浅谈STM32关于GPIO的认识_第7张图片

 【STM32】 浅谈STM32关于GPIO的认识_第8张图片

 Ⅲ.端口输入数据寄存器(GPIOx_IDR) (x=A..E)

地址偏移: 0x08
复位值: 0x0000 XXXX

【STM32】 浅谈STM32关于GPIO的认识_第9张图片

Ⅳ.端口输出数据寄存器(GPIOx_ODR) (x=A..E) 

地址偏移: 0Ch
复位值: 0x0000 0000
【STM32】 浅谈STM32关于GPIO的认识_第10张图片

 Ⅴ.端口位设置/清除寄存器(GPIOx_BSRR) (x=A..E)

地址偏移: 0x10
复位值: 0x0000 0000
【STM32】 浅谈STM32关于GPIO的认识_第11张图片

 Ⅵ.端口位清除寄存器(GPIOx_BRR) (x=A..E)

地址偏移: 0x14
复位值: 0x0000 0000
【STM32】 浅谈STM32关于GPIO的认识_第12张图片

Ⅶ.端口配置锁定寄存器(GPIOx_LCKR) (x=A..E) 

当执行正确的写序列设置了位 16(LCKK) 时,该寄存器用来锁定端口位的配置。位 [15:0] 用于锁
GPIO 端口的配置。在规定的写入操作期间,不能改变 LCKP[15:0] 。当对相应的端口位执行了
LOCK 序列后,在下次系统复位之前将不能再更改端口位的配置。
每个锁定位锁定控制寄存器 (CRL, CRH) 中相应的 4 个位。
地址偏移: 0x18
复位值: 0x0000 0000

【STM32】 浅谈STM32关于GPIO的认识_第13张图片

【STM32】 浅谈STM32关于GPIO的认识_第14张图片

2.驱动器:

GPIO模块内部的驱动器用于控制GPIO口的电平状态。在STM32控制器中,GPIO口可以输出高电平、低电平或者高阻态,驱动器可以根据寄存器的配置来控制GPIO口的电平状态。常见的GPIO驱动器包括CMOS、TTL等。(STM32是32位的单片机,故STM32内部的寄存器都是32位的,由于端口只有16位,所以寄存器只有低16位对应的有端口,高16位无用)

寄存器和驱动器是GPIO模块内部的两个重要组成部分,它们共同实现了GPIO口的各种功能。通过对GPIO寄存器的配置,可以实现GPIO口的输入、输出、中断控制等操作;通过GPIO驱动器的控制,可以实现GPIO口的电平状态控制。

 五.GPIO的简单应用

1.蜂鸣器

通过配置GPIO引脚为输出模式,设置不同的输入电平和触发方式,以此达到控制蜂鸣器。

例如STM32中的应用:

// 配置GPIO引脚为输出模式
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

// 控制蜂鸣器发声
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET); // 产生声音
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET); // 停止声音
 

2.LED灯 

通过配置GPIO引脚为输出模式,设置不同输出电平,由此达到控制LED灯的点亮熄灭等功能。

例如STM32中的应用:

// 配置GPIO引脚为输出模式
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

// 控制LED灯亮灭
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET); // 点亮LED灯
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET); // 熄灭LED灯
 

除此之外,在STM32控制器中,GPIO口的应用非常广泛。比如,可以使用GPIO口来控制控制继电器的闭合、读取传感器的数据等。同时,GPIO口也可以广泛应用于通信领域,如SPI、I2C、USART等串行通信控制等。其中,GPIO口的引脚复用功能可以实现多重功能,如CAN总线、PWM输出等特殊功能。

六. 总结

综上所述,GPIO是STM32控制器中的一个重要设备,这种通用输入输出口具有可编程性强、电压适应性好、可配置性高、高速性能等特点,在系统设计中具有广泛的应用。相信随着未来科技的不断发展,未来GPIO会有更广阔的应用。

(此文仅是本人一些粗浅的认识与引用,如有错误,烦请指正!)

你可能感兴趣的:(stm32,嵌入式硬件,单片机)