啥是中斷?中斷是指計算機運行過程中,出現某些意外情況需主機干預時,機器能自動停止正在運行的程序并轉入處理新情況的程序,處理完畢后又返回原被暫停的程序繼續運行。
舉個例子:
類比一下
在實際的代碼中,HAL庫的中斷處理較為復雜:startup_stm32f103xb.s通過匯編注冊了中斷處理函數EXTI1_IRQHandler(),在stm32f1xx_it.c中,EXTI_IRQHandler()引用了HAL庫的處理函數HAL_GPIO_EXTI_IRQHandler(),其功能主要為判斷具體的中斷原因,并調用對應的中斷回調函數:HAL_GPIO_EXTI_Callback()。用戶可以自己重聲明中斷回調函數(HAL_GPIO_EXTI_Callback()),在其中寫入自己的用戶邏輯,不出意外的話,你這時候可能會有點懵。上圖!
中斷處理函數寫在EXTI_IRQHandler()或HAL_GPIO_EXTI_Callback()皆可,不過HAL_GPIO_EXTI_Callback()需要重新聲明,比如:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){ if(HAL_GetTick()-t>30) { if(GPIO_Pin == GPIO_PIN_1) { duty_cycle=duty_cycle+100; __HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_4,duty_cycle); } if(GPIO_Pin == GPIO_PIN_2) { duty_cycle=duty_cycle-100; __HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_4,duty_cycle); } } t=HAL_GetTick();}
對于代碼的意思不必理會,只需知道這些是自己按需求寫的,下面開始連接硬件:
以下是實操工程:
1,配置引腳
2,使能外部中斷
3,點擊右上角GENERATE CODE生成代碼
Hal_GPIO_TogglePin()這個函數可以反轉引腳電平,以控制小燈亮滅,多加的那幾行代碼用來做一個簡單的消抖,然后編譯,下載。如果沒出問題的話,每按一次按鍵,燈都會改變一次亮滅狀態,上面用的是xxxit.c中的Handler函數,下面試一試Callback函數,注釋掉剛才加的代碼,在main.c中添加如下代碼:
編譯,下載,運行,效果應該跟剛才一樣,下面試一下TIM。
搞完后,小燈應該每秒閃爍5次。注意:
中斷里不要使用延時函數Hal_Delay()
TIM中斷要手動開啟(Hal_TIM_Base_Start_IT())
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
STM32
+關注
關注
2239文章
10671瀏覽量
348743 -
程序
+關注
關注
114文章
3631瀏覽量
79541 -
機器
+關注
關注
0文章
756瀏覽量
40491
發布評論請先 登錄
相關推薦
STM32WL使用STM32CubeMX創建LoRa節點應用
電子發燒友網站提供《STM32WL使用STM32CubeMX創建LoRa節點應用.pdf》資料免費下載
發表于 09-19 14:46
?1次下載
通過STM32CubeMX制作外部Flash的燒寫驅動(.stdlr)
電子發燒友網站提供《通過STM32CubeMX制作外部Flash的燒寫驅動(.stdlr).pdf》資料免費下載
發表于 08-01 11:12
?4次下載
STM32CUBEMX開發GD32F303(15)----外部中斷EXTI
本章STM32CUBEMX配置STM32F103,并且在GD32F303中進行開發,同時通過開發板內進行驗證。
使用外部中斷EXTI進行驅動LED。
STM32CubeMx入門教程(4):PWM應用
STM32CubeMX簡介和安裝使用方法
STM32CubeMX 是 ST 意法半導體近幾年來大力推薦的STM32 芯片圖形化配置工具,目的就是為了方便開發者, 允許用戶使用圖形化向導生成C 初始化代碼,可以大大減輕開發工作,時間和費用,提高開發效率。STM32CubeMX
發表于 06-07 15:43
?1.4w次閱讀
評論