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

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

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

STM32基于標(biāo)準(zhǔn)外設(shè)庫(kù)的外部中斷配置

硬件攻城獅 ? 來(lái)源:CSDN博主小麥大叔 ? 2023-11-02 14:13 ? 次閱讀

本文介紹了STM32基于標(biāo)準(zhǔn)外設(shè)庫(kù)的外部中斷配置,以及基于參考手冊(cè)如何更加寄存器配置外部中斷

2 STM32的外部中斷

下圖來(lái)自《STM32參考手冊(cè)》,從整個(gè)架構(gòu)圖可以知道,外部中斷的功能可以配置六個(gè)寄存器;

中斷屏蔽寄存器(EXTI_IMR)

事件屏蔽寄存器(EXTI_EMR)

上升沿觸發(fā)選擇寄存器(EXTI_RTSR)

下降沿觸發(fā)選擇寄存器(EXTI_FTSR)

軟件中斷事件寄存器(EXTI_SWIER)

掛起寄存器(EXTI_PR)

0e286cee-7946-11ee-939d-92fbcf53809c.png

EXTI支持配置20個(gè)中斷和事件屏蔽位;

GPIO端口以下圖的方式連接到16個(gè)外部中斷/事件線上;EXTI_Line0 — EXTI_Line15;

EXTI_Line16 連接到PVD輸出 ;

EXTI_Line17連接到RTC鬧鐘事件;

EXTI_Line18連接到USB喚醒事件;

EXTI_Line19連接到以太網(wǎng)喚醒事件(只適用于互聯(lián)型產(chǎn)品);

GPIO的映射關(guān)系圖如下所示;

0e4be57a-7946-11ee-939d-92fbcf53809c.png

3 中斷服務(wù)函數(shù)的映射關(guān)系

0e67e4b4-7946-11ee-939d-92fbcf53809c.png

4 外部中斷的配置

宏定義,抽象一下接口,方便后面修改;

#define Z_GPIO_PIN GPIO_Pin_5

#define Z_GPIO_PORT GPIOE

#define Z_PortSource GPIO_PortSourceGPIOE

#define Z_PinSource GPIO_PinSource5

#define Z_Line EXTI_Line5

#define Z_IRQ EXTI9_5_IRQn

GPIO的配置;這里GPIO的輸入模式可以配置為浮空輸入(GPIO_Mode_IN_FLOATING),上拉輸入(GPIO_Mode_IPU)或者下拉輸入(GPIO_Mode_IPD),具體如下圖所示;

0e8caace-7946-11ee-939d-92fbcf53809c.png

GPIO的配置代碼如下;

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_StructInit(&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = Z_GPIO_PIN;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(Z_GPIO_PORT, &GPIO_InitStructure);

不要忘記外設(shè)總線時(shí)鐘的配置;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |

RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF |

RCC_APB2Periph_GPIOG, ENABLE);

EXTI的配置,EXTI_Trigger這里支持三種模式;

EXTI_Trigger_Rising 上升沿觸發(fā);

EXTI_Trigger_Falling 下降沿觸發(fā);

EXTI_Trigger_Rising_Falling 上升沿和下降沿都可以觸發(fā);

GPIO_EXTILineConfig(Z_PortSource, Z_PinSource);

EXTI_InitStructure.EXTI_Line = Z_Line;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

NVIC的配置

NVIC_InitStructure.NVIC_IRQChannel = Z_IRQ;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

中斷服務(wù)函數(shù)

void EXTI9_5_IRQHandler(void)

{

//中斷服務(wù)函數(shù)

}

以上就完成了檢測(cè)下降沿信號(hào)的GPIOE5的外部中斷;

也參考官方DEMO,

STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_ExamplesEXTIEXTI_Config。

5 寄存器的操作

以下摘自**《STM32參考手冊(cè)》**

產(chǎn)生產(chǎn)生中斷的步驟,必須先配置好并使能中斷線。根據(jù)需要的邊沿檢測(cè)設(shè)置2個(gè)觸發(fā)寄存器,同時(shí)在**中斷屏蔽寄存器(EXTI_IMR)的相應(yīng)位寫1允許中斷請(qǐng)求。當(dāng)外部中斷線上發(fā)生了期待的邊沿時(shí),將產(chǎn)生一個(gè)中斷請(qǐng)求,對(duì)應(yīng)的掛起位也隨之被置1。在掛起寄存器(EXTI_PR)的對(duì)應(yīng)位寫1,將清除該中斷請(qǐng)求。

產(chǎn)生事件的步驟:必須先配置好并使能事件線。根據(jù)需要的邊沿檢測(cè)通過(guò)設(shè)置2個(gè)觸發(fā)寄存器,同時(shí)在中斷屏蔽寄存器(EXTI_IMR)**的相應(yīng)位寫1允許事件請(qǐng)求。當(dāng)事件線上發(fā)生了需要的邊沿時(shí),將產(chǎn)生一個(gè)事件請(qǐng)求脈沖,對(duì)應(yīng)的掛起位不被置1。通過(guò)在軟件中斷/事件寄存器寫1,也可以通過(guò)軟件產(chǎn)生中斷/事件請(qǐng)求。

