STM32F4外部中斷設置

基礎知識

1、外部中斷/事件框架: STM32F407一共有16+7條中斷/事件線(如下圖),也就是說在STM32工作過程中同時支持22條外部中斷/事件。
STM32F4中斷
從上圖也可以看出,所有的GPIO口都可以當作外部中斷/事件源。但是同時只能有16條位於不同的GPIO口上的中斷/事件源。
2、中斷/事件源配置: 選擇EXIT0-16中斷/事件線的中斷/事件源在相應的SYSCFG_EXTICRx寄存器裏配置。如配置EXIT0-3中斷/事件線的源寄存器爲下圖:
STM32F4外部中斷配置寄存器
3、中斷與事件: 在這裏我們需要辨識以下中斷與事件的區別:
中斷是需要CPU參與的,需要軟件的中斷服務函數才能完成中斷後產生的結果;
事件是靠脈衝發生器產生一個脈衝,進而由硬件自動完成這個事件產生的結果,當然相應的聯動部件需要先設置好,比如引起DMA操作,AD轉換等;(參考
4、更多關於STM32F407x外部中斷手冊與寄存器可下載(僅是外部中斷部分)

代碼設計

.c代碼
void mpuIntInit(void)
{
	EXTI_InitTypeDef EXTI_InitStruct;
	GPIO_InitTypeDef GPIO_InitStruct;
	NVIC_InitTypeDef NVIC_InitStruct;
	
	//開啓相關時鐘
	RCC_AHB1PeriphClockCmd(MPU_EXIT_RCCPERIPH, ENABLE);
	
	//GPIO設置-下拉輸入
	GPIO_InitStruct.GPIO_Mode 	= GPIO_Mode_IN;
	GPIO_InitStruct.GPIO_OType 	= GPIO_OType_PP;
	GPIO_InitStruct.GPIO_Pin 	= MPU_EXIT_GPIO_PIN;
	GPIO_InitStruct.GPIO_PuPd 	= GPIO_PuPd_DOWN;
	GPIO_InitStruct.GPIO_Speed 	= GPIO_Speed_25MHz;//大於等於50最好開啓IO補償
	GPIO_Init(MPU_EXIT_GPIO, &GPIO_InitStruct);
	
	//EXIT設置-中斷模式上升沿觸發
	EXTI_InitStruct.EXTI_Line 	 = MPU_EXTI_LINE;
	EXTI_InitStruct.EXTI_LineCmd = ENABLE;
	EXTI_InitStruct.EXTI_Mode 	 = EXTI_Mode_Interrupt;
	EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;
	EXTI_Init(&EXTI_InitStruct);
	
	//NVIC設置-中斷配置
	NVIC_InitStruct.NVIC_IRQChannel = MPU_EXIT_IT_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;//最高 
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStruct);
	
	//中斷源配置-PA1
	SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource1);
}


void MPU_EXIT_IT_HANDLER()
{
	if(EXTI_GetITStatus(MPU_EXTI_LINE) == SET)
	{
		EXTI_ClearITPendingBit(MPU_EXTI_LINE);
		printf("coming");
	}
}
.h代碼
#define MPU_EXIT_GPIO			GPIOA
#define MPU_EXIT_GPIO_PIN		GPIO_Pin_1
#define MPU_EXIT_RCCPERIPH		RCC_AHB1Periph_GPIOA
#define MPU_EXTI_LINE			EXTI_Line1
#define MPU_EXIT_IT_IRQn		EXTI1_IRQn
#define MPU_EXIT_IT_HANDLER		EXTI1_IRQHandler
#define MPU_EXTI_PORT_SOURCE	EXTI_PortSourceGPIOA
#define MPU_EXTI_PIN_SOURSE		EXTI_PinSource1

void mpuIntInit(void);
void MPU_EXIT_IT_HANDLER(void);

總結

一般配置外部中斷/事件一般步驟:

1、先配置對應GPIO的時鐘;
RCC_AHB1PeriphClockCmd
2、初始化配置GPIO(根據觸發方式設置上下拉模式);
GPIO_Init
3、初始化配置EXTI中斷線;
EXTI_Init
4、如需中斷則初始化配置NVIC
NVIC_Init
5、設置中斷線的中斷源
SYSCFG_EXTILineConfig

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章