STM32CubeMX+Keil5+Proteus实现按键控制LED灯(入门篇)

本文说明

学生党,之前学习过嵌入式的课程,跟着正点原子的视频一步一步地构建项目的工程,主要是基于标准库的开发,整个过程实在是过于繁琐。想必有的同学也应深有体会。
最近准备开始嵌入式相关的工作,打算使用HAL库进行开发,所以看了许多视频和教程做一个项目,本文主要做一个学习总结。

STM32CubeMX安装和使用

官网安装链接
选择适应自己的系统即可在这里插入图片描述
安装过程就不细谈了,基本上就是一直下一步
打开软件,安装HAL库,这里我们选择在线安装HAL库
在这里插入图片描述

选择所需的芯片包,安装即可。

在这里插入图片描述
这边我已经安装好了,不再细说。

完事之后我们就可以新建我们的工程了

在这里插入图片描述
接着选择我们的芯片,这里要注意选择Proteus8.9(我安装的版本是8.9)里面有的芯片,如下图所示,因为我们之后要在Proteus里仿真

在这里插入图片描述
这里我们搜索STM32F103R6,选择第二种封装方式,双击即可开始我们的工程

在这里插入图片描述
打开之后我们就看到我们所选的芯片和它的引脚图

在这里插入图片描述

这里我想要实现的效果是用一个按键输入控制两个LED灯的亮灭,所以我们就需要一个GPIO输入和两个GPIO输出
这里我选择PA1,PA2位输出引脚,PB0为按键输入引脚,操作方法是点击芯片上PA1(以PA1的设置为例),选择GPIO_Output即可

在这里插入图片描述
然后你可以右键对PA1引脚进行重命名,比如我们命名为LED1,右键然后选择“Enter User Label”,输入名称即可。

在这里插入图片描述
当然这一步完全可以省略233333
然后点击左侧的System Core的下拉框选择GPIO进行GPIO的配置

在这里插入图片描述

依次配置每个端口,包括
GPIO output level(初始化输出电平)
GPIO mode(模式)
GPIO Pull-up/Pull-down(上下拉)
Maximum output speed (输出响应速度)
User Label(用户标签): 标记这个引脚是做什么用的,便于用户理解

这里我们设置初始化两个输出电平为低电平,即灯亮,每个配置项内容如上图所示

在这里插入图片描述

设置按键输入为上拉,如上图所示。
接下来我们设置一下时钟,HSE(高速外部时钟)这一项选择如下图所示

在这里插入图片描述
点击Clock Configuration,选择HSE,然后设置频率为72MHz,如下图

在这里插入图片描述
由于我们是准备进行仿真,所以我们在SYS中选择Debug模式为"No Debug",如下图所示

在这里插入图片描述
接着我们进行项目配置,准备生成项目代码

选择Project Manager,设置项目名,项目地址,选择IDE和对应的版本,这里我们选择MDK-ARM,V5

在这里插入图片描述
最后,我们配置一下Code Generator,勾选生成.c文件或者./文件
完事点击右上角的GENERATE CODE按钮就完成啦!

在这里插入图片描述
代码生成好之后,会给一个按钮,让你定位到项目目录中,然后打开目录中的MDK-ARM文件夹,就看到了熟悉的Keil工程文件

在这里插入图片描述
至此,STM32CubeMX能做的工作就结束了

u1s1,STM32CubeMX很是方便,不用麻烦地构建工程,不用导入各种文件,不用自己写代码设置引脚和GPIO模式等等,用图形工具就帮我们生成IDE就绪项目,接下来我们只要在Keil里面写入我们的逻辑即可

Keil实现按键控制LED亮灭

打开Keil工程,找到main.c文件,在Private user code内写入按键扫描函数

//按键扫描函数
 uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
 {
     /*检测是否有按键按下,按键按下为低电平,即RESET */
     if (HAL_GPIO_ReadPin(GPIOx,GPIO_Pin) == RESET ) {
         /*等待按键释放 */
         while (HAL_GPIO_ReadPin(GPIOx,GPIO_Pin) == RESET);
         return  RESET;
     } else
         return SET;
 }

然后在主函数while循环内写下如下代码

  while (1)
  {
		if(Key_Scan(KEY_GPIO_Port,KEY_Pin) == RESET)
		{
				HAL_GPIO_TogglePin(GPIOA,LED1_Pin|LED2_Pin);    //翻转电平
		}
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

完事编译项目,生成hex文件即可导入Proteus进行仿真了

Proteus仿真

先绘制原理图,找到需要的元件,根据设置好的引脚进行连线即可。
原理图如下图所示

在这里插入图片描述

双击芯片STM32F103R6,导入Keil项目中生成的hex文件,设置主频为72MHz,选择PCB封装包(对应STM32CubeMX选择芯片包那一步),确定即可。

在这里插入图片描述
记得配置一下电源,点击上方 设计–配置供电网,然后配置VCC/VDD
就像这样

在这里插入图片描述
最后我们运行仿真一下,按键按下可以控制LED灯
那么我们的任务就完成了!

(补)Proteus连线问题

如何做到不直接将元件和芯片相连线?
比如上面那张原理图的按钮就没有直接和芯片连线
我们只要找到对应的引脚,点击左键拉出一条线,然后拉到网格的某个点,再次点击左键形成一个黑色的连接结点。

在这里插入图片描述

接着我们右键生成的这条连线,选择"添加网络标号",然后给这条连线添加标签即可

在这里插入图片描述
而为了将按钮和引脚PB0虚拟地连接起来,我们只需要用同样的方法给电源和按钮之间的连线添加同样的标签(即PB0)就好了,详情请看原理图

总结

主要是做一个学习的记录,方便下次查看

我是爱学习的诸葛铁锤,觉得有用的话点个赞哈,啾咪

  • 33
    点赞
  • 192
    收藏
    觉得还不错? 一键收藏
  • 36
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值