【STM32Cube】(五)使用 STM32CubeMX初始化NVIC(使用外部中断检测按键)
作者:互联网
1. 准备工作
硬件准备
首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi):
软件准备
需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码。
2.生成MDK工程 — 初始化GPIO为输入
选择芯片型号
打开STM32CubeMX,打开MCU选择器:
搜索并选中芯片STM32L431RCT6
:
配置时钟源
- 如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC;
- 如果使用默认内部时钟(HSI),这一步可以略过;
这里我都使用外部时钟:
配置GPIO引脚为外部中断引脚
在原理图上如下:
所以接下来我们选择配置PB2
引脚和PB3
引脚为外部中断触发引脚:
因为没有设置硬件上拉,所以我们配置:
- 下降沿触发中断
- 开启上拉电阻
- 设置用户标签为
KEY1
和KEY2
配置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