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-外部中斷
- JavaScript中textRange物件使用方法總結JavaScript物件
- x86架構中的外部中斷結構-Part 1:中斷控制器的演化架構
- 外部表簡單總結
- casperjs中start方法的使用方法總結JS
- RAC 使用方法總結
- STM32學習筆記——中斷筆記
- 暫時關閉EXTI外部中斷的一個坑 HK32(stm32沒有測試過)
- STM8L中斷線和中斷埠使用方法
- Retrofit使用方法全面總結
- stm32 USB增加端點總結
- Git和github使用方法總結Github
- C++中list的使用方法及常用list操作總結C++
- XXE外部實體注入漏洞總結
- 磁帶裝置使用方法總結
- Windows RocketMQ使用方法經驗總結WindowsMQ
- ORACLE常用結構和函式使用方法總結Oracle函式
- Xcode Breakpoint 斷點總結XCode斷點
- Shell 條件判斷總結
- ORACLE診斷事件的總結Oracle事件
- C 語言中 define 的全部使用方法總結
- 移動端h5開發總結不斷更新中....H5
- STM32學習筆記之中斷筆記
- 程式設計思路-外部請求,中斷測試,結算費用,帶出logs引數程式設計
- Qt訊號與槽使用方法最完整總結QT
- const特性總結(不斷更新)
- Oracle效能診斷檢視總結Oracle
- iterator標籤總結(不斷更新)
- 總結一些學習資源網站(不斷更新中)網站
- iOS 應用開發中的斷點續傳實踐總結iOS斷點
- [Oracle] dbms_metadata.get_ddl 的使用方法總結Oracle
- 微控制器學習(十)紅外遙控與外部中斷
- 字串操作彙總(不斷新增中)字串
- 定時中斷基本結構
- STM32 GPIO基本結構
- flutter 編譯報錯總結(不斷更新)Flutter編譯
- 自己總結的部分面試題,不斷更新面試題