什么是中斷?中斷就是打斷程序執行順序的外部輸入 EXTI是專門控制外部中斷/事件的控制器 簡單來講 EXTI有20根外部輸入線, 這20根外部中斷線可以選擇特定的一個輸入源給EXTI輸入中斷信號(見下圖) EXTI能設定是中斷還是事件 EXTI能控制是上升沿還是下降沿觸發 并能使能/失能 關于20根輸入線: 使用EXTI要先用RCC初始化 APB2上的AFIO 我們可以調用進行初始化 這里我們看到一個結構體: EXTI_InitTypeDef EXTI_InitTypeDef的第一個參數: EXTI_Line EXTI_InitTypeDef的第二個參數: EXTI_Mode EXTI_InitTypeDef的第三個參數:EXTI_Trigger EXTI_InitTypeDef的第四個參數:EXTI_LineCmd 可選 ENABLE / DISABLE 上面的函數EXTI_Init()針對特定中斷線進行了初始化 四. 按鍵中斷全過程 開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一. 外部中斷/事件控制器 (EXTI)
什么是事件?事件是外部輸入會觸發的事件.比如喚醒二. 初始化 EXTI控制器 //EXTI_Init()
//開啟EXTI時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
三. GPIO引腳配置 GPIO_EXTILineConfig()
如何選擇特定的GPIO引腳作為中斷線輸入呢?
上一篇:ESP32玩轉MicroPython(一) 燒入固件, 初識
下一篇:意法半導體發布STM32MP23高性價比MPU, 并延長對OpenSTLinux版本的支持期限
推薦閱讀最新更新時間:2025-06-09 09:27







設計資源 培訓 開發板 精華推薦
- LT1172HVCT、5V/1.25A 正降壓轉換器的典型應用
- 【訓練營】四條腿機器狗
- SG3525A 推挽式脈寬調制器控制電路的典型應用
- LT1108CS8-12掌上電腦邏輯電源微功率DC/DC轉換器典型應用電路
- AM2M-1515DH30-NZ ±15 Vout、2W 雙路輸出 DC-DC 轉換器的典型應用
- LTC2945HMS 具有高達 200V 浪涌保護的堅固型 4V 至 70V 高壓側功率監視器的典型應用
- 常用MCU全能燒錄器
- 【航順訓練營】國產航順MCU開發學習板
- LTC3624EMSE-25 5V 輸出電壓、2A 同步降壓型穩壓器的典型應用,具有 1MHz、突發模式操作
- 具有備用電源監控功能的 LTC4420IMSE 18V 雙輸入微電源路徑優先器的典型應用電路
- 方案分享 | ARXML 規則下 ECU 總線通訊與 ADTF 測試方案 方案分享 | ARXML 規則下 ECU 總線通訊與
- 車載SerDes產業起飛!國產新品密集炸場
- 出貨量激增1.34倍! 5G車規模組成標配,三大廠商新品同臺競技
- 6月新能源市場:零跑創新高;比亞迪海外突破;理想滑坡
- 基于中科芯車規MCU的LED矩陣大燈應用方案
- 蘋果被判侵犯3G專利,需向西班牙公司TOT賠償1.1億美元
- 從設計概念到 FPGA 原型僅需數分鐘,印度 InCore 完成 SoC Generator 平臺硅驗證
- 消息稱因難尋客戶,三星推遲美國芯片工廠的完工時間
- BOE(京東方)聯合榮耀打造榮耀Magic V5 以領先LTPO技術打造行業新標桿
- 華為ADS 4發布:多傳感器融合,提升自動駕駛安全性