STM32 · 2024年 9月 26日·56 次浏览 0

(七)Proteus仿真STM32单片机GPIO外部中断

1,在上一节的项目中,增加配置PC14和PC15为EXTI模式

2,在SystemCore->GPIO中配置GPIO14和GPIO15启用内部上拉,并配置配下降沿中断

3,使能GPIO EXTI line[15:10]中断,生成代码

4,重写__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)函数,处理中断源

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  if(GPIO_Pin==GPIO_PIN_14)
	{
		key1_action();
	}
	if(GPIO_Pin==GPIO_PIN_15)
	{
		key2_action();
	}
}

5,修改显示图片切换函数,实现按键切换

static char sel=0;
void disp_pic_switch()
{
	switch(sel)
	{
		case 0:memcpy(dispbuff,pic1,8);break;
		case 1:memcpy(dispbuff,pic2,8);break;
		case 2:memcpy(dispbuff,pic3,8);break;
		case 3:memcpy(dispbuff,pic4,8);break;
		case 4:memcpy(dispbuff,pic5,8);break;
		case 5:memcpy(dispbuff,pic6,8);break;
	}
	//sel++;
	//if(sel>=6)
	//	sel=0;
}
void key1_action()
{
	sel++;
	if(sel>=6)
		sel=0;
}
void key2_action()
{
	if(sel>0)
		sel--;
	else
		sel=5;
}

6,protues内增加2个按键如下图

在STM32中,EXTI0-EXTI15对应GPIO的0-15号引脚。对于某一特定的EXTI线,例如EXTI0,只能选择某一组GPIO(如GPIOA、GPIOB、GPIOC等)的第0号引脚来触发该中断,不能同时使用多个不同组的GPIO0引脚共享同一EXTI线。

举个例子:

  • EXTI0 可以连接到 GPIOA_PIN_0、GPIOB_PIN_0、GPIOC_PIN_0 等,但在一个时间点只能选择其中一个引脚进行配置。

如果需要多个GPIO引脚同时响应中断,通常需要配置不同的EXTI线来分别处理不同的GPIO引脚。

git源码:https://gitee.com/armfun/stm32_proteus