STM32 外部中斷使用方法總結
STM32 中斷分為外部中斷,定時器中斷、串列埠中斷。雖然名字不同,但是原理都是相同的,這一節我們將主要介紹一下外部中斷以及中斷函式的編寫。
按照如下步驟去編寫函式和配置函式即可完成對外部中斷函式的配置。
第一步:配置GPIO,設定為中斷模式。
第二部:配置中斷函式
1、使能IO口複用功能,選擇帶有中斷的引腳。
2、設定外部中斷結構體成員。
3、設定中斷優先順序。
4、配置中斷服務函式。
例子:按鍵觸發的中斷函式
//GPIO 初始化 void Init_LED(void) { GPIO_InitTypeDef GPIO_InitStructure; //定義一個GPIO結構體變數 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOG, ENABLE); //使能各個埠時鐘, GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14|GPIO_Pin_13; //板上LED編號 D2、D5 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOG, &GPIO_InitStructure);
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
中斷函式編寫
void Init_EXTIX_TI(void)
{
EXTI_InitTypeDef EXTI_InitStructure; //定義一個EXTI結構體變數
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能IO複用功能,使用中斷功能重要!!!
/* 引腳選擇 */
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);//配置埠C的13引腳為中斷源 重要!! 板上標號INT2
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource0); //配置埠E的0引腳為中斷源 重要!! 板上標號INT1
/* 設定外部中斷結構體的成員*/
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中斷模式為中斷模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿觸發
EXTI_InitStructure.EXTI_Line = EXTI_Line0 | EXTI_Line13;
EXTI_InitStructure.EXTI_LineCmd = ENABLE; //使能中斷線
EXTI_Init(&EXTI_InitStructure); //根據引數初始化中斷暫存器
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設定中斷優先順序分組2
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //設定中斷源為PC13
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //中斷佔優先順序為2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //副優先順序為0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中斷
NVIC_Init(&NVIC_InitStructure); //根據引數初始化中斷暫存器
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //設定中斷源為PE0
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //中斷佔優先順序為1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //副優先順序為0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中斷
NVIC_Init(&NVIC_InitStructure); //根據引數初始化中斷暫存器
}
最後為配置中斷服務函式(入口函式、中斷處理函式)
最後一步了,也是很重要的一步,配置中斷服務函式,也有叫什麼入口函式的。說白了,就是你想讓你的這個中斷做什麼。
/*************************************************************
注意,中斷服務程式雖然簡單,但是在寫入口函式的時候,注意函式名的寫法,只有如下3種命名方式。
(1)EXTI0_IRQHandler;EXTI Line 0
EXTI1_IRQHandler;EXTI Line 1
EXTI2_IRQHandler;EXTI Line 2
EXTI3_IRQHandler;EXTI Line 3
EXTI4_IRQHandler;EXTI Line 4
(2)
EXTI9_5_IRQHandler;EXTI Line 5-9
(3)
EXTI15_10_IRQHandler;EXTI Line 10-15
只要是中斷線5後的就不能像前四個那樣命名,他們有自己的方式。
************************************************************/
void EXTI15_10_IRQHandler(void) //pc13中斷服務程式,也是中斷子函式
{
//檢測按鍵之前一般有個消抖延時,直接呼叫下面的延時函式即可
if(EXTI_GetITStatus(EXTI_Line13)!= RESET) //判斷是否發生中斷,發生則中斷標誌置1
{
// LED1=0;
// LED2=1;
GPIO_ResetBits(GPIOG, GPIO_Pin_14); //GPIOG設定為低電平,
GPIO_SetBits(GPIOD, GPIO_Pin_13); //GPIOD設定為高電平,其實這一部分也是可以寫在主函式中的,在while那個死迴圈中。
}
EXTI_ClearITPendingBit(EXTI_Line13); //利用庫函式清除中斷標誌位,進入中斷服務程式之後。首先就是清除標誌位,
} //否則他會不響應中斷,不進入中斷函式
這就是整個完整的外部中斷處理函式,直接照葫蘆畫瓢就行。相關文章
- STM32中斷相關知識總結
- EXTI-外部中斷
- STM32--外部中斷
- 【STM32】【STM32CubeMX】STM32CubeMX的使用之二:外部中斷
- x86架構中的外部中斷結構-Part 1:中斷控制器的演化架構
- Retrofit使用方法全面總結
- STM32學習筆記——中斷筆記
- XXE外部實體注入漏洞總結
- 暫時關閉EXTI外部中斷的一個坑 HK32(stm32沒有測試過)
- stm32 USB增加端點總結
- stm32 SysTick/EXTI/USART中斷過程
- C++中list的使用方法及常用list操作總結C++
- 應廣微控制器-外部中斷demo
- Windows RocketMQ使用方法經驗總結WindowsMQ
- const特性總結(不斷更新)
- 程式設計思路-外部請求,中斷測試,結算費用,帶出logs引數程式設計
- Qt訊號與槽使用方法最完整總結QT
- STM32學習筆記之中斷筆記
- 總結一些學習資源網站(不斷更新中)網站
- 微控制器學習(十)紅外遙控與外部中斷
- flutter 編譯報錯總結(不斷更新)Flutter編譯
- 定時中斷基本結構
- JavaScript裡的陣列Array使用方法總結,超全的oJavaScript陣列
- 詭異的druid連結池連結斷開故障經驗總結UI
- 支援外部記憶體功能的STL容器使用方法分享記憶體
- STM32 GPIO基本結構
- 自己總結的部分面試題,不斷更新面試題
- 判斷是否為陣列的 JavaScript 方法總結陣列JavaScript
- Android中Service總結Android
- css中居中總結CSS
- js中DOM總結JS
- Newtonsoft序列化與反序列化json字串使用方法總結JSON字串
- STM32 串列埠進入中斷,但是沒有檢查到接收資料位!!!!串列埠
- 雲伺服器FTP上傳中斷是什麼原因?解決方法總結!伺服器FTP
- 建設外部連結的方法
- SpringBoot中配置外部TomcatSpring BootTomcat
- YUIDoc的使用方法小結UI
- Linux(核心剖析):19---中斷總體概述Linux