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/…

Codeforces Round 932 (Div. 2)D. Exam in MAC 正难则反,容斥,对顺序求一些值

Problem - D - Codeforces 目录 题意: 思路: 总的对数: xyai: y-x ai: 两个都不符合: 参考代码: 题意: 给你一个n个数的集合a,和整数c 求0~c中有多少对x,y的组合可以使得xy与y-x都不出…

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…

Python 和 Google Colab 从 Sentinel-3 图像下载并可视化地表温度和 NDVI

与 Sentinel-2 和 Landsat 等卫星的光学图像相比,下载和处理 Sentinel-3 图像,尤其是地表温度 (LST) 具有挑战性。这是由于存储数据的特定 NetCDF 格式造成的,并且 LST 值的正确投影需要一些额外的工作。在本教程中,我将在 Google Colab 环境中提供 Python 代码,以便于下载…

贪心算法详解与任务调度问题Demo

任务调度问题Demo 任务调度问题是一类常见的优化问题,其目标是在有限的时间内合理安排任务的执行顺序,以最大化任务的完成数量或满足其他优化目标。在这个Demo中,我们将考虑一个简化版的任务调度问题:有一系列任务,每个…

成为大佬之路--linux软件安装使用第000000032篇--linux docker安装文件系统

总体感受 能用,仅仅是能用,不太好用,ui略丑 安装 docker run -d --restart always -p 10018:8080 -v /Users/ascendking/sofewares/mikochi/data:/data -e DATA_DIR"/data" -e USERNAMEadmin -e PASSWORDadmin zer0tonin/mik…

Qt ini配置文件

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

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

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

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

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

C++笔记(七)--- const

const关键字表示所修饰的变量或函数不可改变 C语言中const 1.const修饰的变量不可改变,故必须定义时初始化2.const修饰函数,表示函数返回值不可更改3.const修饰普通参数,表示参数不可修改4.const修饰的变量不可直接修改,但可以通…

浙大版《数据结构学习与实验指导(第2版)》符号配对

符号配对 题目链接 题目描述 请编写程序检查C语言程序中下列符号是否配对:/* 与 */,(与),[与],{与} 输入描述 输入为一个c语言程序的一部分。当读到某一行中只有一个句点“.”和一个回车时,标志着输入结束。程序中需要检查配对的符号不超过2000个。 输…

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

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

Unity3D 立方体纹理与自制天空盒详解

前言 在Unity3D中,立方体纹理和自制天空盒是常见的技术,它们可以帮助开发者创建出更加真实和引人入胜的游戏场景。本文将详细介绍Unity3D中立方体纹理和自制天空盒的实现方法,希望能帮助读者更好地理解和运用这些技术。 对惹,这…