STM32基于HAL库的开发与应用(2)GPIO口控制

2023-11-13

一、GPIO口是在单片机开发应用中使用最频繁的一个控制。GPIO口可作为输出高低电平也可以作为输入检测输入电平的高低。

(1)通常GPIO口输出控制LED灯、有源蜂鸣器等一些只需要高低电平就可以触发的模块。

(2)通常GPIO口作为输入,用来检测输入电平的高低状态,常用于一些模块在触发时候会输出高低电平时GPIO口输入用来检测(例如:按键开关),也可以用于一些简单通讯,例如在与OpenMv摄像头相连接,当OpenMv摄像头识别到东西设置某个引脚输出高电平,STM32接收到高电平就做出反应。

二、GPIO口在STM32CubeMx中的配置

(1)RCC、SYS、时钟树等基础配置见本系列(1)文章。(4条消息) STM32基于HAL库的开发与应用(1)STM32CubeMx基本配置_老何希望不掉头发的博客-CSDN博客

(2)鼠标左键点击需要设置GPIO口的引脚会出现对应选项,选择input(输入)、output(输出)、EXIT(中断)等不同选项来配置引脚功能。

引脚上拉下拉情况,看对应开发板的原理图,一般是设置开发板自带的LED灯和按键开关时候才需要设置上拉或下拉。当原理图中显示一边接地话就需要上拉,反之接VCC就要下拉。

 (3)设置好了GPIO口功能后,可以在CubeMx左边选项栏打开GPIO选项,可以显示配置的每个引脚名字以及其功能,点击某个引脚,可以设置其初始状态、上拉下拉状态、引脚重命名等。

 完成以上步骤后配置就完成了接下来就是Keil编程。

三、打开Keil文件,打开main.c。

        在编写Keil文件时,类似C语言编程,首先是预编译(例:#include“stdio.h”)我们编写程序都是在int main(viod)中,其中while(1)内是死循环,常用来编写系统功能,保证系统能够一直运行。在while(1)外面通常编写一些初始化、使能函数。(例:打开中断函数等)。

注意:编写代码一定要在USER CODE BEGIN 到UESR CODE END之间,否则在修改CubeMx配置之后代码会被清除

这边例程就是GPIO口开关控制LED灯亮灭

 while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

		if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_9)==1)//对引脚pb9进行读取高低电平
		{
			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);//RESET重置的意思
		}
		else if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_9)==0)
		{
			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);//SET设置的意思
		}
  }
  /* USER CODE END 3 */

四、最后点击编译并烧写。

五、STM32基于HAL库的GPIO控制函数总结

(1)HAL_GPIO_DeInit

功能:这个函数的主要功能是将我们在引脚初始化之后的引脚恢复成默认的状态,即各个寄存器复位时的值。

例:HAL_GPIO_DeInit(GPIOx,GPIO_PIN_X);

(2)HAL_GPIO_EXTI_Callback

功能:这个函数是中断回调函数,可以理解为中断函数具体要响应的动作。

例:HAL_GPIO_EXTI_Callback(GPIO_PIN_X);

(3)HAL_GPIO_EXTI_IRQHandler

功能:这个函数是外部中断服务函数,用来响应外部中断的触发。

例:HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_PIN_X);

(4)HAL_GPIO_Init

功能:这个函数主要用来初始化我们需要用到的引脚的工作模式,包括具体引脚的工作速度、是否复用模式、上下拉等等参数。

例:GPIO_InitTypeDef GPIO_Init_Structure;

GPIO_Init_Structure. Pin = GPIO_PIN_10 | GPIO_PIN_11; //选择对PB10和PB11进行设置

GPIO_Init_Structure. Mode = GPIO_MODE_OUTPUT_OD; //设置输出为上拉模式(PP改为OD为开漏)

GPIO_Init_Structure. Speed = GPIO_SPEED_FREQ_HIGH; //速度设置为高速100M

HAL_GPIO_Init(GPIOB,&GPIO_Init_Structure);

(5)HAL_GPIO_LockPin

功能:使用此函数后,当此引脚电平保持为当前状态,并无法更改。

例:HAL_GPIO_LockPin(GPIOX,GPIO_PIN_X);

(6)HAL_GPIO_ReadPin

功能:检测这个引脚当前状态值,函数返回值为0或1。

例:HAL_GPIO_ReadPin(GPIOX,GPIO_PIN_X);

(7)HAL_GPIO_TogglePin

功能:这个函数用来翻转某个引脚的电平状态。

例:HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_10);

(8)HAL_GPIO_WritePin

功能:这个函数从字面意思来看就是给某个引脚写0或1,但是不要理解成,写1就是使能之类的意思,有些寄存器写1是擦除的意思。

例:

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_SET) //高电平      

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET)//低电平

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32基于HAL库的开发与应用(2)GPIO口控制 的相关文章

  • 软件测试的缺陷管理与分析,粉丝福利拿走不谢

    软件测试过程中提交缺陷是测试工程师最常做的一件事 也是开发工程师解决问题的依据 所以需要对缺陷进行管理和分析 缺陷管理主要是管理从提交缺陷到解决缺陷这一系列的过程 包括流程中角色的变换 缺陷分析主要对测试过程中所发现的缺陷进行分类分析 分析

