STM32 CubeMX 安装与使用入门(二)GPIO的使用,点亮LED使用按键

简介

这篇文章介绍如何使用CubeMx创建一个简单的LED工程,该工程是一个MDK工程,当然也可以使用CubeMx创建基于其他编译器的工程。作为入门,我们的第一个工程仅点亮一个LED。并且在这个工程上进行修改,增加一个按键功能,展示CubeMx修改工程的功能。

硬件准备

笔者使用正点原子战舰V3开发板,使用任何主控是STM32的硬件设备并且带有GPIO控制的LED和按键,就可以,硬件上没有什么限制。

软件准备

  • STM32CubeMx
  • Keil MDK,IAR或类似的编译环境

    实际操作部分

1.生成工程,并点亮LED
2.修改现有工程,将GPIO输入功能,也就是按键功能加入工程

第一部分 新建工程点亮LED

打开CubeMx,选择ACCESS TO SELECTOR
刚安装好第一次点击会进入一个加载页面,他是链接官网更新芯片库的,如果加载时间过长,也可以关闭加载页面,也能直接进入我们下一步要操作的页面


在右上方选择你的硬件装置搭载的芯片,然后在左下方选择你要用的芯片并双击进入下一个页面。

可以通过界面发现,CubeMx工程的配置步骤非常清晰,从左到右分别为引脚与外设配置,时钟树配置,工程相关配置。从上到下也是系统核心功能到外设的配置。最右方的区域用图形化的方式配置相关的引脚。

1.第一步需要配置时钟源,我在这里选用外部晶振作为外部时钟源。左侧选择后,右侧会自动选择外部时钟源要用的引脚

2.根据硬件选择LED使用的引脚,找到pcb的原理图

我使用LED1,发现他的引脚是E5,在CubeMx右方相应位置,左键选择

3.在左方选择GPIO,进行详细配置

User Label可以自己为这个引脚命名,到时候这个命名会出现在代码中易于操作

4.引脚配置完了,接下来配置时钟树

时钟频率,f103zet6最高为72Mhz,通过配置,最后使APB外设的时钟频率达到最高就可以了
5.配置工程相关

有两个地方要注意,生成工程的路径不能有中文,生成的IDE版本要正确,我这里选择的是MDK5.

6.配置完这些步骤后就可以点击GENERATE CODE生成工程了

7.打开工程

1
2
3
4
5
6
7
8
9
10
11
12
13
/* Exported functions prototypes ---------------------------------------------*/
void Error_Handler(void);

/* USER CODE BEGIN EFP */

/* USER CODE END EFP */

/* Private defines -----------------------------------------------------------*/
#define LED1_Pin GPIO_PIN_5
#define LED1_GPIO_Port GPIOE
/* USER CODE BEGIN Private defines */

/* USER CODE END Private defines */

会发现main.h里自动生成了宏定义,到时候可以通过宏定义操作LED

1
2
3
4
5
6
7
8
9
10
11
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */

HAL_Delay(200);
HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
}
/* USER CODE END 3 */

在main.c里编写代码如上,下载程序到硬件上(下载方式自行决定),就可以看到一个闪烁的LED

第二部分,修改工程增加按键

1.在主页面打开刚刚生成的工程

2.根据原理图选择相应的引脚,我这里用的是KEY0

在工程中选择E4引脚

由原理图可知,按键应该上拉,按键的配置如图所示,然后直接点击generate code并打开工程就行了

3.我们会发现原来用户的代码还在,但是CubeMx自动生成了GPIO输入的初始化代码,这样我们只用关心真正的应用代码部分就可以了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
while (1)
{
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */
if( 0 == HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin))
{
HAL_Delay(100);
if( 0 == HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin))
{
HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
}
}


}
/* USER CODE END 3 */
}

使用以上代码,编译下载到硬件中,就可以看到LED随按键的按下而亮灭

总结

这部分内容具体使用了CubeMx创建工程,并初步展示了CubeMx修改工程组件的能力,CubeMx不仅可以添加功能,而且可以更改工程使用的芯片等等。而这些操作都是不会破坏用户层的代码的,这就是CubeMx的强大之处.下一部分我会展示使用CubeMx配置串口功能,并使用GPIO外部中断完成按键功能。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2021 张竞豪的小岛 All Rights Reserved.

UV : | PV :