中斷屏蔽寄存器(EXTI_IMR)

事件屏蔽寄存器(EXTI_EMR)

上升沿觸發(fā)選擇寄存器(EXTI_RTSR)

下降沿觸發(fā)選擇寄存器(EXTI_FTSR)

軟件中斷事件寄存器(EXTI_SWIER)

掛起寄存器(EXTI_PR)

IMR如下圖所示,其他幾個(gè)類似;

0ea6c7ec-7946-11ee-939d-92fbcf53809c.png

5.1 硬件中斷選擇

通過(guò)下面的過(guò)程來(lái)配置20個(gè)線路做為中斷源:

配置20個(gè)中斷線的屏蔽位(EXTI_IMR)

配置所選中斷線的觸發(fā)選擇位(EXTI_RTSR和EXTI_FTSR);

配置對(duì)應(yīng)到外部中斷控制器(EXTI)的NVIC中斷通道的使能和屏蔽位,使得20個(gè)中斷線中的請(qǐng)求可以被正確地響應(yīng)。

5.2 硬件事件選擇

通過(guò)下面的過(guò)程,可以配置20個(gè)線路為事件源

配置20個(gè)事件線的屏蔽位(EXTI_EMR)

配置事件線的觸發(fā)選擇位(EXTI_RTSR和EXTI_FTSR)

5.3 軟件中斷/事件的選擇

20個(gè)線路可以被配置成軟件中斷/事件線。下面是產(chǎn)生軟件中斷的過(guò)程:

配置20個(gè)中斷/事件線屏蔽位(EXTI_IMR, EXTI_EMR)

設(shè)置軟件中斷寄存器的請(qǐng)求位(EXTI_SWIER)

6 總結(jié)

本文參考stm32手冊(cè)對(duì)于外部中斷的概念以及配置進(jìn)行了介紹,本人能力有限,難免存在錯(cuò)誤和紕漏,請(qǐng)大佬不吝賜教。

審核編輯:湯梓紅

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

    關(guān)注

    31

    文章

    5250

    瀏覽量

    119190
  • STM32
    +關(guān)注

    關(guān)注

    2257

    文章

    10826

    瀏覽量

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

    關(guān)注

    1

    文章

    131

    瀏覽量

    15738
  • EXTI
    +關(guān)注

    關(guān)注

    0

    文章

    27

    瀏覽量

    3642
  • 標(biāo)準(zhǔn)外設(shè)庫(kù)

    關(guān)注

    0

    文章

    16

    瀏覽量

    3517