随机推荐

  • Java学习笔记(十四)

    Java 中的异常处理 在 Java 中 所有的异常都有一个共同的祖先 java lang 包中的 Throwable 类 Throwable 有两个重要的子类 Exception 异常 和 Error 错 误 二者都是 Java 异常处理
  • OSM数据下载及两种格式转换方法(shp等格式)

    OSM数据下载及两种常用的格式转换方法 1 首先打开OSM官网 https www openstreetmap org 2 先注册账号 再选择左上角的 导出 3 点击 手动选择不同的区域 4 导出即可 5 格式准换可以考虑以下两种方法 一是
  • mysql官网安装步骤_MySQL的安装与配置——详细教程

    免安装版的Mysql MySQL关是一种关系数据库管理系统 所使用的 SQL 语言是用于访问数据库的最常用的 标准化语言 其特点为体积小 速度快 总体拥有成本低 尤其是开放源码这一特点 在 Web 应用方面 MySQL 是最好的 RDBMS
  • 2022年度总结 EXI-小洲

    文章目录 一 第一次自我介绍 二 2022我都干了些什么 我的收获 1 大专顺利毕业 2 后端开发辞职 3 第二次代表学校参加江西省职业院校大数据技能大赛 4 专升本考试 5 参加泰迪杯第五届 数据分析技能赛 6 在csdn开始写博文 7
  • 常见渗透测试靶场系统

    常见靶场 DVWA Dam Vulnerable Web Application DVWA是用PHP Mysql编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序 包含了SQL注入 XSS 盲注等常见的一些安全漏洞 链接地址 ht
  • Java中JSON字符串和Java对象的互转

    1 JSON数据和Java对象的相互转换 JSON数据和Java对象的相互转换 JSON解析器 常见的解析器 Jsonlib Gson fastjson jackson 1 Java对象转换JSON 1 使用步骤 1 导入jackson的相
  • python中的库和模块有什么区别_Python中的模块和库之间有什么区别?

    从 The Python Tutorial Modules gt 模块 A module is a file containing Python definitions and statements The file name is the
  • 美团面试官问:写一个你认为最好的单例模式?于是我写了7个

    各位CSDN的朋友 如果喜欢我的文章 记得点个关注 方便以后找到我 由于是刚开始创作 推荐量较低 如果不关注 以后就可能找不到我了 面试题 写一个你认为最好的单例模式 面试考察点 考察目的 单例模式可以考察非常多的基础知识 因此对于这种问题
  • 软考-中级-网络工程师-知识点个人总结(九)

    1 CPU部件 运算器 控制器 寄存器 运算器 算术逻辑运算器 累加器 数据缓冲寄存器 状态条件寄存器 控制器 程序计数器 指令寄存器 指令译码器 时序部件 2 测试依据 测试类型 测试内容 测试依据 黑盒测试 功能测试 对软件的每个功能进
  • 小程序里的alert,Toast

    前言 在小程序中的弹框写法和我们在外面直接用是不一样的 他不支持alert 但是有替代的弹框组件 目录 一 原生小程序 原生小程序api 二 vant中的提示框 官网入口 vant api 一 原生小程序 wx showToast titl
  • C# MSChart 中柱状图和X轴自定义标签

    C 中MSChart 里面曲线 柱状图的样式选择是由 chart Series ChartType SeriesChartType Column 来控制的 SeriesChartType列举出了所有的样式 如果要在X轴上显示自己的文本标签
  • ChatGPT和代码智能

    一 ChatGPT 1 ChatGPT的自我介绍 2 ChatGPT的前世 2 1GPT 3是啥 General Pre Training GPT 即通用预训练语言模型 是一种利用Transformer作为特征抽取器 基于语言模型进行训练的
  • 深入理解Google Cast(三)探寻原理

    如何开发一个receiver application 先来简单说一下这个话题 Receiver本质就是一个网页 由html CSS和jacascript开发 如果要自定义receiver application 需要在 Google Cas
  • LaTeX的斜体,粗体

    参考 LaTeX的斜体 粗体 云 社区 腾讯云 写文章的小伙伴应该知道 在文章中 变量是需要斜体的 那么怎么才是斜体呢 首先 在LATEX中 强调可以以斜体形式展现出来 那么强调命令是如何体现的呢 语法 emph 内容 打开Winedit
  • 【翻译】ASF 法律委员会发布贡献者生成式 AI 指南

    中英文对照版请点击 ASF 法律委员会发布贡献者生成式 AI 指南 中英文对照 查看 除非你在过去一年左右的时间里一直生活在岩石之下 否则你很可能已经听说过很多关于生成式人工智能如何快速发展并正在迅速改变我们所熟知的软件行业的事情 虽然猜测
  • python 利用chinese_calendar 获取上一个工作日日期

    截止文章发布chinese calendar版本为1 8 0 大约在每年的11月份更新次年的节假日新版本 import datetime from chinese calendar import is workday def get per
  • 多线程下事务控制

    我篇文章 大数据批量新增or修改太慢太Low 线程池 CountDownLatch CompletableFuture完美解决 弊端就是无法实现事务控制 那么今天他就来啦 需求 大数据平台去获取数据 gt 通过对象组装 gt 插入到对应的表
  • Hibernate中merge()方法的坑

    标题Hibernate的merge方法的原理网上已经有很多篇文章介绍了 执行merge后 如果传入的对象有ID merge会先去数据库通过ID查 若查到则改 若查不到则增 也就是说 相比直接insert或是update 用merge的实现会
  • 执行kubeadm init 安装kubernetes时报错: [ERROR FileExisting-conntrack]: conntrack not found in system path

    使用kubeadin init安装kubernetes时报如下错误 解决方法 yum y install socat conntrack tools
  • STM32基于HAL库的开发与应用(2)GPIO口控制

    一 GPIO口是在单片机开发应用中使用最频繁的一个控制 GPIO口可作为输出高低电平也可以作为输入检测输入电平的高低 1 通常GPIO口输出控制LED灯 有源蜂鸣器等一些只需要高低电平就可以触发的模块 2 通常GPIO口作为输入 用来检测输