天天看点

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

嵌入式HAL库实战项目

    • 本文说明
    • STM32CubeMX安装和使用
    • Keil实现按键控制LED亮灭
    • Proteus仿真
    • (补)Proteus连线问题
    • 总结

本文说明

学生党,之前学习过嵌入式的课程,跟着正点原子的视频一步一步地构建项目的工程,主要是基于标准库的开发,整个过程实在是过于繁琐。想必有的同学也应深有体会。

最近准备开始嵌入式相关的工作,打算使用HAL库进行开发,所以看了许多视频和教程做一个项目,本文主要做一个学习总结。

STM32CubeMX安装和使用

官网安装链接

选择适应自己的系统即可

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

安装过程就不细谈了,基本上就是一直下一步

打开软件,安装HAL库,这里我们选择在线安装HAL库

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

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

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

这边我已经安装好了,不再细说。

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

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

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

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

这里我们搜索STM32F103R6,选择第二种封装方式,双击即可开始我们的工程

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

打开之后我们就看到我们所选的芯片和它的引脚图

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

这里我想要实现的效果是用一个按键输入控制两个LED灯的亮灭,所以我们就需要一个GPIO输入和两个GPIO输出

这里我选择PA1,PA2位输出引脚,PB0为按键输入引脚,操作方法是点击芯片上PA1(以PA1的设置为例),选择GPIO_Output即可

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

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

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

当然这一步完全可以省略233333

然后点击左侧的System Core的下拉框选择GPIO进行GPIO的配置

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

依次配置每个端口,包括

GPIO output level(初始化输出电平)

GPIO mode(模式)

GPIO Pull-up/Pull-down(上下拉)

Maximum output speed (输出响应速度)

User Label(用户标签): 标记这个引脚是做什么用的,便于用户理解

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

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

设置按键输入为上拉,如上图所示。

接下来我们设置一下时钟,HSE(高速外部时钟)这一项选择如下图所示

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

点击Clock Configuration,选择HSE,然后设置频率为72MHz,如下图

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

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

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

接着我们进行项目配置,准备生成项目代码

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

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

最后,我们配置一下Code Generator,勾选生成.c文件或者./文件

完事点击右上角的GENERATE CODE按钮就完成啦!

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

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

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

至此,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仿真

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

原理图如下图所示

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

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

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

记得配置一下电源,点击上方 设计–配置供电网,然后配置VCC/VDD

就像这样

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

最后我们运行仿真一下,按键按下可以控制LED灯

那么我们的任务就完成了!

(补)Proteus连线问题

如何做到不直接将元件和芯片相连线?

比如上面那张原理图的按钮就没有直接和芯片连线

我们只要找到对应的引脚,点击左键拉出一条线,然后拉到网格的某个点,再次点击左键形成一个黑色的连接结点。

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

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

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

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

总结

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

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