CubeMX使用教程(3)——GPIO

在第二章我们完成了点灯仪式,这次我准备尝试把按键和灯结合起来,做一次GPIO的综合测试

 实验任务为:按下按键1(B1),第1个灯(LD1)亮;

                       按下按键2(B2),第2个灯(LD2)亮;

                       按下按键3(B3),第3个灯(LD3)亮,0.5秒后自己熄灭;

                       按下按键4(B4),所有灯(LD1-LD8)亮; 

首先打开CubeMX,新建项目

 

 上面两张图是G431RBT6开发板的LED原理图和按键原理图,因此我们应当把PC8~PC15配置为输出(Output),把PB0PB1PB2PA0配置为输入(Input),并且可以看到原理图中按键的两边分别接了VDD和GND,因此不需要设置输入模式了,上拉输入和下拉输入通常用于确保输入引脚在未连接到明确电源或地的情况下,能够保持一个明确的电平状态。这对于一些数字输入引脚,如按钮或开关输入,可以避免不稳定的状态或漂移。比如在F1系列中,按键有一边状态未明时,需要将其设置为上拉输入。

 

 

 

 

 首先我们在main.c中编写按键扫描函数(写在/* USER CODE BEGIN 0 *//* USER CODE END 0 */ 之间,防止代码被抹去)

/* USER CODE BEGIN 0 */uint8_t Key_Scan(void) //按键扫描函数
{   if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == 0) //PB0 (按键B1)被按下{HAL_Delay(10);//延时消抖if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == 0){while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == 0); //等待按键抬起return 1;//返回1}}if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == 0) //PB1 (按键B2)被按下{HAL_Delay(10);//延时消抖if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == 0){while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == 0); //等待按键抬起return 2;//返回2}}if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2) == 0) //PB2 (按键B3)被按下{HAL_Delay(10);//延时消抖if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2) == 0){while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2) == 0); //等待按键抬起return 3; //返回3}}if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == 0) //PA0 (按键B4)被按下{HAL_Delay(10);//延时消抖if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == 0){while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == 0); //等待按键抬起return 4; //返回4}}return 0; //没有按键按下返回0
}/* USER CODE END 0 */

然后我们在主函数中编写任务需要的程序

在  while (1)中的/* USER CODE BEGIN 3 */后面编写功能函数

int Key_Value = 0;Key_Value = Key_Scan();if(Key_Value == 1) //按键B1被按下{HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, 1);//先关闭所有灯HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, 0);//只打开第1个灯HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);//PD2为锁存器开关,防止灯的状态受到LCD影响}if(Key_Value == 2) //按键B2被按下{HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, 1);//先关闭所有灯HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, 0);//只打开第2个灯HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);//PD2为锁存器开关,防止灯的状态受到LCD影响}if(Key_Value == 3) //按键B3被按下{HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, 1);//先关闭所有灯HAL_GPIO_WritePin(GPIOC, GPIO_PIN_10, 0);//只打开第3个灯HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);//PD2为锁存器开关,防止灯的状态受到LCD影响HAL_Delay(500);//延时500msHAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, 1);//关闭所有灯HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);//PD2为锁存器开关,防止灯的状态受到LCD影响}if(Key_Value == 4) //按键B4被按下{HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, 0);HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);}

编译之后,通过程序烧录软件或者烧录器下载程序,即可完成实验任务

1、B1按下(第一个灯亮)

2、B2按下(第二个灯亮)

3、B3按下(LD3亮0.5s后自动熄灭,图片无法展示效果)

4、B4按下(所有灯都亮)

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

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

相关文章

Vue3.0 vue.js.devtools无法显示Pinia调试工具

