啥是中斷?中斷是指計算機運行過程中,出現某些意外情況需主機干預時,機器能自動停止正在運行的程序并轉入處理新情況的程序,處理完畢后又返回原被暫停的程序繼續運行。
舉個例子:
類比一下
在實際的代碼中,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
+關注
關注
2289文章
11011瀏覽量
362321 -
程序
+關注
關注
117文章
3820瀏覽量
82395 -
機器
+關注
關注
0文章
790瀏覽量
41119
發布評論請先 登錄
相關推薦
熱點推薦
請問使用CubeMX選擇芯片生成項目時如何選擇外部晶振?
我從網上購入了STM32F103C8T6的核心板,板上有外部晶振。但我使用STM32CubeMX生成項目時,卻無法選擇外部晶振(如下圖)。請問要在哪里設置才能選擇
發表于 04-22 09:17
STM32開發入門進階必備!《STM32嵌入式系統開發—基于STM32CubeMX和HAL庫》新書發布!
近日,由華清遠見教育科技集團精心編撰的教育部高等學校電子信息類專業教學指導委員會規劃教材、普通高等教育電子信息類專業系列教材——《STM32嵌入式系統開發—基于STM32CubeMX和HAL庫》重磅

STM32CubeMX無法打開.ioc文件怎么解決?
我的STM32CubeMX不能打開別人的工程文件,雙擊打開.ioc文件后會全白,只剩左上角有個home,什么也點不了,但是我自己可以創建工程,也可以打開我自己創建的工程。請問我該如何解決
發表于 03-12 07:39
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生成STM32mp135D的USART1,2,3,6代碼初始化是空的,為什么?
用STM32CubeMX生成STM32mp135D的USART1,2,3,6代碼初始化是空的,參考其他代碼做了初始化操作,可以通過HAL_USART_Transmit接口發送數據,但是調用
發表于 03-07 07:48
STM32CubeMX用于STM32配置和初始化C代碼生成
電子發燒友網站提供《STM32CubeMX用于STM32配置和初始化C代碼生成.pdf》資料免費下載
發表于 02-26 17:32
?658次下載
工程師開發利器:STM32CubeMX 與 eDesignSuite 的協同開發
工程師開發利器推介:STM32CubeMX 與 eDesignSuite 的協同開發STM32CubeMX 和 eDesignSuite 的綜合說明及其協同開發場景的分析:一、STM32CubeMX

使用stm32cubeMX無法生成mdk工程文件?
幾年前使用過cubemx,可以生成keil的工程文件。最近有個工程使用cubemx創建,結果只能生成stm32cubemx類型的文件,無法生成mdk的工程文件。
請教如何解決。
(我之前使用過多次
發表于 01-04 20:03
STM32CubeMX的菜單介紹
相信初學者打開STM32CubeMX一定是一臉懵逼,里面都是全英文的,不知道從何入手。這里先給大家簡單講解一下。在新建工程這一欄里,我們最常用的是第一個,它會彈出一個芯片列表供你選擇,然后就會創建一

STM32CUBEMX(11)--外部中斷(EXTI)
首先需要準備一個開發板,這里我準備的是NUCLEO-F030R8的開發板:
選擇芯片型號
使用STM32CUBEMX選擇芯片stm32f030r8,如下所示:
配置時鐘源
HSE與LSE分別為外部
發表于 09-10 15:44
評論