微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32学习笔记——外部中断EXTI

STM32学习笔记——外部中断EXTI

时间:11-28 来源:互联网 点击:

//所有的端口都有外部中断的能力,为了使用外部中断线,端口必须配置为输入模式

}

voidNVIC_Configuration(void)//配置嵌套向量中断控制器

{

NVIC_InitTypeDefNVIC_InitStructure;//定义初始化NVIC的结构体变量

#ifdefVECT_TAB_RAM

//配置向量表基址

NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);//分配中断向量表

#else

NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);

#endif

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//设置中断优先级

//设置优先级分组:先占优先级和从优先级输入参数设定优先级分组位长度本例中NVIC_PriorityGroup_1:先占优先级1为,从优先级3位

//详见《STM32函数说明》P165

//优先级分组只能设定一次

//EXTI5-9共用一个中断源,EXTI10-15共用一个中断源

//详见详见《STM32函数说明》P166

NVIC_InitStructure.NVIC_IRQChannel=EXTI9_5_IRQChannel;//中断通道指定IRQ通道这里指定外部中断线9-5中断因为使用的是EXTI6

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//设定指定IRQ通道的先占优先级

NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//设定指定IRQ通道的从优先级

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//设定指定IRQ通道中断使能DISABLE失能

NVIC_Init(&NVIC_InitStructure);//根据结构体中指定的参数初始化NVIC中断

}

#ifdefDEBUG

voidassert_failed(u8*file,u32line)

{

while(1)

{

}

}

#endif

stm32f10x_it.c文件中的中断服务函数如下:

voidEXTI9_5_IRQHandler(void)//外线路5-9的中断处理程序

{

if(EXTI_GetITStatus(EXTI_Line6)!=RESET)//检测制定的EXTI6线路触发请求是否发生。

//该函数检查指定的EXTI线路出发请求是否发生

{

//其实就是对PB8取反

GPIO_WriteBit(GPIOB,GPIO_Pin_8,(BitAction)((1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_8))));

//该函数可以对指定的端口位进行操作指定端口和位,然后指定操作。第三个参数指定待写入的值

//该参数必须取枚举类型BitAction的其中一个值,可以是Bit_RESET:清除数据端口位和Bit_SET:设置数据端口位

//GPIO_ReadOutputDataBit()函数读取指定的IO端口管脚的输出,参数指定端口和位

//EXTI_ClearFlag(EXTI_Line6);//清除中断标志位(必须)我在网上看到要求必须,但是在本例中并没有这句

EXTI_ClearITPendingBit(EXTI_Line6);//清除EXTI线路挂起位

}

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top