ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-07-15 10:37:47  阅读:1114  来源: 互联网

标签:LED 引脚 中断 代码 STM32CubeMX 生成 NVIC GPIO STM32Cube


1. 准备工作

硬件准备

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

软件准备

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

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

选择芯片型号

打开STM32CubeMX,打开MCU选择器:

搜索并选中芯片STM32L431RCT6:

配置时钟源

  • 如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC;
  • 如果使用默认内部时钟(HSI),这一步可以略过;

这里我都使用外部时钟:

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

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

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

  • 下降沿触发中断
  • 开启上拉电阻
  • 设置用户标签为KEY1KEY2

配置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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有