当前位置: 首页 > news >正文

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.lryc.cn/news/330726.html

相关文章:

  • DS3231SN
  • tsconfig.json文件翻译
  • 树状数组学习笔记
  • 【bugfix】如何解决svg到线上显示空白或者svg的viewBox为空
  • docker基础学习指令
  • 回溯大学生活
  • Android Fence机制
  • sa-token非Web上下文无法获取Request
  • tomcat 常见优化方案
  • 前端导出文本内容为csv文件,excel乱码
  • 36---USB HUB电路设计
  • FPGA在深度学习领域的应用的优势
  • Windows Edge 兼容性问题修复 基本解决方案
  • 【Servlet】服务器内部转发以及客户端重定向
  • 是否有替代U盘,可安全交换的医院文件摆渡方案?
  • Java设计模式详解:单例模式
  • Pointnet++改进即插即用系列:全网首发OREPA在线重新参数化卷积,替代普通卷积 |即插即用,提升特征提取模块性能
  • XRDP登录ubuntu桌面闪退问题
  • 【Node】使用Node.js构建简单的静态页面生成器
  • AI智能客服机器人是什么?对企业重要吗?
  • InfluxDB2的数据查询示例
  • CSS基础语法-黑马跟课笔记-供记录与查询
  • 「PHP系列」PHP数组排序及运用场景
  • VScode debug python(服务器)
  • 5.11 Vue配置Element UI框架
  • DolphinScheduler on k8s 云原生部署实践
  • JVM将虚拟机分成了哪几块区域?
  • 【热门话题】WebKit架构简介
  • 顶顶通呼叫中心中间件-话术编辑器机器人转人工坐席配置(mod_cti基于FreeSWITCH)
  • 【嵌入式开发 Linux 常用命令系列 8 -- shell 命令 basename 介绍】