当前位置: 首页 > news >正文

STM32之GPIO输出

在 STM32 的开发中,GPIO(通用输入/输出)是一种极其重要且常用的外设资源。无论是用于控制 LED、按键、电机驱动,还是与其他外设之间通信,GPIO 都是实现这些功能的核心接口。


一、示例代码

这是一个在 STM32 HAL 库中非常常见的初始化函数,用于配置 GPIO 引脚为输出模式,并设置相应的参数。

/*** @brief     初始化GPIO引脚(用于LED控制)* @param     无* @retval    无*/
void GPIO_Init(void)
{/* 初始化GPIO结构体,所有成员默认为0 */GPIO_InitTypeDef GPIO_InitStruct = {0};/* 使能 GPIO 端口时钟 */__HAL_RCC_GPIOC_CLK_ENABLE();__HAL_RCC_GPIOF_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();/* 设置GPIOC端口上LED1、LED2、LED3引脚初始状态为高电平 */HAL_GPIO_WritePin(GPIOC, LED1_Pin|LED2_Pin|LED3_Pin, GPIO_PIN_SET);GPIO_InitStruct.Pin = LED1_Pin | LED2_Pin | LED3_Pin;   /* 设置GPIO引脚属性:选择LED1、LED2、LED3引脚 */GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;             /* 设置工作模式为推挽输出 */GPIO_InitStruct.Pull = GPIO_PULLUP;                     /* 设置内部上拉电阻 */GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;            /* 设置输出速度为低速 */HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);                 /* 初始化GPIO引脚,传入端口地址和配置结构体 */
}

二、GPIO_InitStruct参数配置

1、GPIO_InitStruct.Pin

选择要配置的引脚

2、 GPIO_InitStruct.Mode

设置 GPIO 引脚的 工作模式

推挽输出(Output Push Pull)

  • 输入参数:GPIO_MODE_OUTPUT_PP
  • 描述:引脚输出低或高电平,有驱动能力,适用于驱动负载
  • 场景:LED、数码管、外部电路驱动

开漏输出(Output Open Drain)

  • 输入参数:GPIO_MODE_OUTPUT_OD
  • 描述:输出高电平由外部上拉电阻决定,输出低电平由内部施放
  • 场景:可能用于 I2C、逻辑总线

复用推挽输出

  • 输入参数:GPIO_MODE_OUTPUT_PP
  • 描述:GPIO_MODE_OUTPUT_AF_PP
  • 场景:SPI、I2C、UART 通信接口

复用开漏输出

  • 输入参数:GPIO_MODE_OUTPUT_AF_OD
  • 描述:用于通信协议(如 SPI、UART、I2C)等,信号链路由外部上拉
  • 场景:需要外部上拉的通信协议

3、GPIO_InitStruct.Pull

设置 GPIO 引脚的 上拉或下拉电阻

启用上拉电阻

  • 输入参数:GPIO_PULLUP
  • 描述:默认状态为高电平,适用于按钮、传感器等

启用下拉电阻

  • 输入参数:GPIO_PULLUP
  • 描述:默认状态为低电平

无上下拉

  • 输入参数:GPIO_NOPULL
  • 描述:不自动上拉或下拉引脚

4、GPIO_InitStruct.Speed

设置 GPIO 引脚工作速度

低速

  • 输入参数:GPIO_SPEED_FREQ_LOW
  • 描述:最高5MHz

中速

  • 输入参数:GPIO_SPEED_FREQ_MEDIUM
  • 描述:5MHz ~ 25MHz

高速

  • 输入参数:GPIO_SPEED_FREQ_HIGH
  • 描述:25MHz ~ 50MHz

极高速

  • 输入参数:GPIO_SPEED_FREQ_VERY_HIGH
  • 描述:50MHz ~ 120MHz
http://www.jsqmd.com/news/27949/

相关文章:

  • 神秘数据结构手法之区间 LIS
  • 软考九
  • [该退役了]
  • 逆向基础--汇编语言介绍(003)
  • 文档抽取技术的实现原理及其在法律行业的应用价值分析
  • 【算法导论】2分治法
  • c++写得多不如写得少,同样的逻辑写的多报错逆天
  • 整理数学数据结构
  • viewerjs+vue3 using typescript
  • 题解:B4207 [常州市赛 2021] 战士
  • 最小二乘问题详解7:正则化最小二乘
  • 什么是重组蛋白?
  • 代码大全2{3}
  • work3
  • 25.10.31
  • 关于计数
  • 游记2
  • WebRTC实时音视频通信核心原理
  • Python高阶和匿名函数 _ 脱了马甲也要认识
  • 第11天(中等题 滑动窗口)
  • 麒麟 V10系统中离线安装python的setuptools和pip,并使用python代码查询达梦数据库,并上传文件到minio
  • 如何选择陶瓷放电管
  • 10.31每日总结
  • 对称密钥算法 非对称密钥算法 Hash函数 公钥和私钥在网络安全中的应用流程超超超详细,清楚,简单!!!
  • 读《代码大全2》读后感3
  • revit api楼梯创建
  • 《代码大全2》初读有感
  • 代码大全2{2}
  • revit api 几何图元连接
  • 读《代码大全2》读后感2