娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

STM32一文通(6) 外部中斷

發布者:SparkStar22最新更新時間:2025-04-07 來源: jianshu關鍵字:STM32  外部中斷  事件控制器 手機看文章 掃描二維碼
隨時隨地手機看文章

一. 外部中斷/事件控制器 (EXTI)

什么是中斷?中斷就是打斷程序執行順序的外部輸入
什么是事件?事件是外部輸入會觸發的事件.比如喚醒

EXTI是專門控制外部中斷/事件的控制器

簡單來講

  • EXTI有20根外部輸入線, 這20根外部中斷線可以選擇特定的一個輸入源給EXTI輸入中斷信號(見下圖)

  • EXTI能設定是中斷還是事件

  • EXTI能控制是上升沿還是下降沿觸發

  • 并能使能/失能

關于20根輸入線:

二. 初始化 EXTI控制器    //EXTI_Init()

使用EXTI要先用RCC初始化 APB2上的AFIO

    //開啟EXTI時鐘
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

我們可以調用進行初始化

這里我們看到一個結構體: EXTI_InitTypeDef

  • EXTI_InitTypeDef的第一個參數: EXTI_Line

  • EXTI_InitTypeDef的第二個參數: EXTI_Mode

  • EXTI_InitTypeDef的第三個參數:EXTI_Trigger

  • EXTI_InitTypeDef的第四個參數:EXTI_LineCmd

可選 ENABLE / DISABLE

三. GPIO引腳配置  GPIO_EXTILineConfig()

上面的函數EXTI_Init()針對特定中斷線進行了初始化
如何選擇特定的GPIO引腳作為中斷線輸入呢?

四. 按鍵中斷全過程

開GPIO時鐘


初始化GPIO


將GPIO管腳與EXTI建立輸入線


開EXTI時鐘


初始化EXTI


選擇的NVIC的解析政策  NVIC_PriorityGroupConfig()


初始化NVIC來接收EXTI傳來的中斷


寫中斷服務函數(在服務函數中要重置中斷)


寫main函數調用初始化函數


接下來是一個完整的按鍵中斷的例子


建立一個psb_exti.h 和一個psb_exti.c 存放exti相關的內容


psb_exti.h


#ifndef __PSB_EXTI_H#define __PSB_EXTI_H#include 'stm32f10x.h'#define K1_GPIO                                         GPIOA#define K1_GPIO_Pin                                 GPIO_Pin_0#define K1_GPIO_CLK                                 RCC_APB2Periph_GPIOA#define K1_EXTI_PortSource                  GPIO_PortSourceGPIOA#define K1_EXTI_PinSource                   GPIO_PinSource0#define K1_EXTI_Line                            EXTI_Line0void KEY1_IRQ_Init(void);#endif  /*__PSB_EXTI_H*/

psb_exti.c.


#include 'psb_exti.h'static void EXTI_NVIC_Config(void)   //加static是為了此方法限定本文件使用{

    NVIC_InitTypeDef NVIC_InitStruct;    //創建結構體

    

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //優先級分組政策選擇中斷組1

    

    NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn; //中斷源選擇: EXTI的0號線中斷

    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;//主優先級

    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 7;//次優先級

    NVIC_InitStruct.NVIC_IRQChannelCmd =ENABLE;    //使能

    

    NVIC_Init(&NVIC_InitStruct);    //初始化}void KEY1_IRQ_Init(void){

    GPIO_InitTypeDef GPIO_InitStruct_K1; //創建一個GPIO_InitTypeDef類型的數據

    EXTI_InitTypeDef EXTI_InitStruct;    //創建一個EXTI_InitTypeDef類型的數據

    

    //初始化EXTI的中斷優先級

    EXTI_NVIC_Config();

    

    //GPIO開時鐘

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //開啟GPIO時鐘

    

    

    //初始化GPIO

    GPIO_InitStruct_K1.GPIO_Pin = K1_GPIO_Pin;   //給這個數據的參數賦值

    GPIO_InitStruct_K1.GPIO_Mode = GPIO_Mode_IN_FLOATING;//給這個數據的參數賦值

    GPIO_InitStruct_K1.GPIO_Speed = GPIO_Speed_50MHz;//給這個數據的參數賦值

    GPIO_Init(K1_GPIO, &GPIO_InitStruct_K1);//初始化外設GPIOx寄存器

    

    //將KEY1的GPIO管腳與EXTI連起來

    GPIO_EXTILineConfig(K1_EXTI_PortSource, K1_EXTI_PinSource);// 將KEY1的GPIO管腳與EXTI連起來

    

    //開啟EXTI時鐘

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

    

    //初始化EXTI的輸入線

    EXTI_InitStruct.EXTI_Line = K1_EXTI_Line;   

    EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;

    EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;

    

    EXTI_Init(& EXTI_InitStruct);}

