STM32-03基于HAL库(CubeMX+MDK+Proteus)输入检测案例(按键控制LED)

文章目录

  • 一、功能需求分析
  • 二、Proteus绘制电路原理图
  • 三、STMCubeMX 配置引脚及模式,生成代码
  • 四、MDK打开生成项目,编写HAL库的按键检测代码
  • 五、运行仿真程序,调试代码

一、功能需求分析

搭建完成开发STM32开发环境之后,开始GPIO的学习。上一节已经测试了使用GPIO的输出模式,实现LED点亮的功能。
本次案例实现GPIO的输入检测功能,实现按键状态检测,通过按键状态控制LED。

需求分析:

  1. 接线:PA6-KEY1、PA7-KEY2、PA0-LED1、PA1-LED2;
  2. KEY1控制LED1、KEY2控制LED2;
  3. 按键闭合高电平,断开低电平;
  4. LED为低电平驱动方式。

整体的思路是,通过输入检测获取开关状态,判断开关状态控制输出,实现LED的点亮和熄灭。

二、Proteus绘制电路原理图

Proteus绘制需要对基本元器件的名称有一定了解,如下方的发光二极管LED、电阻RES,可以在网上查找对应的元器件名称列表,方便以后绘制。

绘制电路原理图的步骤:创建画布=》芯片选型及放置=》元器件选型及放置=》连接电路=》修改元器件参数=》仿真运行。

下图为所需元器件清单。
在这里插入图片描述

下图为电路原理图。
在这里插入图片描述

三、STMCubeMX 配置引脚及模式,生成代码

接下来,根据原理图绘制,创建CubeMX项目,配置引脚及工作模式,生成MDK项目代码。

创建项目,在Pinout配置模块,点击PA0,选择GPIO_Output推挽输出模式,同理,配置PA1。
在这里插入图片描述点击PA6,选择输入GPIO_Input模式,同理设置PA7。
在这里插入图片描述

在clock单元,配置系统时钟为72MHz。
在这里插入图片描述在Project单元,填写项目名称、保存路径、IDE和版本。
在这里插入图片描述
在 code generator中,配置添加库的方式为所需库,用户代码在每次项目重新生成时保留。
配置完成,通过以上步骤,完成了2个LED、2个KEY的引脚的模式配置及时钟配置,接下来,点击GENERATE,生成项目代码。
在这里插入图片描述找到生成路径,可以看到项目目录文件。
在这里插入图片描述

四、MDK打开生成项目,编写HAL库的按键检测代码

从上面步骤中,生成了MDK项目。
在MDK-ARM目录中,找到项目快捷方式,打开项目。
以下是我的项目路径:03_KEY\KEY_MDK\KEY\MDK-ARM
在这里插入图片描述
找到main.c文件,在main函数的while循环中,添加如下代码。
此功能代码写在while循环中,使用的是查询扫描方式,这里我们先实现功能,后面会介绍终端扫描方式实现按键检测,从而节约CPU的算力。

代码可以分为两部分,第一部分是获取PA6引脚状态,通过判断控制PA0输出,这里涉及的是KEY1和LED1。
第二部分是获取PA7引脚状态,通过判断控制PA1输出,这里涉及的是KEY2和LED2。

 while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 *///按键KEY1检测key1_stasus = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_6);if(key1_stasus == 0)HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);else if(key1_stasus == 1)HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);//按键KEY2检测key2_stasus = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_7);if(key2_stasus == 0)HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);else if(key2_stasus == 1)HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);}

在项目中勾选生成HEX选项,HEX文件就是MDK编译生成的十六进制文件,作为烧录到开发板的源程序文件使用,当然,这里我们使用仿真,在Proteus中加载HEX即可。
在这里插入图片描述

点击编译程序,生成HEX文件。在编译窗口显示生成了以下信息,则编译成功,保证 0 errors再进行下一步。
在这里插入图片描述

五、运行仿真程序,调试代码

