本文用STM32CubeIDE軟件實(shí)現(xiàn)STM32外部中斷實(shí)例。
新建工程
“File”-“New”-“STM32 Project”。
輸入芯片型號STM32F103ZE。
選擇相應(yīng)封裝,下一步。
填寫項(xiàng)目名,選擇工程位置,下一步。
配置時(shí)鐘、調(diào)試模式
選擇高速外部時(shí)鐘。
HCLK總線時(shí)鐘處輸入72,回車,配置使用最高時(shí)鐘頻率。
調(diào)試模式選擇串行,方便下載程序。
配置管腳外設(shè)
本實(shí)例中用到了LED1與KEY_LEFT,找到相應(yīng)電路圖。
可見LED1對應(yīng)PC0管腳,低電平點(diǎn)亮。按鍵K1對應(yīng)PE2管腳,低電平有效。
PC0配置為GPIO_Output,GPIO輸出模式
PE2配置為GPIO_EXTI2,GPIO中斷線2。
對GPIO進(jìn)行配置,可以看到PC0、PE2兩個管腳。
PC0管腳的配置:
GPIO輸出電平,“High”,復(fù)位后高電平,LED1熄滅狀態(tài)。
GPIO模式,“Output Push Pull”,推挽輸出,相關(guān)文章:梳理清楚推挽、開漏、OC、OD。
GPIO上拉下拉,“Pull-up”,上拉,默認(rèn)高電平,避免管腳電平狀態(tài)不穩(wěn)定
PE2管腳的配置,GPIO模式這里有6個選項(xiàng),分別是:
上升沿觸發(fā)的外部中斷
下降沿觸發(fā)的外部中斷
上升/下降沿觸發(fā)的外部中斷
上升沿觸發(fā)的事件中斷
下降沿觸發(fā)的事件中斷
上升/下降沿觸發(fā)的事件中斷
“外部中斷”與“事件中斷”的區(qū)別:
“事件中斷”可以由硬件自動完成這個事件產(chǎn)生的結(jié)果,比如引起DMA操作、AD轉(zhuǎn)換等,響應(yīng)速度更快。
而本例中需要中斷服務(wù)函數(shù)才能完成中斷后產(chǎn)生的結(jié)果,是“外部中斷”
由電路圖可知,KEY1按鍵按下時(shí)為低電平,過程中會產(chǎn)生一個下降沿,所以選擇“下降沿外部中斷”這一項(xiàng)。
按鍵低電平有效,選擇上拉,給管腳一個穩(wěn)定的電平狀態(tài),不按下時(shí)為默認(rèn)的高電平。
配置NVIC嵌套向量中斷控制器
NVIC就是用來控制中斷響應(yīng)的,如下圖列出了各個中斷??梢苑謩e配置其使能狀態(tài)、搶占優(yōu)先級與響應(yīng)優(yōu)先級。
因?yàn)镻E2配置為GPIO_EXTI2中斷,它出現(xiàn)在了列表中。同時(shí)出現(xiàn)的還有SysTick,它是HAL_Delay的時(shí)基來源,如下圖note處所說的,每隔一個固定時(shí)間產(chǎn)生一次中斷。
因?yàn)橄挛闹袛喾?wù)函數(shù)代碼中用到了HAL_Delay延時(shí)函數(shù),把SysTick與EXTI2的搶占優(yōu)先級分別設(shè)置為0與2。在這里,數(shù)值越大優(yōu)先級越小。
配置中斷服務(wù)函數(shù)
進(jìn)行上述配置之后,點(diǎn)擊生成代碼。
本實(shí)例中的中斷類型是“外部中斷”,通過中斷服務(wù)函數(shù)來實(shí)現(xiàn)。
打開stm32f1xx_it.c文件,找到中斷服務(wù)函數(shù),它調(diào)用了GPIO中斷服務(wù)函數(shù)。
F3找到這個函數(shù)的定義,在清除中斷標(biāo)志位后,進(jìn)入了Callback回調(diào)函數(shù)。
這個Callback函數(shù)也是一個弱化函數(shù),,可以重寫,如下圖的__weak標(biāo)識。
回到stm32f1xx_it.c文件,在末尾user code處寫上中斷發(fā)生時(shí)要實(shí)現(xiàn)的結(jié)果。
責(zé)任編輯:haq
-
STM32
+關(guān)注
關(guān)注
2270文章
10914瀏覽量
356723 -
軟件
+關(guān)注
關(guān)注
69文章
4981瀏覽量
87798
原文標(biāo)題:STM32外部中斷實(shí)例
文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論