使用STM32 HAL库进行GPIO控制的实例

 ✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进,

代码获取、问题探讨及文章转载可私信。

 ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

1. 介绍

在基于STM32微控制器的嵌入式系统开发中,GPIO(General Purpose Input/Output)控制是其中最基本、最常见的操作之一。通过使用STM32的HAL库,可以轻松地对GPIO进行配置和控制。本文将演示如何使用STM32 HAL库进行GPIO控制,并提供一个简单的LED控制的实例。

2. 初始化GPIO

2.1 选择合适的引脚

在进行GPIO控制前,首先需要选择合适的引脚来连接外部设备,例如LED或按钮。以STM32F4系列微控制器为例,以下是选择引脚的方式:

```c
// 选择要使用的GPIO引脚
#define LED_PIN GPIO_PIN_13
#define LED_GPIO_PORT GPIOC
```

2.2 GPIO初始化配置

在使用HAL库进行GPIO控制前,需要对GPIO进行初始化配置。以下是一个典型的GPIO初始化的代码片段:

```c
GPIO_InitTypeDef GPIO_InitStruct = {0};// GPIO时钟使能
__HAL_RCC_GPIOC_CLK_ENABLE();// GPIO配置
GPIO_InitStruct.Pin = LED_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);// 初始化GPIO引脚
HAL_GPIO_WritePin(LED_GPIO_PORT, LED_PIN, GPIO_PIN_RESET); // 初始化为低电平
```

以上代码片段中,首先使能了GPIOC的时钟,然后配置了引脚13(对应PC13)为推挽输出模式,并初始化为低电平。

3. 控制GPIO

3.1 控制GPIO输出电平

通过HAL库,可以很方便地控制GPIO的输出电平。以下是一个控制LED输出高低电平的例子:

```c
// 控制LED输出高电平
HAL_GPIO_WritePin(LED_GPIO_PORT, LED_PIN, GPIO_PIN_SET);// 延时一定时间
HAL_Delay(1000);// 控制LED输出低电平
HAL_GPIO_WritePin(LED_GPIO_PORT, LED_PIN, GPIO_PIN_RESET);
```

以上代码通过`HAL_GPIO_WritePin`函数实现了对LED引脚的输出电平控制,从而实现LED的闪烁效果。

3.2 控制GPIO输入状态

可以通过HAL库获取GPIO引脚的输入状态。以下是一个读取按钮状态的例子:

```c
// 读取按钮状态
if (HAL_GPIO_ReadPin(Button_GPIO_PORT, Button_PIN) == GPIO_PIN_SET) {// 按钮被按下
} else {// 按钮未被按下
}
```

4. 中断控制

通过HAL库可以方便地配置GPIO中断,并实现相应的中断处理函数。以下是一个简单的中断配置的例子:

4.1 初始化中断

```c
GPIO_InitTypeDef GPIO_InitStruct = {0};// GPIO时钟使能
__HAL_RCC_GPIOA_CLK_ENABLE();// GPIO配置
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);// 中断使能
HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
```

4.2 中断处理函数

```c
void EXTI0_IRQHandler(void)
{HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
}void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{// 处理GPIO中断
}
```

5. 总结

通过本文的介绍,您应当对如何使用STM32 HAL库进行GPIO控制有了初步的了解。合理配置并控制GPIO,可以实现对外部设备(如LED、按钮等)进行有效的控制和交互,为嵌入式系统的开发提供了基础支持。

嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击这里,0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦。 

​ 点击链接扫码进入嵌入式交流群 ​https://fss.mpay8.cn/article/dmrjinh2C6fjejm

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/208575.shtml

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

相关文章

利用R语言heatmap.2函数进行聚类并画热图

数据聚类然后展示聚类热图是生物信息中组学数据分析的常用方法,在R语言中有很多函数可以实现,譬如heatmap,kmeans等,除此外还有一个用得比较多的就是heatmap.2。最近在网上看到一个笔记文章关于《一步一步学heatmap.2函数》,在此与…

java-两个列表进行比较,判断那些是需要新增的、删除的、和更新的

文章目录 前言两个列表进行比较,判断那些是需要新增的、删除的、和更新的 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差,实…

SpringIOC之@Configuration

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

Django的logging-日志模块的简单使用方法

扩展阅读: Python-Django的“日志功能-日志模块(logging模块)-日志输出”的功能详解 现在有下面的Python代码: # -*- coding: utf-8 -*-def log_out_test(content_out):print(content_out)content1 "i love you01" log_out_test(content1)现…

云服务器Centos中安装Docker

云服务器Centos中安装Docker 1 简介DockerCentosCentos和Ubuntu区别 2 安装3 测试hello-world的镜像测试 1 简介 Docker Docker是一个开源的应用容器引擎,利用操作系统本身已有的机制和特性,可以实现远超传统虚拟机的轻量级虚拟化。它支持将软件编译成…

