上回向大家介紹了如何使用GPIO口的輸出功能點亮一盞LED燈,以及使用GPIO口的輸入功能讀取按鍵的狀態控制LED的閃爍頻率,然鵝,獲取按鍵的狀態采用的是主循環查詢的方法,這有一個弊端,試想當主循環的循環周期非常長的時候,比如夸張點說要1秒,那就得一直按著按鍵等到程序掃描到按鍵的輸入引腳后才能放開,這個等待時間最長需要1秒,這是很糟糕的,我可沒有這個耐心去等,比如在將一個數從1調節到100的時候,那后果是可想而知的。為此,就有必要引入一個叫中斷的神奇東西,程序中的中斷,會把正在運行的普通程序或者低級的中斷服務程序打斷,先運行本中斷服務函數內的程序,就好比我們日常生活中的突發事件,你正在洗衣服,突然快遞小哥到你家門口了,你得放下手上的衣服先去取個快遞,總不能讓快遞小哥在門口等你把衣服洗完吧。中斷還有很多種分類,在普通的51單片機中有三類中斷共五個中斷源,分別是外部中斷0和1、定時器中斷0和1以及串口中斷,而在STM32中的中斷那可多了去了,比方說有GPIO外部中斷、定時器中斷、串口中斷、DMA中斷、ADC中斷等等等等,每個中斷都有它獨特的功能,而本次我們需要的就是這當中的GPIO外部中斷,好了,廢話不多說,接下來我們就來研究研究STM32L552的外部中斷是如何使用的。
評測內容
使用外部中斷獲取按鍵的狀態,并調節LED燈閃爍的頻率。
所需元件
1、STM32L552ZET6Q;
2、板載紅色LED(LD3);
3、板載藍色按鍵(USER)。
評測步驟 01
將按鍵引腳配置成外部中斷模式,打開上回創建的STM32CubeMX工程,將芯片的PC13引腳按照步驟配置成下圖所示的設置,第五步為設置程序中的引腳別名,可根據自己的需求進行設置
02
使能外部中斷并設置中斷優先級,按照下圖所示步驟及內容設置,中斷優先級可自己根據需要設置
03
保存工程并生成代碼工程。
04
打開代碼工程,發現main.c文件中的GPIO口配置函數多了如下兩行設置中山優先級和使能中斷的代碼
05
在stm32l5xx_it.c文件中也多了一段中斷服務函數的代碼
06
跳轉到HAL_GPIO_EXTI_IRQHandler函數的實現,該函數的內容如下
其中的HAL_GPIO_EXTI_Rising_Callback和HAL_GPIO_EXTI_Falling_Callback函數就是外部中斷的回調函數,兩個函數內分別有如下注釋:
意思是這兩個函數在用戶需要的時候可以在用戶文件上實現,實現的內容就是用戶需要本次中斷執行的內容。
07
回到main.c文件,添加如下函數的實現
USER_BUTTON為一個全局變量,在文件開頭進行定義:_Bool USER_BUTTON = 0;
08
在主函數的循環中添加如下代碼;
一切就緒,重新編譯連接并
下載到開發板上,按下按鍵觀察程序運行情況,還是跟上回的一樣,實現了使用外部中斷檢測按鍵對LED的閃爍頻率進行調節。
總結
得益于STM32CubeMX的強大功能以及HAL庫的完美包裝,外部中斷的實現似乎并沒有那么難(相比于標準固件庫來說真的是簡單了不少),只需要自己實現一個回調函數就好了,對快速開發是方便了不少。好了,本次評測就到此結束,感謝您的閱讀。
-
led
+關注
關注
242文章
23602瀏覽量
668785 -
開發板
+關注
關注
25文章
5378瀏覽量
100676 -
外部中斷
+關注
關注
1文章
132瀏覽量
16033
原文標題:分享 | 人生中的首塊STM32L552開發板——外部中斷
文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
【NUCLEO-L552ZE-Q開發板試用連載】NUCLEO-L552ZE-Q開發板試用
【NUCLEO-L552ZE-Q開發板試用連載】+硬件介紹與初步上手
【NUCLEO-L552ZE-Q開發板試用連載】+示例開發一:STM32L552與RK3399使用USB通信
STM32L552如何交換閃存組?
有沒有人讓USB在STM32L552上作為VCP運行?
關于STM32L552的功耗問題
首次使用STM32L552開發板的一些步驟以及電腦系統和開發軟件
STM32L552開發板——開發環境

STM32f10x 外部中斷及中斷分組

野火F1開發板STM32案例-外部中斷(按鍵)使用

評論