原文標(biāo)題:STM32 外部中斷詳解(原理+配置代碼)

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32F407 外部中斷配置步驟

    介紹STM32F407外部中斷配置步驟,以按鍵為例,實(shí)現(xiàn)外部中斷
    的頭像 發(fā)表于 07-06 14:31 ?1626次閱讀
    <b class='flag-5'>STM32</b>F407 <b class='flag-5'>外部</b><b class='flag-5'>中斷</b><b class='flag-5'>配置</b>步驟

    STM32基于標(biāo)準(zhǔn)外設(shè)庫(kù)外部中斷配置

    本文介紹了STM32基于標(biāo)準(zhǔn)外設(shè)庫(kù)外部中斷配置,以
    發(fā)表于 08-11 06:23

    STM32標(biāo)準(zhǔn)外設(shè)庫(kù)的文件結(jié)構(gòu)解析

    STM32標(biāo)準(zhǔn)外設(shè)庫(kù)之前的版本也稱固件函數(shù)庫(kù)或簡(jiǎn)稱固件庫(kù),是一個(gè)固件函數(shù)包,它由程序、數(shù)據(jù)結(jié)構(gòu)和
    發(fā)表于 10-17 15:55 ?7422次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>標(biāo)準(zhǔn)</b><b class='flag-5'>外設(shè)</b><b class='flag-5'>庫(kù)</b>的文件結(jié)構(gòu)解析

    STM32標(biāo)準(zhǔn)外設(shè)庫(kù)SPL轉(zhuǎn)換成 Cube LL

    STM32標(biāo)準(zhǔn)外設(shè)庫(kù)SPL轉(zhuǎn)換成Cube LL
    的頭像 發(fā)表于 03-08 12:08 ?3784次閱讀

    STM32四種庫(kù)對(duì)比:寄存器、標(biāo)準(zhǔn)外設(shè)庫(kù)、HAL、LL

    1.我是選擇寄存器開發(fā)STM32,還是標(biāo)準(zhǔn)外設(shè)庫(kù)呢? 2.你有STM32L0標(biāo)準(zhǔn)
    發(fā)表于 03-05 06:17 ?50次下載
    <b class='flag-5'>STM32</b>四種<b class='flag-5'>庫(kù)</b>對(duì)比:寄存器、<b class='flag-5'>標(biāo)準(zhǔn)</b><b class='flag-5'>外設(shè)</b><b class='flag-5'>庫(kù)</b>、HAL、LL

    STM32 外部中斷詳解(原理+配置代碼)

    本文介紹了STM32基于標(biāo)準(zhǔn)外設(shè)庫(kù)外部中斷配置,以
    發(fā)表于 11-24 17:36 ?2次下載
    <b class='flag-5'>STM32</b> <b class='flag-5'>外部</b><b class='flag-5'>中斷</b>詳解(原理+<b class='flag-5'>配置</b>代碼)

    STM32(六)-------中斷外部中斷

    STM32中斷應(yīng)用中斷知識(shí)介紹STM32 中斷應(yīng)用概覽異常NVIC優(yōu)先級(jí)定義中斷知識(shí)介紹
    發(fā)表于 12-04 17:21 ?9次下載
    <b class='flag-5'>STM32</b>(六)-------<b class='flag-5'>中斷</b>(<b class='flag-5'>外部</b><b class='flag-5'>中斷</b>)

    STM32F0x HAL庫(kù)學(xué)習(xí)筆記(8)外部中斷配置

    Package for STM32F0 Series)本文內(nèi)容:STM32CubeMx 配置外部中斷
    發(fā)表于 12-06 11:36 ?14次下載
    <b class='flag-5'>STM32</b>F0x HAL<b class='flag-5'>庫(kù)</b>學(xué)習(xí)筆記(8)<b class='flag-5'>外部</b><b class='flag-5'>中斷</b>的<b class='flag-5'>配置</b>

    STM32f429外部中斷配置解析基于HAL庫(kù)

    STM32f429外部中斷配置解析基于HAL庫(kù)
    發(fā)表于 12-16 16:58 ?9次下載
    <b class='flag-5'>STM32</b>f429<b class='flag-5'>外部</b><b class='flag-5'>中斷</b><b class='flag-5'>配置</b>解析基于HAL<b class='flag-5'>庫(kù)</b>

    STM32 HAL庫(kù) CubeMX教程(四)按鍵外部中斷

    STM32 HAL庫(kù) CubeMX教程(四)外部中斷實(shí)驗(yàn)內(nèi)容NVIC(嵌套向量中斷控制器)外部
    發(fā)表于 01-14 15:11 ?10次下載
    <b class='flag-5'>STM32</b> HAL<b class='flag-5'>庫(kù)</b> CubeMX教程(四)按鍵<b class='flag-5'>外部</b><b class='flag-5'>中斷</b>

    基于STM32CubMX和HAL庫(kù)外設(shè)開發(fā)(七、GPIO作為外部中斷

    基于STM32CubMX和HAL庫(kù)外設(shè)開發(fā)第七講 GPIO作為外部中斷外部
    發(fā)表于 01-14 15:50 ?1次下載
    基于<b class='flag-5'>STM32</b>CubMX和HAL<b class='flag-5'>庫(kù)</b>的<b class='flag-5'>外設(shè)</b>開發(fā)(七、GPIO作為<b class='flag-5'>外部</b><b class='flag-5'>中斷</b>)

    STM32單片機(jī)外部中斷簡(jiǎn)介 STM32單片機(jī)外部中斷配置過(guò)程

    STM32 單片機(jī)是一款高性能、低功耗的 32 位微控制器,具有強(qiáng)大的計(jì)算能力、靈活的外設(shè)模塊以及優(yōu)秀的擴(kuò)展性,開發(fā)周期短、成本低。在單片機(jī)應(yīng)用中,外部中斷是一種重要的硬件觸發(fā)方式,本
    發(fā)表于 08-15 18:21 ?2737次閱讀

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

    STM32如何配置外部中斷STM32外部中斷
    的頭像 發(fā)表于 10-26 17:47 ?3025次閱讀

    stm32f1如何將外部中斷關(guān)掉hal庫(kù)

    Layer)來(lái)簡(jiǎn)化芯片和外設(shè)的驅(qū)動(dòng)開發(fā)。在STM32F1中,外部中斷的關(guān)閉是通過(guò)HAL庫(kù)中的相應(yīng)函數(shù)來(lái)實(shí)現(xiàn)的。下面我將詳細(xì)介紹如何使用HA
    的頭像 發(fā)表于 12-22 13:52 ?2552次閱讀

    STM32F10x標(biāo)準(zhǔn)外設(shè)庫(kù)參考手冊(cè)

    STM32F10x標(biāo)準(zhǔn)外設(shè)庫(kù)參考手冊(cè)
    發(fā)表于 06-24 09:26 ?5次下載