啥是中斷?中斷是指計算機(jī)運行過程中,出現(xiàn)某些意外情況需主機(jī)干預(yù)時,機(jī)器能自動停止正在運行的程序并轉(zhuǎn)入處理新情況的程序,處理完畢后又返回原被暫停的程序繼續(xù)運行。
舉個例子:
類比一下
在實際的代碼中,HAL庫的中斷處理較為復(fù)雜:startup_stm32f103xb.s通過匯編注冊了中斷處理函數(shù)EXTI1_IRQHandler(),在stm32f1xx_it.c中,EXTI_IRQHandler()引用了HAL庫的處理函數(shù)HAL_GPIO_EXTI_IRQHandler(),其功能主要為判斷具體的中斷原因,并調(diào)用對應(yīng)的中斷回調(diào)函數(shù):HAL_GPIO_EXTI_Callback()。用戶可以自己重聲明中斷回調(diào)函數(shù)(HAL_GPIO_EXTI_Callback()),在其中寫入自己的用戶邏輯,不出意外的話,你這時候可能會有點懵。上圖!
中斷處理函數(shù)寫在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()這個函數(shù)可以反轉(zhuǎn)引腳電平,以控制小燈亮滅,多加的那幾行代碼用來做一個簡單的消抖,然后編譯,下載。如果沒出問題的話,每按一次按鍵,燈都會改變一次亮滅狀態(tài),上面用的是xxxit.c中的Handler函數(shù),下面試一試Callback函數(shù),注釋掉剛才加的代碼,在main.c中添加如下代碼:
編譯,下載,運行,效果應(yīng)該跟剛才一樣,下面試一下TIM。
搞完后,小燈應(yīng)該每秒閃爍5次。注意:
中斷里不要使用延時函數(shù)Hal_Delay()
TIM中斷要手動開啟(Hal_TIM_Base_Start_IT())
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
STM32
+關(guān)注
關(guān)注
2313文章
11195瀏覽量
374754 -
程序
+關(guān)注
關(guān)注
117文章
3849瀏覽量
85493 -
機(jī)器
+關(guān)注
關(guān)注
0文章
801瀏覽量
41942
發(fā)布評論請先 登錄
相關(guān)推薦
熱點推薦
如何在 STM32Cube CMake 工程中添加源文件
STM32CubeMX 能夠很方便的導(dǎo)出 CMake 工程。例如,如下圖所示在 STM32CubeMX的 ToolChain/IDE 中選擇 Cmake。CMake 工程可以很容易被
發(fā)表于 04-15 16:07
?0次下載
LAT1574_如何在 STM32Cube CMake 工程中添加源文件
STM32CubeMX 能夠很方便的導(dǎo)出 CMake 工程。例如,如下圖所示在 STM32CubeMX的 ToolChain/IDE 中選擇 CmakeCMake 工程可以很容易被
發(fā)表于 03-11 10:46
?0次下載
基于 X-Cube-FreeRTOS_Heap4 和 CubeMX 生成 UCPD 項目介紹
某客戶反映參考我們的文檔 AN5418《How to build a simple USB-PD sink applicationwith STM32CubeMX》去配置 FreeRTOS 生成
發(fā)表于 01-04 11:18
?0次下載
請問RT-Thread與stm32cubemx聯(lián)合開發(fā)的原理是什么?
在使用RT-Thread與stm32cubemx聯(lián)合開發(fā)的原理是什么,cubemx在其中主要起到了哪些功能呢?
發(fā)表于 10-11 15:49
意法半導(dǎo)體:STM32CubeMX將不再集成到STM32CubeIDE中
從2025年11月發(fā)布的版本開始,我們將僅以 獨立 版本的形式提供 STM32CubeIDE 和 STM32CubeMX 。 STM32CubeMX將不再集成到STM32CubeIDE
使用STM32CubeMX的時候創(chuàng)建的工程已經(jīng)使用的板載資源如何去掉?
在使用STM32CubeMX的時候創(chuàng)建的工程已經(jīng)使用的板載資源如何去掉?在基于開發(fā)板進(jìn)行工程創(chuàng)建的時候會把板載資源直接初始化,后面想要用不同的功能配置,如何把初始配置去掉?
發(fā)表于 07-22 07:13
對于在STM32CubeMx使用FMC中的NAND FLASH里面配置這些時間有什么說明嗎?
對于在STM32CubeMx使用FMC中的NAND FLASH里面配置這些時間有什么說明嗎?
發(fā)表于 07-21 07:07
STM32L433VCT6進(jìn)入STOP模式2之后,功耗依然和正常運行模式?jīng)]有差別,為什么?
STM32CubeMX上配置power savinf mode
2、系統(tǒng)電源供電時LDO
結(jié)果:
1、運行是10mA,進(jìn)入STOP模式時是9.9mA;
2、掛仿真,沒有任何喚醒的中斷產(chǎn)生,應(yīng)該是進(jìn)入STOP模式了。
請教壇子的大佬們,有什么辦法可以優(yōu)化或者改進(jìn)功耗嗎?
發(fā)表于 07-21 06:42
stm32cubemx上的g031j6的管腳和數(shù)據(jù)手冊不一致,請問哪個是正確的呢?
stm32cubemx上的g031j6的管腳和數(shù)據(jù)手冊不一致,請問哪個是正確的呢?
發(fā)表于 07-10 06:39
STM32CubeMX配置STM32G070RBT6TR時為什么無法使能PVD中斷?
STM32CubeMX 配置STM32G070RBT6TR時無法使能PVD中斷
發(fā)表于 06-18 07:59
STM32CubeMX配置STM32G070RBT6TR時無法使能PVD中斷怎么辦?
STM32CubeMX 配置STM32G070RBT6TR時無法使能PVD中斷
發(fā)表于 06-16 06:32
STM32MP135D的TIM2使用ETR作為外部時鐘時,無法使用PE15作為輸入,是哪里的問題?
主芯片為STM32MP135D,使用最新的STM32CubeMX配置TIM2為外部時鐘模式2,管腳選擇PE15
實測計數(shù)器不會增加,當(dāng)改用PA15時是正常的;參考最新手冊看明顯有問題,各位能否幫忙驗證一下,是否我的程序問題,還是
發(fā)表于 06-10 07:40
STM32MP135D的TIM2使用ETR作為外部時鐘時,無法使用PE15作為輸入怎么解決?
主芯片為STM32MP135D,使用最新的STM32CubeMX配置TIM2為外部時鐘模式2,管腳選擇PE15
實測計數(shù)器不會增加,當(dāng)改用PA15時是正常的;參考最新手冊看明顯有問題,各位能否幫忙驗證一下,是否我的程序問題,還是
發(fā)表于 06-09 07:06
STM32MP135D的TIM2使用ETR作為外部時鐘時,無法使用PE15作為輸入怎么解決?
主芯片為STM32MP135D,使用最新的STM32CubeMX配置TIM2為外部時鐘模式2,管腳選擇PE15
實測計數(shù)器不會增加,當(dāng)改用PA15時是正常的;參考最新手冊看明顯有問題,各位能否幫忙驗證一下,是否我的程序問題,還是
發(fā)表于 05-28 06:17
第六章 外部中斷
本章介紹W55MH32的IO口作為外部中斷輸入的使用。先闡述了NVIC(嵌套向量中斷控制器)
的結(jié)構(gòu)、寄存器、優(yōu)先級及相關(guān)函數(shù),再說明EXTI(外部
STM32CubeMX的外部中斷的使用










評論