RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

每一個GPIO如何配置成一個外部中斷觸發(fā)源

2oON_changxuemc ? 來源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2018-01-25 08:44 ? 次閱讀

STM32中斷分組

STM32 的每一個GPIO都能配置成一個外部中斷觸發(fā)源,這點也是 STM32 的強大之處。STM32 通過根據(jù)引腳的序號不同將眾多中斷觸發(fā)源分成不同的組,比如:PA0,PB0,PC0,PD0,PE0,PF0,PG0為第一組,那么依此類推,我們能得出一共有16 組,STM32 規(guī)定,每一組中同時只能有一個中斷觸發(fā)源工作,那么,最多工作的也就是16個外部中斷。STM32F103 的中斷控制器支持 19 個外部中斷/事件請求。每個中斷設(shè)有狀態(tài)位,每個中斷/事件都有獨立的觸發(fā)和屏蔽設(shè)置。STM32F103 的19 個外部中斷為:

線 0~15:對應(yīng)外部 IO 口的輸入中斷。

線 16:連接到 PVD 輸出。

線 17:連接到 RTC 鬧鐘事件。

線 18:連接到 USB 喚醒事件。

外部中斷的配置過程

1.配置觸發(fā)源GPIO口

因為GPIO口作為觸發(fā)源使用,所以將GPIO口配置成輸入模式,觸發(fā)模式有以下幾種:

a.GPIO_Mode_AIN ,模擬輸入(ADC模擬輸入,或者低功耗下省電)

b.GPIO_Mode_IN_FLOATING ,浮空輸入

c.GPIO_Mode_IPD ,帶下拉輸入

d.GPIO_Mode_IPU ,帶上拉輸入

GPIO_InitTypeDef GPIO_InitStructure;//定義結(jié)構(gòu)體

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//使能時鐘

GPIO_InitStructure.GPIO_Pin= GPIO_Pin_2;//選擇IO口 PE2

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//設(shè)置成上拉輸入

GPIO_Init(GPIOE, &GPIO_InitStructure);//使用結(jié)構(gòu)體信息進行初始化IO口

2.使能AFIO復(fù)用時鐘功能

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

3.將GPIO口與中斷線映射起來

GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);

4.中斷線上進行中斷初始化

EXTI_InitTypeDef EXTI_InitStructure;//定義初始化結(jié)構(gòu)體

EXTI_InitStructure.EXTI_Line=EXTI_Line2; //中斷線的標(biāo)號 取值范圍為EXTI_Line0~EXTI_Line15

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中斷模式,可選值為中斷 EXTI_Mode_Interrupt 和事件 EXTI_Mode_Event。

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//觸發(fā)方式,可以是下降沿觸發(fā) EXTI_Trigger_Falling,上升沿觸發(fā) EXTI_Trigger_Rising,或者任意電平(上升沿和

下降沿)觸發(fā)EXTI_Trigger_Rising_Falling

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);//根據(jù)結(jié)構(gòu)體信息進行初始化

5.中斷優(yōu)先級配置

NVIC_InitTypeDef NVIC_InitStructure;//定義結(jié)構(gòu)體

NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; //使能外部中斷所在的通道

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //搶占優(yōu)先級 2,

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //子優(yōu)先級 2

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中斷通道

NVIC_Init(&NVIC_InitStructure); //根據(jù)結(jié)構(gòu)體信息進行優(yōu)先級初始化

6.外部中斷服務(wù)函數(shù)的編寫

外部中斷函數(shù)分別為:

EXPORT EXTI0_IRQHandler

EXPORT EXTI1_IRQHandler

EXPOR T EXTI2_IRQHandler

EXPORT EXTI3_IRQHandler

EXPORT EXTI4_IRQHandler

EXPORT EXTI9_5_IRQHandler

EXPORT EXTI15_10_IRQHandler

中斷線 0-4 每個中斷線對應(yīng)一個中斷函數(shù),中斷線 5-9 共用中斷函數(shù) ,EXTI9_5_IRQHandler,中斷線 10-15 共用中斷函數(shù) EXTI15_10_IRQHandler。

void EXTI2_IRQHandler(void)

{

if(EXTI_GetITStatus(EXTI_Line2)!=RESET)//判斷某個線上的中斷是否發(fā)生

{

中斷邏輯…

EXTI_ClearITPendingBit(EXTI_Line2); //清除 LINE 上的中斷標(biāo)志位

}

}

