其他分享
首页 > 其他分享> > 【STM32Cube】(五)使用 STM32CubeMX初始化NVIC(使用外部中断检测按键)

【STM32Cube】(五)使用 STM32CubeMX初始化NVIC(使用外部中断检测按键)

作者:互联网

1. 准备工作

硬件准备

首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi):
在这里插入图片描述

软件准备

需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码。

2.生成MDK工程 — 初始化GPIO为输入

选择芯片型号

打开STM32CubeMX,打开MCU选择器:

搜索并选中芯片STM32L431RCT6:

配置时钟源

这里我都使用外部时钟:

配置GPIO引脚为外部中断引脚

在原理图上如下:
=
所以接下来我们选择配置PB2引脚和PB3引脚为外部中断触发引脚

因为没有设置硬件上拉,所以我们配置:

配置NVIC设置中断优先级

配置时钟树

STM32L4的最高主频到80M,所以配置PLL,最后使HCLK = 80Mhz即可:

生成工程设置

代码生成设置

最后设置生成独立的初始化文件:

生成代码

点击GENERATE CODE即可生成MDK-V5工程:

3. 在MDK中编写、编译、下载用户代码

STM32CubeMX生成的代码目录


另外,我们还需要LED的支持,所以将之前LED的驱动拷贝过来,并加入到工程中。

查看自动生成的代码

gpio.c中自动生成的初始化代码如下:

stm32l4xx_it.c中生成的中断处理函数如下:

编写中断处理回调函数

在中断处理函数中自动生成了HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2)函数,该函数会自动回调函数:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);

这个函数需要我们自己编写,所以在gpio.c中编写并实现该函数:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	switch(GPIO_Pin)
	{
		case GPIO_PIN_2:
			LED(1);
			break;
		case GPIO_PIN_3:
			LED(0);
			break;
		default:
			break;
	}
}

main.c中的main函数中编写简单的用户代码:

int main(void)
{
  HAL_Init();

  SystemClock_Config();

  LED_init();
  MX_GPIO_Init();
  while (1);
}

然后编译整个工程:

最后进行下载设置:


最后点击下载即可:

实验现象如下:

标签:LED,引脚,中断,代码,STM32CubeMX,生成,NVIC,GPIO,STM32Cube
来源: https://blog.csdn.net/Mculover666/article/details/95938913