之前的配置方式: app.use(createPinia()) app.mount(#app) 更新配置方式: app.use(createPinia()).mount("#app") 设置之后即可显示调试工具

25考研资料PDF汇总

资料V馊public号ZL研知己 V馊public号ZL研知己 25考研资料PDF汇总

PTA L2-015 互评成绩

学生互评作业的简单规则是这样定的:每个人的作业会被k个同学评审,得到k个成绩。系统需要去掉一个最高分和一个最低分,将剩下的分数取平均,就得到这个学生的最后成绩。本题就要求你编写这个互评系统的算分模块。 输入格式&#xf…

好物周刊#44:现代终端工具

https://github.com/cunyu1943 村雨遥的好物周刊,记录每周看到的有价值的信息,主要针对计算机领域,每周五发布。 一、项目 1. Github-Hosts 通过修改 Hosts 解决国内 Github 经常抽风访问不到,每日更新。 2. 餐饮点餐商城 针对…

unity Game视图看不到贴花,但是在Scene视图能看到

解决方法:找到URP的配置文件 ,修改Quality–RederScale为1,就可以了,这是unity 的bug,2022版本以后就没有这个问题了

阿珊带你深入理解 async/await 函数

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Android Framework 通过脚本动态修改应用私有文件执行权限

你只活一次 要悦己 脚本配置 Android_source/device/sprd/***/test/test_chmod.rc service test_chmod /vendor/bin/test_chmod.shuser rootdisabledoneshoton property:sys.test_chmodtruestart test_chmodAndroid_source/device/sprd/***/test/test_chmod.sh #!/system/bin/…

Mysql案例之GROUP_CONCAT函数详解

Hello,大家好,我是灰小猿,一个超会写bug的程序员! 今天这篇文章记录一个最近开发中遇到的mysql实战场景,觉得还挺典型的,就在此做一下记录。 先看一下举例场景: mysql中学生表与学科表通过关…

非线形优化 Matlab和Python (含01规划)

MATLAB:fmincon 在matlab中,一般使用fmincon来解决非线性优化问题 [x,fval,exitflag,output,lambda,grad,hessian]fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) 一般使用: [x,fval,exitflag]fmincon(fun,x0,A,b,Aeq,beq,lb,ub,non…

Qt ini配置文件

ini文件用于保存用户的设置操作,下列以背景颜色设置为例子 暂时默认设置为白色背景 这段代码放置在主窗口的构造函数中,用于初始化读取ini文件 QString color;QSettings *set new QSettings("color.ini",QSettings::IniFormat);set->begi…

销售管理之反向与正向目标控制

在销售活动中,控制力是关键。但控制力其实分为两种:反向控制和正向控制。本文将深入探讨这两种控制方式,并阐述如何在销售活动中加以应用,以提升销售效果。 一、反向控制:以客户为中心,引导客户需求 反向控…

【智能家居入门1之环境信息监测】(STM32、ONENET云平台、微信小程序、HTTP协议)

作为入门本篇只实现微信小程序接收下位机上传的数据,之后会持续发布如下项目:①可以实现微信小程序控制下位机动作,真正意义上的智能家居;②将网络通讯协议换成MQTT协议再实现上述功能,此时的服务器也不再是ONENET&…

ChaosBlade故障注入工具--cpu,内存,磁盘占用\IO,网络注入等

前言: 本文介绍一款开源的故障注入工具chaosblade,该工具原本由阿里研发,现已开源;工具特点:功能强大,使用简单。 该工具故障注入包含:cpu,内存,磁盘io,磁盘…

计算机网络:应用层知识点汇总

文章目录 一、网络应用模型二、域名系统(DNS)三、文本传输协议(FTP)四、电子邮件五、万维网和HTTP协议 一、网络应用模型 p2p也就是对等模型 二、域名系统(DNS) 我们知道,随着人们建立一个网站…

记一次systemd服务启动找不到Java命令

首先systemd服务文件 /etc/systemd/system/test.service(文件简化处理了) [Unit] Descriptiontest Afternetwork.target [Service] ExecStart/opt/test/bin/test_start.sh [Install] WantedBymulti-user.target其中启动命令ExecStart指向的是一个sh启动脚本, 脚本内…

文生视频Sora模型发布,是否引爆AI芯片热潮

文生视频Sora模型发布,是否引爆AI芯片热潮 1. 引言 在人工智能的历史长河中,每一次技术的飞跃都伴随着社会生产力的巨大变革。自2015年以来,深度学习技术的突破性进展,尤其是在自然语言处理、图像识别和机器学习等领域的成功应…

海外IP代理应用:亚马逊使用什么代理IP?

代理IP作为网络活动的有力工具,同时也是跨境电商的必备神器。亚马逊作为跨境电商的头部平台,吸引了大量的跨境电商玩家入驻,想要做好亚马逊,养号、测评都需要代理IP的帮助。那么应该使用什么代理IP呢?如何使用&#xf…

vue el-avatar 使用require提示无法找到图片

报错信息 错误代码 问题分析 vue初始化DOM树时没有挂载数据,导致无法找到模块 解决方案

抖音商家短视频直播流量变现运营SOP地图

【干货资料持续更新,以防走丢】 抖音商家短视频直播流量变现运营SOP地图 部分资料预览 资料部分是网络整理,仅供学习参考。 抖音运营资料合集(完整资料包含以下内容) 目录 【提升短视频运营效率的专业指南】 高效运营&#xf…

1 数据分析概述与职业操守 (3%)

1、 EDIT数字化模型 E——exploration探索 (是什么) 业务运行探索:探索关注企业各项业务的运行状态、各项指标是否合规以及各项业务的具体数据情况等。 D——diagnosis 诊断 (为什么) 问题根源诊断:当业务指标偏离正常值时&…