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