STM32之GPIO输出

news/2025/10/31 22:38:21/文章来源:https://www.cnblogs.com/lsksp/p/19170395

在 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.mzph.cn/news/952268.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

神秘数据结构手法之区间 LIS

给定 \(1\sim n\) 的排列,\(q\) 次询问,每次查询区间 \([l,r]\) 内的最长上升子序列长度。 \(n \leq 10^5\)。这里只讨论排列的情况,如果不是排列,也容易通过重新编号变成在 LIS 上等价的一排列。 \(O(n\sqrt{n}\ …

软考九

软考九Posted on 2025-10-31 22:31 心默默言 阅读(0) 评论(0) 收藏 举报1. 系统设计2. 数据流图

[该退役了]

[该退役了]好了,最近本来说找队友的,结果教练给我找了上次的那个谁 反正是直接导致黑化的决定性因素,也有记录 但是这个人好像是教练的掌中宝啊,不组队还说我伤害了她,然后就宣告不管我了, 简单讲就是这一波是彻…

逆向基础--汇编语言介绍(003)

逆向基础--汇编语言介绍(003)一.前言汇编语言是直接工作在硬件上的一门编程语言,是除了机器语言外的最低层的编程语言了,学习汇编可以帮助我们更加深入的了解cpu,内存等硬件的工作原理。汇编语言和机器语言一般都是一…

文档抽取技术的实现原理及其在法律行业的应用价值分析

想象一位律师,面对堆积如山的案卷:数千页的交易合同、错综复杂的证据材料、浩如烟海的裁判文书。他必须从中精准找出关键条款、锁定矛盾陈述、串联案件事实。这曾是法律工作的常态,耗时耗力且充满疏漏风险。而今,文…

【算法导论】2分治法

【算法导论】2分治法二分查找 using System;class BinarySearch {// 分治法实现二分查找public static int Search(int[] arr, int target, int left, int right){// 基本情况:查找范围为空if (left > right)retur…

c++写得多不如写得少,同样的逻辑写的多报错逆天

#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<algorithm> #include<vector> #include<map> #include<uno…

整理数学数据结构

#include<bits/stdc++.h>using namespace std;const int N = 1e5 + 5;//树 struct tree{int to[N << 1], nxt[N << 1], hd[N], idx, w[N << 1];void add(int u, int v, int val) { to[++ idx]…

viewerjs+vue3 using typescript

安装包npm install v-viewer viewerjs npm i fontawesome-4.7 npm install @fortawesome/fontawesome-svg-core npm install @fortawesome/free-solid-svg-icons npm install @fortawesome/vue-fontawesome@prerelease…

题解:B4207 [常州市赛 2021] 战士

题解:B4207 [常州市赛 2021] 战士 前言 题目传送门 思路讲解 思路其实很好想,因为怪物的攻击是固定的,所以战士的死亡时间也是固定的,我们就需要通过计算战士每次死亡前能造成的最大伤害如果可以击败怪物,那就直接…

最小二乘问题详解7:正则化最小二乘

本文系统阐述了正则化最小二乘(岭估计)的动机、理论推导、求解方法与数值实例,揭示其通过L2惩罚项改善病态问题和过拟合的机制。1. 引言 在之前的文章《最小二乘问题详解4:非线性最小二乘》、《最小二乘问题详解5:…

什么是重组蛋白?

重组蛋白的定义与基本概念 重组蛋白是指通过基因工程技术,将外源基因导入宿主细胞,利用细胞的生物合成系统表达产生的蛋白质分子。这项技术的核心在于基因重组,即通过人工手段将编码目标蛋白的DNA序列插入表达载体,…

Day9文字颜色

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">…

代码大全2{3}

高质量代码要易理解、易扩展。书中关于类设计、接口定义的原则,结合具体示例讲解如何降低代码耦合度,逻辑清晰且实用性强。“单一职责原则” 避免 “万能类 / 函数”带来的问题,划分职责界限,比如一个 “用户管理”…

work3

这个作业属于哪个课程:https://edu.cnblogs.com/campus/fzu/gjyycx 这个作业要求在哪里: https://edu.cnblogs.com/campus/fzu/gjyycx/homework/13574 学号:102500331 姓名:余武 一.书本第4章4.8编程练习题目中的第…

25.10.31

AGC001D 很早之前看到一度怀疑是错题,然后今天发现我看错题了,原来是说这个序列只包含一种元素啊…… 一个 \(l\) 长的回文串定下了 \(\frac{l}{2}\) 的等价关系,可以视作连边,于是转化出图论模型。 考虑无解是为什…

关于计数

随时施工( 不欢迎来看感觉必须开一个记录计数trick的专栏了,md计数题的式子太e心了(((((

游记2

等出分了,进NOIP了写。

JSON Web Token安全漏洞实战:无需确认令牌验证邮箱与密码重置

本文详细介绍了如何通过篡改JSON Web Token实现邮箱验证绕过、密码重置和账户接管,包含具体的技术操作步骤和漏洞利用方法,展示了JWT在未正确验证签名时的安全风险。玩转JSON Web Token:乐趣与收益并存 大家好,希望…

软考-关于《网络安全法》修订相关题目(10道)

根据2025年10月28日通过的《网络安全法》修改决定,该修正案将于何时正式施行?A. 2025年11月1日 B. 2025年12月1日 C. 2026年1月1日 D. 2026年3月1日 答案:C 解析:文章明确指出"自2026年1月1日起施行"。新…