啥是中斷?中斷是指計算機運行過程中,出現某些意外情況需主機干預時,機器能自動停止正在運行的程序并轉入處理新情況的程序,處理完畢后又返回原被暫停的程序繼續運行。
舉個例子:
類比一下
在實際的代碼中,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
+關注
關注
2309文章
11162瀏覽量
373475 -
程序
+關注
關注
117文章
3846瀏覽量
85246 -
機器
+關注
關注
0文章
798瀏覽量
41877
發布評論請先 登錄
相關推薦
熱點推薦
請問RT-Thread與stm32cubemx聯合開發的原理是什么?
在使用RT-Thread與stm32cubemx聯合開發的原理是什么,cubemx在其中主要起到了哪些功能呢?
發表于 10-11 15:49
意法半導體:STM32CubeMX將不再集成到STM32CubeIDE中
從2025年11月發布的版本開始,我們將僅以 獨立 版本的形式提供 STM32CubeIDE 和 STM32CubeMX 。 STM32CubeMX將不再集成到STM32CubeIDE
使用STM32CubeMX的時候創建的工程已經使用的板載資源如何去掉?
在使用STM32CubeMX的時候創建的工程已經使用的板載資源如何去掉?在基于開發板進行工程創建的時候會把板載資源直接初始化,后面想要用不同的功能配置,如何把初始配置去掉?
發表于 07-22 07:13
對于在STM32CubeMx使用FMC中的NAND FLASH里面配置這些時間有什么說明嗎?
對于在STM32CubeMx使用FMC中的NAND FLASH里面配置這些時間有什么說明嗎?
發表于 07-21 07:07
請問使用CubeMX選擇芯片生成項目時如何選擇外部晶振?
我從網上購入了STM32F103C8T6的核心板,板上有外部晶振。但我使用STM32CubeMX生成項目時,卻無法選擇外部晶振(如下圖)。請問要在哪里設置才能選擇
發表于 04-22 09:17
STM32開發入門進階必備!《STM32嵌入式系統開發—基于STM32CubeMX和HAL庫》新書發布!
近日,由華清遠見教育科技集團精心編撰的教育部高等學校電子信息類專業教學指導委員會規劃教材、普通高等教育電子信息類專業系列教材——《STM32嵌入式系統開發—基于STM32CubeMX和HAL庫》重磅
STM32cubeMx打開報錯更新器正在下載,怎么解決?
cubeMx打開報錯A \'STiM32Cube Updater (or another\'STM32CubeMX) sotware is downloading to the Repository
發表于 03-14 07:03
STM32CubeMX生成代碼就會覆蓋CMakeLists.txt文件,怎么解決?
請教一下用STM32CubeMX生成代碼后,我自己加了一個頭文件和源文件,這些自己加的文件不是要配置到CMakeLists.txt編譯么,但下載在用STM32CubeMX生成成代碼,就會覆蓋CMakeLists.txt文件,這種一般怎么解決
發表于 03-12 08:03
STM32CubeMX無法打開.ioc文件怎么解決?
我的STM32CubeMX不能打開別人的工程文件,雙擊打開.ioc文件后會全白,只剩左上角有個home,什么也點不了,但是我自己可以創建工程,也可以打開我自己創建的工程。請問我該如何解決
發表于 03-12 07:39
myST賬號無法注冊導致stm32cubemx無法下載hal庫的固件包,為什么?
myST賬號無法注冊導致stm32cubemx無法下載hal庫的固件包,myST賬號注冊卡在最后的郵箱驗證環節,一直卡著無法注冊通過
很急很急!以前stm32cubemx都不需要登錄myST賬號就能下載固件包了,為什么現在搞個這種抽象東西出來?還不能注冊賬號
發表于 03-11 06:17
STM32CubeMX生成的FreeRTOS源碼格式如何優化?
如圖,STM32CubeMX生成的FreeRTOS源碼格式有待優化,空格都是以箭頭的方式呈現,觀感很差。FreeRTOS官方下載的源碼則不存在這個問題,說明是STM32CubeMX生成源碼的過程出現的格式問題,希望ST官方能對此做下優化!
發表于 03-10 08:04
使用STM32CubeMX生成CMake工程中的FLASH.ld被更改怎么解決?
使用STM32CubeMX生成CMake工程之后,對STM32xxxx_FLASH.ld進行了修改。然后再次使用STM32CubeMX對工程進行修改的時候,STM32xxxx_FLAS
發表于 03-10 06:52
STM32CubeMX的外部中斷的使用










評論