使用按鍵進行外部中斷的時候,一般都需要進行按鍵延時消抖以及松手檢測的相關(guān)處理,中斷函數(shù)可以參看以下代碼:

void EXTI2_IRQHandler(void)

{

delay_ms(10);//延時消抖

if(KEY2==0) //按鍵真的被按下

{

LED0=!LED0;

}

while(KEY2!=0);//等待松手

EXTI_ClearITPendingBit(EXTI_Line2); //清楚中斷標(biāo)志位

}

當(dāng)然,如果你的按鍵是允許長按功能的,那么就進行別的邏輯操作,這里不作研究。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10895

    瀏覽量

    355721
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1204

    瀏覽量

    52051
  • 外部中斷
    +關(guān)注

    關(guān)注

    1

    文章

    131

    瀏覽量

    15816

原文標(biāo)題:STM32GPIO外部中斷總結(jié)

文章出處:【微信號:changxuemcu,微信公眾號:暢學(xué)單片機】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    做單片機設(shè)計,STM32 GPIO外部中斷你必須知道

    STM32 的每一個GPIO都能配置外部
    的頭像 發(fā)表于 01-05 07:01 ?1.7w次閱讀

    STM32中斷分組及外部中斷配置過程分享

    STM32中斷分組   STM32 的每一個GPIO都能配置
    發(fā)表于 04-08 08:05

    STM32GPIO外部中斷總結(jié)

    1STM32中斷分組STM32 的每一個GPIO都能配置
    發(fā)表于 04-27 18:09

    玩轉(zhuǎn)STM32,GPIO外部中斷你學(xué)懂了嗎?

    、STM32中斷分組:STM32 的每一個GPIO都能配置
    發(fā)表于 05-17 07:00

    STM32中斷分組 精選資料分享

    、STM32中斷分組:  STM32 的每一個GPIO都能配置
    發(fā)表于 08-13 07:16

    STM32的每一個GPIO都能配置外部中斷觸發(fā)源

    STM32 的每一個GPIO都能配置外部
    發(fā)表于 08-13 09:12

    STM32中斷分組

    1STM32中斷分組STM32 的每一個GPIO都能配置
    發(fā)表于 08-13 06:52

    STM32中斷分組

    、STM32中斷分組:   STM32 的每一個GPIO都能配置
    發(fā)表于 08-16 09:09

    STM32之對GPIO外部中斷的理解

    STM32—外部中斷為了對GPIO外部中斷有更好的了解,特此來著總結(jié)與交流。1 STM32中斷
    發(fā)表于 08-16 09:06

    STM32 GPIO外部中斷總結(jié)

    STM32 GPIO外部中斷總結(jié)、STM32中斷分組:STM32 的每一個
    發(fā)表于 08-16 07:37

    什么是外部中斷外部中斷的操作步驟

    ?外部中斷通常是 GPIO 的電平跳變引起的中斷。在 stm32 中,每一個 GPIO 都可以作
    發(fā)表于 08-16 08:43

    STM32 GPIO外部中斷的設(shè)置

    STM32GPIO外部中斷的設(shè)置1.中斷的分組STM32 的每一個GPIO都能
    發(fā)表于 01-13 07:26

    STM32GPIO外部中斷的詳細解析和總結(jié)

    TM32 的每一個GPIO都能配置外部
    的頭像 發(fā)表于 12-18 16:38 ?7.1w次閱讀
    STM32<b class='flag-5'>GPIO</b><b class='flag-5'>外部</b><b class='flag-5'>中斷</b>的詳細解析和總結(jié)

    STM32新手必看 簡單幾步用cubeMX完成按鍵的外部中斷控制燈的亮滅(STM32F103RCT)

    外部中斷通常是 GPIO 的電平跳變引起的中斷。在 stm32 中,每一個 GPIO 都可以作
    發(fā)表于 12-01 15:06 ?8次下載
    STM32新手必看 簡單幾步用cubeMX完成按鍵的<b class='flag-5'>外部</b><b class='flag-5'>中斷</b>控制燈的亮滅(STM32F103RCT)

    STM32如何配置外部中斷?STM32外部中斷配置步驟

    STM32如何配置外部中斷?STM32外部中斷配置步驟? 作為
    的頭像 發(fā)表于 10-26 17:47 ?3525次閱讀
    RM新时代网站-首页