stm32f10x_it.c


void EXTI0_IRQHandler(void){

    if(EXTI_GetITStatus(EXTI_Line0) != RESET)

    {

        LED_G_TOOGLE    }

    EXTI_ClearITPendingBit(EXTI_Line0);}

main.c

關鍵字:STM32  外部中斷  事件控制器 引用地址:STM32一文通(6) 外部中斷

上一篇:ESP32玩轉MicroPython(一) 燒入固件, 初識
下一篇:意法半導體發布STM32MP23高性價比MPU, 并延長對OpenSTLinux版本的支持期限

推薦閱讀最新更新時間:2025-06-09 09:27

再造STM32---第十五部分:EXTI外部中斷/事件控制器
本章參考資料:《STM32F4xx 中文參考手冊》系統配置控制器以及中斷和事件章節。上一章節我們已經詳細介紹了 NVIC,對 STM32F4xx 中斷管理系統有個全局的了解,我們這章的內容是 NVIC 的實例應用,也是 STM32F4xx 控制器非常重要的一個資源。 學習本章時,配合《STM32F4xx 中文參考手冊》系統配置控制器以及中斷和事件章節一起閱讀,效果會更佳,特別是涉及到寄存器說明的部分。 特別說明,本書內容是以 STM32F42xxx 系列控制器資源講解。 15.1 EXTI 簡介: 外部中斷/事件控制器(EXTI)管理了控制器的 23 個中斷/事件線。每個中斷/事件線都對應
[單片機]
再造STM32---第十五部分:<font color='red'>EXTI</font>—<font color='red'>外部中斷</font>/<font color='red'>事件</font><font color='red'>控制器</font>
基于STM32CubeIDE軟件實現的STM32外部中斷實例
本文用STM32CubeIDE軟件實現STM32外部中斷實例。 新建工程 “File”-“New”-“STM32 Project”。 輸入芯片型號STM32F103ZE。 選擇相應封裝,下一步。 填寫項目名,選擇工程位置,下一步。 配置時鐘、調試模式 選擇高速外部時鐘。 HCLK總線時鐘處輸入72,回車,配置使用最高時鐘頻率。 調試模式選擇串行,方便下載程序。 配置管腳外設 本實例中用到了LED1與KEY_LEFT,找到相應電路圖。 可見LED1對應PC0管腳,低電平點亮。按鍵K1對應PE2管腳,低電平有效。 PC0配置為GPIO_Output,GPIO輸出模式 PE2配置為GPIO_EX
[單片機]
基于STM32CubeIDE軟件實現的<font color='red'>STM32</font><font color='red'>外部中斷</font>實例
stm32 外部中斷 按鍵的誤觸發
最近在調試按鍵作為外部中斷exti進行觸發動作,發現每次按鍵按下和按鍵抬起都會多次進入中斷函數,造成程序不穩定,經過反復調試和查閱資料,最后終于已經把這個問題解決,現在總結一下: 1、EXTI重復配置兩次導致誤觸發中斷的問題 如果重復兩次配置EXTI的話,由于第一次已經打開中斷,當進行第二次配置中斷的時候,會把中斷引腳首先配置成默認引腳,然后在配置成目的引腳,這樣由于默認引腳是低電平,所以在切換的過程中就會進入一次中斷!!具體請參見:http://bbs.elecfans.com/jishu_942011_1_1.html 2、STM32F401 外部中斷誤觸發問題 現象:調試STM32F411低功耗的時候,使用的
[單片機]
STM32外部中斷配置方法講解
01 單片機外部中斷簡介 所謂外部中斷,就是通過外部信號所引起的中斷,如單片機引腳上的電平變化(高電平、低電平)、邊沿變化(上升沿、下降沿)等。51單片機有5個中斷源,其中有兩個是外部中斷,分別為INT0和INT1,INT0被分配在P3.2引腳,INT1被分配在P3.2引腳,也即是說如果使用51單片機的外部中斷0,則必須將信號接在P3.2上,否則無效。 02 舉例說明什么是中斷 單片機在執行程序時有兩種方式: 查詢方式 中斷方式 所謂查詢方式就是單片機一遍一遍的掃描,查看所監視的目標有沒有發生變化,是一種主動式的監視方法,用一個成語可以很客觀的描述:守株待兔。 所謂中斷方式就是單片機不主動去監視
[單片機]
<font color='red'>STM32</font><font color='red'>外部中斷</font>配置方法講解
AT89S51單片機擴充外部中斷源系統的設計
AT89S51為用戶提供兩個外部中斷請求輸入端INT0(的反)和INT1(的反),實際的應用系統中,兩個外部中斷請求源往往不夠用,需對外部中斷源進行擴充。下面介紹一種擴充外部中斷源的方法。 如下圖所示,若系統中有5個外部中斷請求源IR0~IR4,它們均為高電平請求有效,這時可按中斷請求的輕重緩急進行排隊,把其中最高級別的中斷請求源IR0直接接到AT89S51的一個外部中斷請求源IR0輸入端INT0,其余的4個中斷請求源IR1~IR4按下圖所示的方法通過各自的OC門(集電極開路門)連到AT89S51的另一個外中斷源輸入端INT1,同時還連到P1口的P1.0~P1.3腳,供AT89S51查詢。各外部中斷請求源的中斷請求由外部設備的
[單片機]
AT89S51單片機擴充<font color='red'>外部中斷</font>源系統的設計
關于STM32F407的NVIC、EXTI相關入門知識
NVIC與EXTI關系 EXTI是ST公司在其STM32產品上擴展的外中斷控制。它負責管理映射到GPIO引腳上的外中斷和片內幾個集成外設的中斷(PVD,RTC alarm,USB wakeup,ethernet wakeup),以及軟件中斷。其輸出最終被映射到NVIC的相應通道。因此,配置EXTI中斷的過程必然包含對NVIC的配置,例如下面配置EXTI0的過程,就要首先配置EXTI控制器(使能相應的中斷線,選擇中斷/事件模式,觸發邊沿極性),然后再配置NVIC控制器(EXTI0映射在NVIC上的通道號,中斷優先級,中斷屏蔽狀態):------來源于STM32中EXTI(外部中斷)和NVIC(嵌套向量中斷)的關系 - 21ic電子網
[單片機]
關于STM32F407的NVIC、<font color='red'>EXTI</font>相關入門知識
51單片機——外部中斷
一、外部中斷 1.1 中斷 關于中斷的概念在上一篇博客中已經提到了。(傳送門:51單片機入門教程(5)——定時器中斷) 中斷是指計算機運行過程中,出現某些意外情況需主機干預時,機器能自動停止正在運行的程序并轉入處理新情況的程序,處理完畢后又返回原被暫停的程序繼續運行。 51單片機的中斷源優先級與向量號如下表: 1.2 外部中斷 除了定時器中斷外,51單片機還有兩個外部中斷源——外部中斷0、外部中斷1。分別由單片機的12號引腳(INT0/P3.2)、13號(INT1/P3.3)引腳的低電平/負跳變觸發。 和定時器中斷一樣,要使用這兩個外部中斷,首先要進行初始化操作,即寫入相關的寄存器。初始化外部中斷需要寫入下面兩
[單片機]
51單片機——<font color='red'>外部中斷</font>
Tiny4412之外部中斷
一:外部中斷   在之前我們學習按鍵驅動的時候,我們檢測按鍵有沒有按下是通過輪循的方式(也就是我們說的死循環),這樣雖然可以檢測實現按鍵,但太浪費系統資源了,不論我們按鍵中斷有沒有發生,cpu都要一直進行檢測;這樣操作系統就不能做其他事情了,因此這樣肯定是不可取得,因此我們可以通過外部中斷解決它; 要處理一個中斷,我們需要了解模式,而了解模式,有需要了解mmu;在學習這些之后我們就可以返回來處理我們按鍵驅動的時候留下的問題了; 通過之前的按前驅動我們已經了解了按前驅動在板子上的位置以及按鍵的電路圖以及他的引腳作用,下面我們就如何實現這個程序的步驟: 我們知道控制按鍵的寄存器為: 外部中斷對應的是: 0xf =
[單片機]
Tiny4412之<font color='red'>外部中斷</font>
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 长治县| 浑源县| 博野县| 赤峰市| 三河市| 莱阳市| 贞丰县| 渭南市| 康马县| 瓦房店市| 保靖县| 宁蒗| 扎鲁特旗| 阳东县| 若羌县| 无为县| 湛江市| 天柱县| 桂林市| 自贡市| 渝北区| 永德县| 林周县| 广元市| 韩城市| 新郑市| 南康市| 哈尔滨市| 特克斯县| 晋州市| 霍城县| 宕昌县| 铜梁县| 佳木斯市| 佛学| 新竹县| 礼泉县| 蕉岭县| 金坛市| 根河市| 灵川县|