0
点赞
收藏
分享

微信扫一扫

【STM32】GPIO!

GPIO

GPIO:General Purpose Input & Output 是通用输入输出端口的简称,简单来说就是软件可控制的引脚, STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能

在这里插入图片描述

GPIO功能描述

STM32芯片最拥有GPIOA、GPIOB..GPIOG等7组端口,每组端口最多拥有Pin0、Pin1...Pin15共16个引脚。 STM32的每个I/O端口都可以自由编程,但I/O端口寄存器必须按32位字被访问。 STM32的每个I/O端口都由7个寄存器来控制 STM32的I/O端口可以由软件配置成8种模式:

  • 推挽输出
  • 模拟输入(AD转换的模拟信号)
  • 开漏输出
  • 浮空输入
  • 推挽式复用功能
  • 下拉输入
  • 开漏式复用功能
  • 上拉输入

上/下拉电阻

  • 开启上拉时,引脚默认电压为高电平
  • 开启下拉时,引脚默认电压为低电平
  • 上拉和下拉不开启时,这种状态我们称为浮空模式

在这里插入图片描述

开启上拉电阻或下拉电阻的作用

STM32内部的上拉其实是一个弱上拉,也就是说通过此上拉电阻输出的电流很小,如果想要输出一个大电流。那么就需要外接上拉电阻了,其实就是增加导线的输出电流。

下拉电阻情况相反,让STM32的CPU引脚输出低电平,结果由于后续电路影响输出的低电平达不到GND。所以接个下拉电阻,其实就是为了降低导线的输出电流。

另外当上下拉电阻都不开启,此时是浮空模式,引脚的电压是不确定的,此模式下的管脚电压会时不时改变。

所以为了防止引脚悬空,产生积累电荷、静电荷,造成电路不稳定。一般情况下,我们都会给引脚设置成上拉或者下拉模式,使它有一个确定的默认电平状态。

以上拉电阻举例,在STM32刚上电的时候,芯片引脚电平是不确定的。特别引脚是接按键的时候,必须给他个确定的电平。下拉电阻的作用就是,强制让电平保持在低电平。

推挽输出

GPIO引脚线路经过两个保护二极管后,向上流向“输入模式”结构,向下流向“输出模式”结构。先看输出模式部分,线路经过一个由P-MOS和N-MOS管组成的单元电路。

在这里插入图片描述 所谓的推挽输出模式,是根据这两个MOS管的工作方式来命名的。在该结构中输入高电平时,经过反向后,上方的P-MOS导通,下方的N-MOS关闭,对外输出高电平;而在该结构中输入低电平时,经过反向后,N-MOS管导通,P-MOS关闭,对外输出低电平。当引脚高低电平切换时,两个管子轮流导通,P管负责灌电流,N管负责拉电流,使其负载能力和开关速度都比普通的方式有很大的提高。推挽输出的低电平为0伏,高电平为3.3伏。

2个GPIO输出的HAL库函数

GPIO电平输出HAL库函数

void HAL _GPIO_ WritePin(GPIO_ _TypeDef* GPIOx, uint16_ t GPIO_ Pin, GPIO_ _PinState PinState);

三个参数:

  • 1- GPIOx: 目标引脚的端口号
  • 2- GPIO_ Pin:目标引脚的引脚号
  • 3- PinState:高电平---GPIO_PIN SET;低电平----GPIO_ PIN_ RESET

例:向PB8引脚输出高电平

HAL_ GPIO WritePin(GPIOB, GPIO_ PIN 8, GPIO_ PIN SET);

GPIO电平翻转HAL库函数

void HAL_ _GPIO_ _TogglePin(GPIO_ TypeDef* GPIOx, uint16_ _t GPIO_ _Pin);

例:将PA3引脚输出电平翻转。

HAL_ GPIO_ TogglePin(GPIOA, GPIO_ PIN 3);

GPIO的重要数据结构和HAL库函数

重要数据结构: 在这里插入图片描述HAL库函数: 在这里插入图片描述

GPIO初始化函数的源码结构

在这里插入图片描述

基于STM32CubeMX的跑马灯

利用STM32CubeMX对STM32芯片的LED控制引脚进行配置 并快速生产项目,在Keil5中进行代码编写,实现跑马灯

具体步骤见:STM32学习笔记1的后半部分

若将逻辑代码改为:

HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
HAL_Delay(500);
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
HAL_Delay(500);

即实现了跑马灯的效果: 在这里插入图片描述 在这里插入图片描述

举报

相关推荐

0 条评论