新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32的學(xué)習(xí)心得之外部中斷/事件控制器(EXTI)

STM32的學(xué)習(xí)心得之外部中斷/事件控制器(EXTI)

作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏
外部中斷/事件我的理解是可以將單片機(jī)的IO口全部設(shè)置為外部中斷口,我們可以根據(jù)觸發(fā)哪個(gè)IO口中斷,去執(zhí)行相應(yīng)的中斷處理函數(shù)。這個(gè)其實(shí)很簡(jiǎn)單,51一般有2個(gè)外部中斷口,而stm32將其擴(kuò)展,每個(gè)IO口都可以作為外部中斷口。

外部中斷配置也很簡(jiǎn)單,只需要打開相應(yīng)的IO口配置,時(shí)鐘,打開stm32f10x_conf.h里的 #include "stm32f10x_exti.h" ,配置EXIT和中斷處理函數(shù)即可。下面是簡(jiǎn)單的實(shí)例(基于3.0庫(kù)):

本文引用地址:http://m.butianyuan.cn/article/201611/322971.htm

void GPIO_Configuration(void)//配置GPIOC_5口作為外部中斷口
{

GPIO_InitTypeDefGPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin= GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING ;
GPIO_Init(GPIOC, &GPIO_InitStructure);

}

void EXTI_Configuration(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = EXTI_Line5; //外部中斷線
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中斷模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//中斷觸發(fā)方式
EXTI_InitStructure.EXTI_LineCmd = ENABLE;//打開中斷
EXTI_Init(&EXTI_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource5); //選擇 GPIO管腳用作外部中斷線路

}

void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);// 搶占式優(yōu)先級(jí)別

NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;//指定中斷源
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 指定響應(yīng)優(yōu)先級(jí)別1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

}

//中斷處理函數(shù)

void EXTI9_5_IRQHandler(void)
{

if(EXTI_GetITStatus(EXTI_Line5) != RESET)
{

//添加中斷處理程序

EXTI_CleaRFlag(EXTI_Line5);
EXTI_ClearITPendingBit(EXTI_Line5);

}

}



評(píng)論


技術(shù)專區(qū)

關(guān)閉