Windows 12 和 AI 计算机

据商业时报消息 ,微软计划于 2024 年 6 月发布Windows 12。 新版本的操作系统将伴随集成人工智能。 该数据基于广达首席执行官林百里和宏基陈杰森在中国台北医疗科技展上的发言。 虽然这篇文章没有直接引用微软高管的话,但它是根据他们的评论得出的结…

IDEA 社区版 add GitLab Account

问题 IntelliJ IDEA Community Edition 2023.3(社区版)在使用GitLab连接时,使用个人访问令牌出现报错,代码: GraphQL error:[No such type ProjectMember,so it cant be a fraggment condition,Field id doesnt exis…

2023年最新prometheus + grafana搭建和使用

一、安装prometheus 1.1 安装 prometheus官网下载地址 sudo -i mkdir -p /opt/prometheus #移动解压后的文件名到/opt/,并改名prometheus mv prometheus-2.45 /opt/prometheus/ #创建一个专门的prometheus用户: -M 不创建家目录, -s 不让登录 useradd…

Navicat 技术指引 | 适用于 GaussDB 分布式的数据迁移工具

Navicat Premium(16.3.3 Windows 版或以上)正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能,还提供强大的高阶功能(如模型、结…

单例模式---饿汉式、懒汉式

一、什么是单例模式 单例模式,指的是一个类中的对象只能有一个,它在内存中只会创建一次对象的设计模式。 二、饿汉式 public class SingleTon {// 私有的构造方法private SingleTon() {};// 1. 饿汉式private static SingleTon instance new SingleTon…

整数以及浮点数在内存中的存储

一.整数在内存当中的存储 数据在内存中是以十六进制补码的形式进行存储的。 原码表示法简单易懂,适用于乘法,但用原码表示的数进行加减运算比较复杂,当两数相加时,如果同号则数值相加,但是进行减法时要先比较绝对值的…

认知觉醒(六)

认知觉醒(六) 第二节 感性:顶级的成长竟然是“凭感觉” 人类生存于世,比拼的是脑力思维,但极少有人知道,我们的身体里还有一个更高级的系统,若能善用,成就非凡。 1941年,德军对英国本土进行…

目标检测器技术演进简史

引言 目标检测算法的发展已经取得了长足的进步,从早期的计算机视觉方法开始,通过深度学习达到了很高的准确度。在这篇博文中,我们将一起回顾一下这些算法的发展阶段以及现代目标检测系统中使用的主要方法。 我们首先回顾早期传统的目标检测…

大数据技术3:数据仓库的ETL和分层模型

前言:我们先了解一下数据仓库架构的演变过程。 1 、数据仓库定义 数据仓库是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time…

电商系统架构演进

聊聊电商系统架构演进 具体以电子商务网站为例, 展示web应用的架构演变过程。 1.0时代 这个时候是一个web项目里包含了所有的模块,一个数据库里包含了所需要的所有表,这时候网站访问量增加时,首先遇到瓶颈的是应用服务器连接数&a…

深入体验:山海鲸可视化软件的独特魅力

山海鲸可视化软件是一款功能强大的数据可视化工具,作为该软件的资深用户,我深感其独特的魅力和优势。下面,我将从软件特点、操作体验、数据交互和实际应用场景等方面,为大家详细介绍山海鲸可视化软件。 首先,山海鲸可视…

解决Eslint和Prettier关于三元运算符的冲突问题

三元运算符Prettier的格式化 三元运算符Eslint的格式要求 解决办法 // eslint加入配置,屏蔽标红报错indent: [error, 2, { ignoredNodes: [ConditionalExpression] }]效果

Nginx按指定格式记录访问日志

今天突然想起来一个日志的一个东西,因为拉项目无意中看到了日志文件的一些东西,现在不经常做后端了,加上其他的一些原因吧.有时候有些问题也没想太多,马马虎虎就过了,后来想想还是要记录一下这方面的处理过程吧: 一般我们作为开发人员关注的日志只是在应用程序层面的,我们称它…

POJ 3735 Training little cats 动态规划(矩阵的幂)

一、题目大意 我们有N只猫&#xff0c;每次循环进行K次操作&#xff08;N<100&#xff0c;K<100&#xff09;&#xff0c;每次操作可有以下三种选择&#xff1a; 1、g i 给第i只猫1个食物 2、e i 让第i只猫吃完它所有的食物 3、s i j 交换第i和j只猫的食物。 求出M次…

销售技巧培训之如何提高手机销售技巧

销售技巧培训之如何提高手机销售技巧 随着科技的迅速发展&#xff0c;手机已成为我们日常生活中不可或缺的一部分。作为一名手机销售员&#xff0c;了解手机销售技巧是必不可少的。本文将通过案例分析与实践&#xff0c;为你揭示手机销售的奥秘。 一、了解客户需求 在销售过程…