在Proteus中,双击芯片,选择加载程序路径。
03_KEY\KEY_MDK\KEY\MDK-ARM\KEY
上面是我的项目的HEX文件目录路径。

点击仿真按钮,运行程序,查看功能执行结果。
请添加图片描述

可以看到,闭合开关,控制LED点亮,断开开关,控制LED熄灭,功能正常。

代码链接:STM32-03基于HAL库(CubeMX+MDK+Proteus)输入检测案例(按键控制LED)

至此,我们已经完成了STM32的GPIO输入输出案例的编写,后面,会给大家介绍更多的功能。

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

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

相关文章

【Error】log依赖冲突

启动项目报错: 原因: web模块存在两个log依赖,存在冲突 解决方案: 使用依赖分析插件删除多出的依赖:

LabVIEW挖坑指南

一、挖坑指南 1.1、输出变量放在条件框内 错误写法: 现象:如果没进入对应的分支,输出为默认值 正常写法: 让每个分支输出的值都在预料之内。 1.2、统计耗时不准 错误写法 现象:统计出来的耗时是2000ms 正常写法&a…

【Kotlin】委托模式

1 委托模式简介 委托模式的类图结构如下。 对应的 Kotlin 代码如下。 fun main() {var baseImpl BaseImpl()var baseWrapper BaseWrapper(baseImpl)baseWrapper.myFun1() // 打印: BaseImpl, myFun1baseWrapper.myFun2() // 打印: BaseImpl, myFun2 }interface Base {fun my…

Springboot集成knife4j (swagger)

1、添加依赖 在pom.xml 文件中添加 knife4j-spring-boot-starter 的依赖 <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>3.0.3</version> </depe…

LLM - 大语言模型 基于人类反馈的强化学习(RLHF)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/137269049 基于人类反馈的强化学习(RLHF,Reinforcement Learning from Human Feedback),结合 强化学习(RL) 和 人类反馈 来优化模型的性能。这种方法主要包…

day4|gin的中间件和路由分组

中间件其实是一个方法&#xff0c; 在.use就可以调用中间件函数 r : gin.Default()v1 : r.Group("v1")//v1 : r.Group("v1").Use()v1.GET("test", func(c *gin.Context) {fmt.Println("get into the test")c.JSON(200, gin.H{"…

Nginx反向代理和缓存

一、Nginx反向代理 1.调度和代理的区别&#xff1a; 1.调度基于内核层面&#xff0c;代理基于应用层面 2.代理必须实现一手托两家 3.调度不需要监听任何端口&#xff0c;不需要工作任何应用程序&#xff0c;代理需要工作和上游服务器一模一样的进程 4.调度没有并发上限&am…

zabbix图表时间与服务器时间不一致问题

部署完zabbix后&#xff0c;有时候会发现zabbix服务器的时间明明是对的&#xff0c;但是图标的时间不对&#xff0c;通过以下的配置可以快速解决。 登录zabbix-nginx容器 docker exec -u root -it docker-compose-zabbix-zabbix-web-nginx-mysql-1 bash修改php配置文件 vi /e…

【PyTorch][chapter 25][李宏毅深度学习][ CycleGAN]【实战】

前言&#xff1a; 论文中直接提供了GitHub 的代码下载地址 GitHub - junyanz/pytorch-CycleGAN-and-pix2pix: Image-to-Image Translation in PyTorch 这里面简单的解读一下. 目录&#xff1a; 1. 模型参数配置 2&#xff1a; 生成器模型 3&#xff1a; 鉴别器模型 4&#…

golang语言系列:Web框架+路由 之 Gin

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是golang语言学习系列&#xff0c;本篇对Gin框架的基本使用方法进行学习 1.Gin框架是什么 Gin 是一个 Go (Golang) 编写的轻量级 http web 框架&#xff0c;运行速度非常快&#xff0c;如果你是性能和高效的追求者…

区块链web3智能合约开发学习-开发工具Remix(1)

