STM32CubeMX笔记-按键触发点灯

举报
JeckXu666 发表于 2021/03/03 23:54:34 2021/03/03
【摘要】 STM32CUBEMX配置中断按键触发

@[toc]

STM32CubeMX笔记-按键触发点灯

一、初始准备

1.硬件平台

使用正点原子STM32F4探索者

IMG_20210207_234256

2.软件平台

STM32CubeMX软件平台

Keil5软件平台

STM32CubeProgrammer下载平台

在这里插入图片描述

二、操作步骤

1.CubeMX生成初始化代码

  • 芯片选择

打开Cube软件,点击MCU选择

在这里插入图片描述

F4探索者的主控为STM32F407ZET6,所以在搜索框找到STM32F407ZE后点击具体芯片,再开始工程

在这里插入图片描述

  • 配置时钟源

我们点开SystemCore(系统内核设置),再点击RCC配置HSE和LSE时钟源,这里我都选择使用外部时钟,配置后,我们可以看到右边芯片引脚分配图的两个时钟源引脚点亮,表示配置完成

在这里插入图片描述

  • 配置时钟树

我们进入ClockConfiguration配置时钟树,使时钟的输入路径和大小符合我们预期,精英板的晶振和时钟倍频如下

在这里插入图片描述

一般配置正确时颜色蓝白为主,配置错误时则会出现紫色,提示我们要修改值

在这里插入图片描述

  • 配置LED

时钟正常工作后我们就要配置板上GPIO引脚,查询探索者原理图,我们可以看到,LED的GPIO原理图如下,分别使用了PF9和PF10

在这里插入图片描述

我们在引脚分配图内找到LED引脚,点击配置他们输出

在这里插入图片描述

GPIO配置并未结束,我们进入SystemCore的GPIO内,再进一步配置这两个管脚,选择我们要配置的管脚,软件出现配置项(Configuration),每个配置项对应的含义如下:

  1. GPIO Outpu Level:初始上电默认输出电平,我们选默认高电平
  2. GPIO Mode:GPIO口工作模式,这里选的推挽输出
  3. GPIO Pull-up/Pull-down:GPIO口的上下拉选择,我们选上拉
  4. Maximum output speed:IO口输出速率,选高
  5. User Label:软件生成代码的IO口宏定义名称,设置后可以方便移植

在这里插入图片描述

  • 按键GPIO配置:

我们使用到KEY0、KEY1和KEY2

按键使用的的引脚如下

在这里插入图片描述

按键触发如下原理图所示,下降沿触发

在这里插入图片描述

我们在工程引脚分配找到PE2、3、4设置为对应的中断引脚

在这里插入图片描述

三个引脚设置完成后,进入GPIO依次对三个中断引脚进行详细配置,详细配置如下,GPIO mode用来设置外部中断触发方法,上升沿触发还是下降沿触发还是双边沿触发,这里我们选择的是外部中断下降沿触发;GPIO Pull-up/Pull-down用来设置是默认上拉还是下拉;User Label:软件生成代码的IO口宏定义名称,设置后可以方便移植:

在这里插入图片描述

中断详细配置完成,点击NVIC中断管理,先进行整体中断分组,在使能我们使用到的中断,配置对应中断的主从优先级,这里我分配的都是2

在这里插入图片描述

  • 生成工程代码

配置生成工程的名字,存储路径以及编译器,这里我们选MDK-ARM(Keil被收购后改名)

在这里插入图片描述

配置生成选项,主要为下面三大块,第一个我们选择只拷贝必要的库,第二个选择为每个外设生成.c和.h文件,保存之前的用户代码,以及删除之前的生成代码,第三个不选择

PS:用户代码段是一下注释之间的代码

/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

在这里插入图片描述

最后点击生成代码

在这里插入图片描述

然后我们打开代码工程,如下:

在这里插入图片描述

我们可以在main.h里面看到我们定义的端口

在这里插入图片描述

2.Keil编写按键中断回调函数

点开stm32f4xx_it.c会看到每个外部中断内部都调用了一个回调函数,并传入触发中断的IO引脚

在这里插入图片描述

这个回调函数是一个weak定义函数,我们可以再次定义,通过判断传入的引脚来分辨哪一根中断线发生中断,进一步配置中断,我们点击main.c,在如下位置注释中间插入自己编写的回调函数代码,判断IO口,使按键0和1分边点亮LED灯,按键2清除所有LED灯状态。

在这里插入图片描述

回调函数代码:在进入回调函数后,先延时50ms,在根据传入引脚再次判断中断线上电平是否拉低,仍然为低则代表按键触发,执行点灯或者灭灯操作,代码简单如下

/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	HAL_Delay(50); //消抖
	switch(GPIO_Pin)
	{
		case GPIO_PIN_2:
			if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==0)
			{
				HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);
				HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,GPIO_PIN_SET);
			}
		break;
		case GPIO_PIN_3:
			if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==0)
			{
				HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);
			}
		break;
		case GPIO_PIN_4:
			if(HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin)==0)
			{
				HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,GPIO_PIN_RESET);
			}
		break;
	}
}
/* USER CODE END 4 */

添加后我们编译一下,编译通过如下:

在这里插入图片描述

3.程序下载,观察现象

程序下载我一般用两种方式:

第一种是使用MDK自带的下载环境下载程序,我们给单片机连接ST-Link后配置下载,点击魔术棒,选择debug

在这里插入图片描述

选择ST-link后,点击setting

在这里插入图片描述

添加对应F4的Flash

在这里插入图片描述

keil界面点击下载

在这里插入图片描述

第二种是使用Stm32Programmer下载软件,该下载软件下载方式多,下载快,下面我使用st-link下载

打开软件,点击connect左边选择stlink后再点击connect连接下载器

在这里插入图片描述

点击open file,找到工程路径下MDK文件夹下工程生成的hex文件

在这里插入图片描述

之后点击downlo下载,下载结果如下

在这里插入图片描述

按一下复位后按下key0出现如下现象,代码完成:

img

三、源码仓库

Github链接:link

文章源站-我的个人博客

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。