STM32CUBEMX_外部中断检测按键

实验1:点亮LED
实验2:按键控制LED
实验3:外部中断检测按键
实验4:扩展芯片检测按键
实验5:定时器实现LED闪烁
实验6:基于PWM的呼吸灯
实验7:检测输入的PWM频率和脉宽
实验8:串口的输入和输出
实验9:串口使用PRINTF函数
实验10:SPI接口操作片外FLASH
实验11:SPI接口操作TF卡
实验12:IIC接口操作OLED屏幕
实验13:ADC电压采样

本实验通过配置STM32CUBEMX工具,实现外部中断检测按键,然后控制LED的效果。和实验2的区别在于,实验2需要系统循环检测GPIO的关键状态,耗费系统资源;而实验3通过外部中断检测,配置好之后就可以去做别的事了。

步骤如下:

1、新建工程,进行基本配置。通过点击“ACCESS TO MCU SELECTOR”来创建一个新的工程:

参照实验1,芯片选择“STM32F103C8”。

打开外部时钟,点击“System Core”,选择RCC,在右侧弹出的菜单栏中选择“Crystal/Ceramic Resonator”。

选择调试接口,点击“System Core”,选择RCC。,在右侧弹出的菜单栏中选择“Serial Wire”。

2、配置IO。LED部分和实验2一样,配置PC15,PA1,并命名为D1、D2。

按键部分,分别是PA3和PA4。以PA3为例,找到后,使用鼠标左键点击,在弹出的菜单中选择“GPIO_EXTI3”,配置该管脚的工作模式:

再用鼠标右键点击该管脚,选择“Enter User Label”,在弹出的对话框中输入“KSTA”,然后敲回车。这样,完成了对该管脚工作模式的配置,同时给它起了一个名字“KSTA”方便在程序中进行快捷操作。

PA4同上。

3、配置中断检测边沿。当按键被按下的时候,相应IO上的电平从高电平变成低电平,所以我们需要让中断系统监测的是一个从高到低的跳变,也就是一个下降沿。如图:

位置1选中“GPIO”,位置2选中PA3,位置3分别选择“External Interrupt Mode with Falling edge trigger detection”和“Pull-up”。

PA4同上。

4、中断配置。使能相应中断,如图:

先点击左侧的“NVIC”,然后在右侧的NVIC栏里,选中“EXTI line3 interrupt”和“EXTI line4 interrupt”,确保中断使能被打开。

然后点击“Code generation”,在下图红框位置,确保选中。

5、时钟配置。参照实验1.

6、生成工程。参照实验1的步骤7,进行相应配置,生成工程文件。

7、修改工程。在“/* USER CODE BEGIN 4 */”下面,添加如下代码:

/**
  * @brief  This function handles EXTI interrupt request.
  * @param  GPIO_Pin: Specifies the pins connected EXTI line
  * @retval None
  */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  /* EXTI line interrupt detected */
  if (GPIO_Pin == K_STA_Pin)
  {
    HAL_GPIO_TogglePin(D1_GPIO_Port,D1_Pin);
  }
	
	if(GPIO_Pin == K_SEL_Pin)
	{
		HAL_GPIO_TogglePin(D2_GPIO_Port,D2_Pin);
	}
}

位置如下:

修改后,保存,编译、下载,重新上电,每按一下按键,LED的状态翻转一次。

整个过程有PPT、数据手册、原理图、源码、相关软件,在公众号(单片机爱好者)回复关键词:002或者STM32CUBEMX教程,即可获取下载链接。

留下评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据