STM32中断自我总结

中断可以简单地分为外部中断定时器中断
按键外部中断是外部中断中的一种,它的步骤是

  1. 配置按键的GPIO
  2. 配置中断线
  3. 配置通道

第一步配置按键的GPIO就是非常基础的操作。先定义一个初始化用结构体,然后使能你要使用的IO口的组号(即ABCD…)对应的时钟,然后给结构体赋值以后塞入GPIO_Init函数就可以了。

static void Key_GPIO_Config()
{
	GPIO_InitTypeDef GPIO_InitStructure;
 
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
 	
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_14;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;	  
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
	GPIO_Init(GPIOD, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_15;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
 	GPIO_Init(GPIOD, &GPIO_InitStructure);
}

第二步配置中断线有几个要注意的问题。首先,使用哪一条中断线?例如是PB6,就必须使用EXTI6也就是中断线6,使用了以后PA6,PC6这些就无法再配置中断了。因为相同标号的GPIO口用的是同一条中断线,也就是只能独占。如果重复设置那么前者就会被覆盖。其次,要选择中断模式,可以选择的中断模式有上升沿进入中断、下降沿进入中断、上升下降沿都进入中断、高电平进入中断和低电平进入中断。
3.配置内嵌向量中断控制器NVIC
第一步,配置哪一条通道?0到4单独自己使用一个通道,而5到9用一个通道,10到15用一个通道。所以例如PB3就应该使用3号通道,PB8使用5到9公用的通道。通道连接的是中断服务函数,所以5到9也就共用一个中断服务函数了,这一般不是我们想要的效果,我们自然想要5到9能单独实现一个功能,所以我们在5~9中要另外判断一下是来自哪个IO口的信号,用几个if语句为不同的IO口实现不同的功能。第二步,配置通道的抢占优先级和响应优先级(使用一般使用分组2)。抢占优先级数值低的优先级越高,一个抢占优先级高的中断会打断优先级比较低的中断或是主函数,任何中断都可以打断主函数。响应优先级(又称次优先级)的意思是说,当两个抢占优先级相同的中断同时出现的时候,那么先执行响应优先级高的那一个,但他们彼此并不会发生互相打断,因为抢占优先级是一样的。

发布了49 篇原创文章 · 获赞 10 · 访问量 9286

猜你喜欢

转载自blog.csdn.net/TengWan_Alunl/article/details/102879573