学习区块链中常用语言solidity时&#xff0c;我们会用到特别的开发工具&#xff0c;对于学习前期&#xff0c;建议是将代码写到Remix IDE中进行编译部署和测试&#xff0c;这就是我们编写和交互智能合约的地方&#xff0c; 在线remix编译器&#xff1a; https://remix.ethereu…

【STM32嵌入式系统设计与开发】——15PassiveBeep(无源蜂鸣器应用_GPIO输出状态实现)

这里写目录标题 一、任务描述二、任务实施1、工程文件夹创建2、函数编辑&#xff08;1&#xff09;主函数编辑&#xff08;2&#xff09;USART1初始化函数(usart1_init())&#xff08;3&#xff09;USART数据发送函数&#xff08; USART1_Send_Data&#xff08;&#xff09;&am…

金蝶BI方案的报表,主打做得快、易理解

金蝶做数据分析报表慢、步骤多、数据不够直观&#xff1f;但奥威-金蝶BI方案的报表就不一样了&#xff0c;不仅做得快&#xff0c;还十分好理解&#xff0c;因为它做出来的是随时可以按需自助的BI智能数据可视化分析报表。 有多快&#xff1f; 注册奥威BI SaaS平台&#xff0…

vivado 高级编程功能1

适用于 7 系列、 UltraScale 和 UltraScale FPGA 和 MPSoC 的回读和验证 为 7 系列器件生成已加密文件和已经过身份验证的文件 注释 &#xff1a; 如需获取其它信息 &#xff0c; 请参阅《使用加密确保 7 系列 FPGA 比特流的安全》 ( XAPP1239 ) 。 要生成加密比特流…

视频汇聚/安防监控/EasyCVR平台播放器EasyPlayer更新:新增【性能面板】

视频汇聚/安防监控/视频存储平台EasyCVR基于云边端架构&#xff0c;可以在复杂的网络环境中快速、灵活部署&#xff0c;平台视频能力丰富&#xff0c;可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云…

Mac下Docker Desktop starting的解决方法

记录下自己在新增了一个新的容器后&#xff0c;Disk Size过大导致启动Docker Desktop会一直卡在Docker Desktop starting&#xff0c;并且重启无效的解决方法。该方法无需重新卸载&#xff0c;并且能保留原有的镜像和容器。 一、确认问题 首先确认Docker.raw大小以确认是否和笔…

电商技术揭秘五:电商平台的个性化营销与数据分析

文章目录 引言1. 个性化营销的概念与价值1.1 个性化营销的定义1.1.1 个性化营销的基本概念1.1.2 个性化营销在电商领域的重要性 1.2 个性化营销的核心价值1.2.1 提升用户体验1.2.2 增加转化率和客户忠诚度1.2.3 优化营销资源配置 2. 用户画像与行为分析2.1 用户画像的构建2.1.1…

京东云明修“价格战”,暗渡“政企云”

文&#xff5c;白 鸽 编&#xff5c;王一粟 云计算行业越来越“卷”&#xff0c;一边卷大模型&#xff0c;一边卷价格。 2024 刚一开年&#xff0c;阿里云就宣布百余款产品大降价&#xff0c;最高降幅达55%。在阿里云宣布降价后&#xff0c;京东云紧随其后宣布&#xff0…

华为审核被拒提示: 您的应用存在(最近任务列表隐藏风险活动)的行为,不符合华为应用市场审核标准

应用审核意见&#xff1a; 您的应用存在&#xff08;最近任务列表隐藏风险活动&#xff09;的行为&#xff0c;不符合华为应用市场审核标准。 修改建议&#xff1a;请参考测试结果进行修改。 请参考《审核指南》第2.19相关审核要求&#xff1a;https://developer.huawei.com/c…

游戏引擎之高级动画技术

一、动画混合 当我们拥有各类动画素材&#xff08;clips&#xff09;时&#xff0c;要将它们融合起来成为一套完整的动画。 最经典的例子就是从走的动画自然的过渡到跑的动画。 1.1 线性插值 不同于上节课的LERP&#xff08;同一个clip内不同pose之间&#xff09;&#xff…