STM32(寄存器)学习笔记——实验五:外部中断

储备知识:

(1)STM32F103ZET6(CM3内核)共有256个中断,需要进行管理

首先,要对STM32进行分组,组0~4,同时要对每个中断设置一个抢占优先级响应优先级

(抢占优先级:是指打断其它中断的级别,高的抢占优先级可以打断低的抢占优先级的工作

   相应优先级:是指在抢占属性相同的情况下,当两个中断向量的抢占优先级相同时,

如果两个中断同时到达,则先处理响应优先级高的中断

其级别编号越小,表明它的优先级别越高

寄存器设置函数

MY_NVIC_INIT(抢占,响应,EXIT外部中断引脚口对应分组_IRQn,分组)

(2)设置外部中断触发条件

外部中断触发函数

Ex_NVIC_Config(GPIO_X,引脚口,触发条件(寄存器))

RTIR:上升沿触发

FTIR:下降沿触发
(3)外部中断函数

函数:void EXITx_IRQHandler(void)

引脚口为0,1,2,3,4时

外部中断函数为

void EXIT0(1/2/3/4)_IRQHandler(void)

引脚口为5,6,7,8,9时

外部中断函数为

void EXIT9_5_IRQHandler(void)

引脚口为10,11,12,13,14,15时

外部中断函数为

void EXIT15_10_IRQHandler(void)

编写程序

1、初始化I/O输入。

GPIOA->CRL&=0XFFFFFFF0;	//PA0设置成输入,默认下拉	  
GPIOA->CRL|=0X00000008; 
	  
GPIOE->CRL&=0XFFF00FFF;	//PE3/4设置成输入	  
GPIOE->CRL|=0X00088000; 				   
GPIOE->ODR|=3<<3;	   	//PE3/4 上拉*/

2、开启I/O口复用时钟,设置I/O口与中短线的映射关系

3、初始化线上中断,设置触发条件

Ex_NVIC_Config(GPIO_A,0,RTIR); 	//上升沿触发 Ex_NVIC_Config,4.设置中断分组,并且使能中断MY_NVIC_Init
Ex_NVIC_Config(GPIO_E,3,FTIR); 	//下降沿触发5.设置中断分组
Ex_NVIC_Config(GPIO_E,4,FTIR); 	//下降沿触发

这个函数就完成了2,3步

 4、配置中断分组(NVIC),并使能中断

MY_NVIC_Init(2,3,EXTI0_IRQn,2);	//抢占2,子优先级3,组2  
MY_NVIC_Init(2,1,EXTI3_IRQn,2);	//抢占2,子优先级1,组2	   
MY_NVIC_Init(2,0,EXTI4_IRQn,2);	//抢占2,子优先级0,组2	   

  5、编写中断服务函数

void EXTI0_IRQHandler(void)//EXTI9_5_IRQHandler(void)
{
	delay_ms(10);	//消抖
	if(WK_UP==1)	//WK_UP按键
	{				 
		BEEP=!BEEP;	
	}		 
	EXTI->PR=1<<0;  //清除LINE0上的中断标志位  PR挂起寄存器,1表示外部中断线上发生了选择的边沿事件。通过向该寄存器的对应位写入 1 可以清除该位。
} 
//外部中断3服务程序
void EXTI3_IRQHandler(void)
{
	delay_ms(10);	//消抖
	if(KEY1==0)	 	//按键KEY1
	{				 
		LED1=!LED1;
	}		 
	EXTI->PR=1<<3;  //清除LINE3上的中断标志位  
}
//外部中断4服务程序
void EXTI4_IRQHandler(void)
{
	delay_ms(10);	//消抖
	if(KEY0==0)	 	//按键KEY0
	{
		LED0=!LED0;
		LED1=!LED1;
	}		 
	EXTI->PR=1<<4;  //清除LINE4上的中断标志位  
}		   

PR是EXIT结构体的寄存器,PR为1,清除中断标志位,PR为0
 

 

 

你可能感兴趣的:(#,STM32学习)