通用输入输出端口GPIO(HAL库)
创始人
2025-05-28 11:58:17

什么是GPIO

  • 定义:
    GPIO是通用输入输出端口的简称,简单来说就是STM32可控制的引脚STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。
    简单来说我们可以控制GPIO引脚的电平变化,达到我们的各种目的。
  • 命名规则
    组编号+引脚编号
    组编号:GPIOA, GPIOB, GPIOC, GPIOD … GPIOG
    引脚编号:0,1,2,3,4…15
    组合起来:
    PA0, PA1, PA2 … PA15
    PB0, PB1, PB2 … PB15
    PC0, PC1, PC2 … PC15

    有一些特殊功能的引脚是不能用作IO的。
  • 内部框架图
    下图来源于官方参考手册,了解即可。
    在这里插入图片描述
  • 推挽输出与开漏输出
  • 在这里插入图片描述
    推挽输出: 可以真正能真正的输出高电平和低电平
    开漏输出: 开漏输出无法真正输出高电平,即高电平时没有驱动能力,需要借助外部上拉电阻完
    成对外驱动

如何点亮一颗LED灯

在这里插入图片描述
在这里插入图片描述

将PB8或PB9拉低,就可以实现将对应的LED灯点亮。

编程实现点灯

常用的GPIO HAL库函数:

//初始化对应GPIO口
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);
//修改对应端口的状态
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState
PinState);
//反转对应端口状态
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);

结构体 GPIO_InitTypeDef 定义:

typedef struct
{
uint32_t Pin;	//对应引脚
uint32_t Mode;	//模式
uint32_t Pull;	//输入状态,(上拉或者下拉)
uint32_t Speed;	//端口速度
} GPIO_InitTypeDef;

按键点亮LED灯(轮询法)
输入(按键):
– KEY1:PA0
– KEY2:PA1
输出(LED灯):
– LED1:PB8
– LED2:PB9

#define KEY_ON 0
#define KEY_OFF 1
uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{if( HAL_GPIO_ReadPin(GPIOx,GPIO_Pin) == GPIO_PIN_RESET){/* 按键按下 */return KEY_ON;}else{/* 按键松开 */while(HAL_GPIO_ReadPin(GPIOx, GPIO_Pin) == GPIO_PIN_RESET);return KEY_OFF;}
}
while (1)
{/* USER CODE END WHILE */if(Key_Scan(GPIOA,GPIO_PIN_0) == KEY_ON)HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);if(Key_Scan(GPIOA,GPIO_PIN_1) == KEY_ON)HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);/* USER CODE BEGIN 3 */
}

结束

如果对你有帮助,点赞支持一下吧
转载联系作者。

相关内容

热门资讯

2025上半年哪些国内新游最赚... 文 | 点点数据,作者 | April Z转眼间2025年已经过半,根据今年已经发布的《中国游戏产业...
两度易主、三任托管,这一次弘元... 文 | 华夏能源网在第二次破产重整后,“光伏老厂”无锡尚德迎来新一任托管方。华夏能源网(公众号hxn...
“身价暴涨”500%,蜜雪冰城... 文 | 电商在线“入行十年来,第一次见到这么贵的黄柠檬。”近日,“柠檬疯涨似黄金”“柠檬水成本飙升”...
青岛造芯新势力突击“联动”无锡... 7月11日复牌首日,长龄液压(605389.SH)以一字涨停告别两连跌阴霾,股价强势反弹的核心推力,...
对标泡泡玛特?AI玩具厂商的必... 文|执牛耳传媒从产业基础看,AI 玩具凭借场景多元、客群广泛、产业链成熟等优势,早已成为 AI 技术...