以下是一份 STM32 GPIO 中斷配置的中文教程,基于標(biāo)準(zhǔn)庫(Standard Peripheral Library)和HAL庫兩種常見開發(fā)方式:
一、GPIO中斷基本概念
GPIO中斷用于在外部電平變化時(shí)觸發(fā)CPU中斷,常見應(yīng)用場景:按鍵檢測、外部信號觸發(fā)等。配置關(guān)鍵點(diǎn):
- GPIO引腳模式:設(shè)置為輸入模式(浮空/上拉/下拉)
- 中斷觸發(fā)方式:上升沿、下降沿、雙邊沿觸發(fā)
- 中斷優(yōu)先級:通過NVIC配置優(yōu)先級
- 中斷服務(wù)函數(shù):處理中斷事件
二、配置步驟(標(biāo)準(zhǔn)庫)
1. 使能GPIO和復(fù)用時(shí)鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
2. 配置GPIO為輸入模式
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; // 例如PA0引腳
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; // 上拉輸入
GPIO_Init(GPIOA, &GPIO_InitStruct);
3. 配置EXTI中斷線
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); // PA0映射到EXTI0
EXTI_InitTypeDef EXTI_InitStruct;
EXTI_InitStruct.EXTI_Line = EXTI_Line0; // 中斷線0(對應(yīng)PA0)
EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; // 中斷模式
EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising; // 上升沿觸發(fā)
EXTI_InitStruct.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStruct);
4. 配置NVIC中斷優(yōu)先級
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn; // 中斷通道(PA0對應(yīng)EXTI0)
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; // 搶占優(yōu)先級
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0; // 子優(yōu)先級
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
5. 編寫中斷服務(wù)函數(shù)
void EXTI0_IRQHandler(void) {
if (EXTI_GetITStatus(EXTI_Line0) != RESET) {
// 處理中斷事件(例如翻轉(zhuǎn)LED)
EXTI_ClearITPendingBit(EXTI_Line0); // 清除中斷標(biāo)志
}
}
三、配置步驟(HAL庫)
1. 使能GPIO時(shí)鐘
__HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA時(shí)鐘
2. 配置GPIO和中斷
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; // 上升沿觸發(fā)中斷
GPIO_InitStruct.Pull = GPIO_PULLUP; // 上拉輸入
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
3. 配置NVIC
HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); // 設(shè)置優(yōu)先級
HAL_NVIC_EnableIRQ(EXTI0_IRQn); // 使能中斷
4. 中斷服務(wù)函數(shù)
void EXTI0_IRQHandler(void) {
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); // HAL庫中斷處理函數(shù)
}
// 回調(diào)函數(shù)(在main.c中重寫)
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
if (GPIO_Pin == GPIO_PIN_0) {
// 處理中斷事件
}
}
四、注意事項(xiàng)
- 中斷標(biāo)志清除:必須在中斷函數(shù)中清除標(biāo)志位,否則會反復(fù)進(jìn)入中斷。
- 消抖處理:按鍵等機(jī)械開關(guān)需在硬件或軟件中添加消抖。
- 優(yōu)先級沖突:多個(gè)中斷同時(shí)存在時(shí),需合理分配優(yōu)先級。
- 引腳與中斷線映射:例如PA0/PB0/PC0共享EXTI0,需通過
AFIO或SYSCFG配置。
五、常見問題
- 中斷不觸發(fā):檢查時(shí)鐘使能、引腳模式、中斷線映射、NVIC配置。
- 重復(fù)進(jìn)入中斷:未清除中斷標(biāo)志或消抖不足。
- 優(yōu)先級問題:高優(yōu)先級中斷搶占導(dǎo)致邏輯異常。
通過以上步驟即可完成STM32 GPIO中斷配置。建議結(jié)合STM32CubeMX工具生成初始化代碼以提高效率。
stm32 GPIO中斷配置教程
在嵌入式開發(fā)中,STM32微控制器因其高性能和豐富的外設(shè)而廣受歡迎。GPIO(通用輸入/輸出)中斷是STM32微控制器中常用的功能之一,它允許開發(fā)者在特定引腳上檢測到外部信號變化時(shí)快速響應(yīng)。 1.
2024-11-19 15:53:38
STM32如何配置外部中斷?STM32外部中斷配置步驟
STM32如何配置外部中斷?STM32外部中斷配置步驟? 作為一款現(xiàn)代化的微控制器,STM32系列芯片在各種應(yīng)用場合中廣泛應(yīng)用。其中最常見的應(yīng)用是外部中斷。本文將詳細(xì)介紹如何在STM32中配置外部
2023-10-26 17:47:25
STM32 GPIO的外部中斷設(shè)計(jì)
在之前針對STM32的GPIO相關(guān)API函數(shù)及配置使用進(jìn)行了詳細(xì)的介紹,GPIO作為輸入引腳時(shí),調(diào)用相關(guān)讀信號引腳函數(shù)接口就可以在程序的循環(huán)中,輪詢的對輸入信號進(jìn)行讀取檢測操作,除了輪詢的方式訪問
2023-04-14 10:51:53
如何配置GPIO為中斷功能呢?
如何配置GPIO為中斷功能呢? GPIO在嵌入式系統(tǒng)中經(jīng)常用于控制外設(shè),如LED、攝像頭、傳感器等。除此之外,GPIO還可以被配置為中斷功能,用于檢測輸入信號的變化,從而觸發(fā)中斷服務(wù)程序。本文將介紹
2023-10-30 09:57:08
STM32使用GPIO配置的5種方式
STM32使用GPIO配置的5種方式 STM32是常見的一種微控制器,其GPIO模塊可以實(shí)現(xiàn)對外部設(shè)備的控制和數(shù)據(jù)傳輸,包括數(shù)字I/O口、模擬輸入口和輸出口等。在STM32中,GPIO模塊的配置可以
2023-10-26 17:42:45
如何配置GPIO的外部中斷
目錄如何配置GPIO的外部中斷配置RCC時(shí)鐘GPIO配置EXTI配置NVIC配置中斷服務(wù)函數(shù) IRQ_Handler如何配置GPIO的外部中斷以STM32F103為例,記錄配置GPIO外部中斷的一般
sunnyking
2021-08-13 08:52:26
STM32 GPIO的API函數(shù)配置和使用技巧
本篇開始對STM32的GPIO在實(shí)際開發(fā)設(shè)計(jì)中的使用配置和技巧進(jìn)行探討,可以先去回顧下之前介紹的GPIO的相關(guān)理論基礎(chǔ)知識包括基本結(jié)構(gòu),工作模式和寄存器原理。
2023-04-14 10:46:46
STM32的GPIO在實(shí)際開發(fā)設(shè)計(jì)的使用配置和技巧
一、前言 本篇開始對STM32的GPIO在實(shí)際開發(fā)設(shè)計(jì)中的使用配置和技巧進(jìn)行探討,可以先去回顧下之前介紹的GPIO的相關(guān)理論基礎(chǔ)知識包括基本結(jié)構(gòu),工作模式和寄存器原理。 了解過STM32的GPIO
2023-06-22 10:22:00
stm32f407如何配置外部中斷
這幾天又重新學(xué)了stm32f4,遇到了一個(gè)外部配置的實(shí)驗(yàn),實(shí)驗(yàn)內(nèi)容僅作簡單的外部中斷,讀者只要搞懂其中的原理,稍微復(fù)雜的中斷就能很好解決。 實(shí)驗(yàn)內(nèi)容:按鍵KEY0按下,觸發(fā)外部中斷,中斷函數(shù)
2023-03-05 16:48:25
STM32的GPIO操作配置和使用方法
本篇開始對STM32的GPIO在實(shí)際開發(fā)設(shè)計(jì)中的使用配置和技巧進(jìn)行探討,可以先去回顧下之前介紹的GPIO的相關(guān)理論基礎(chǔ)知識包括基本結(jié)構(gòu),工作模式和寄存器原理。
2023-07-07 16:50:12
STM32基于標(biāo)準(zhǔn)外設(shè)庫的外部中斷配置
本文介紹了STM32基于標(biāo)準(zhǔn)外設(shè)庫的外部中斷配置,以及基于參考手冊如何更加寄存器配置外部中斷
2023-11-02 14:13:06
STM32F407 外部中斷配置步驟
介紹STM32F407外部中斷配置步驟,以按鍵為例,實(shí)現(xiàn)外部中斷配置,使用按鍵觸發(fā)中斷進(jìn)行LED燈控制。
2023-07-06 14:31:25
STM32的IO外部中斷EXTI的使用
一、前言 在之前針對STM32的GPIO相關(guān)API函數(shù)及配置使用進(jìn)行了詳細(xì)的介紹,GPIO作為輸入引腳時(shí),調(diào)用相關(guān)讀信號引腳函數(shù)接口就可以在程序的循環(huán)中,輪詢的對輸入信號進(jìn)行讀取檢測操作,除了輪詢
2023-06-22 10:21:00
STM32 GPIO外部中斷總結(jié)
STM32 GPIO外部中斷總結(jié)一、STM32中斷分組:STM32 的每一個(gè)GPIO都能配置成一個(gè)外部中斷觸發(fā)源,這點(diǎn)也是 STM32 的強(qiáng)大之處。STM32 通過根據(jù)引腳的序號不同將眾多中斷觸發(fā)
ldd1211_
2021-08-16 07:37:05
STM32Cubemx配置GPIO外部中斷實(shí)驗(yàn)
4.Keil編寫功能函數(shù)1.找到外部中斷回調(diào)函數(shù)2.在中斷回調(diào)函數(shù)內(nèi)編寫服務(wù)函數(shù)3.編譯并燒錄代碼4.工程下載地址前言本文將向大家詳細(xì)演示STM32Cubemx配置GPIO外部中斷實(shí)驗(yàn),使用按鍵來翻轉(zhuǎn)LED電平。提示:以下是本篇文章正文內(nèi)容,下面案例可供參考一、使用工具STM32F103C8T6核心板S
ldliu
2021-08-16 08:43:09
STM32單片機(jī)的GPIO輸入、輸出模式與配置方法
STM32 單片機(jī)是一款高性能、低功耗的 32 位微控制器,具有強(qiáng)大的計(jì)算能力、靈活的外設(shè)模塊和實(shí)現(xiàn)微控制器應(yīng)用所需的社區(qū)支持。在單片機(jī)應(yīng)用中,GPIO 輸入輸出模式是必不可少的硬件接口之一。本文將介紹 STM32 單片機(jī)的 GPIO 輸入、輸出模式與配置方法。
2023-08-15 18:23:00
用STM32CubeMX軟件去配置GPIO的外部中斷
對軟件的使用方法已經(jīng)相對熟悉了很多,最起碼知道該去做什么。本節(jié)我們繼續(xù)學(xué)習(xí)用STM32CubeMX軟件去配置GPIO的外部中斷這個(gè)功能,下一節(jié)看看串口的配置方法。本博主使用的STM32F7這款芯片,正好上次項(xiàng)目
泡芙奶昔
2021-08-16 09:33:17
STM32 GPIO外部中斷的設(shè)置
STM32GPIO外部中斷的設(shè)置1.中斷的分組STM32 的每一個(gè)GPIO都能配置成一個(gè)外部中斷觸發(fā)源,STM32 通過根據(jù)引腳的序號不同將眾多中斷觸發(fā)源分成不同的組,比如:PA0,PB0,PC0
偶是糕富帥
2022-01-13 07:26:59
如何使用GPIO口接按鍵進(jìn)行外部中斷的配置呢
如何對STM32的中斷進(jìn)行分組呢?STM32的外部中斷的配置過程是怎樣的?如何使用GPIO口接按鍵進(jìn)行外部中斷的配置呢?
tulin
2021-11-16 08:39:57
為什么GPIO配置總是出問題?
在STM32開發(fā)中,GPIO(通用輸入輸出)配置看似簡單,但在實(shí)際開發(fā)中,很多人常常會遇到這些困惑:明明按照教程配置了GPIO,為什么LED燈就是不亮?為什么有時(shí)候按鍵無法響應(yīng),或者響應(yīng)很慢
2025-04-07 11:59:01
如何配置嵌入式Linux的GPIO中斷
做個(gè)STM32開發(fā)的都知道,通過程序配置讓普通的GPIO口具有中斷功能。這樣對于設(shè)備檢測某些硬件的自動設(shè)備要方便的多。那么在嵌入式的Linux是否具有這樣的功能呢?答案是肯定的,下面我們就來介紹一下
ronga245
2021-11-04 07:18:42
關(guān)于Linux的GPIO中斷知識
在嵌入式系統(tǒng)中,經(jīng)常會用到gpio外部中斷來獲取外部事件,比如按鍵、傳感器、網(wǎng)絡(luò)通信等等。一般中斷都會綁定一個(gè)中斷回調(diào)函數(shù),來執(zhí)行產(chǎn)生中斷后的一些任務(wù)。Linux的中斷是操作系統(tǒng)管理的資源,需要在內(nèi)核層配置中斷以及綁定回調(diào)函數(shù)。
2023-03-24 11:27:32
GPIO做輸出還能作外部中斷輸入嗎?
我們這里要談的是基于硬件模式的外部中斷話題。當(dāng)STM32的GPIO作為輸出時(shí),可能是通用GPIO輸出也可能是基于其它外設(shè)復(fù)用情況下的輸出,即復(fù)用輸出。
2020-07-05 10:42:56