這一章我們?cè)谇耙徽翯PIO的工程修改。復(fù)制GPIO的工程,修改文件夾名。點(diǎn)擊STM32F746I.ioc打開STM32cubeMX的工程文件重新配置。PA0管腳重新配置為GPIO_EXIT0模式。
WAKEUP按鍵已經(jīng)外部下拉,按下是PA0為高電平。在GPIO配置中配置PA0為上升沿觸發(fā)。內(nèi)部既不上拉也不下拉,添加用戶標(biāo)簽WAKEUP。
在NVIC(嵌套向量中斷控制器)中,勾選EXIT Line0 interrupt使能PA0中斷。右邊兩個(gè)選項(xiàng)設(shè)置搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)。此處我們選擇默認(rèn)的,不修改。
在這里簡(jiǎn)單介紹一下NVIC(嵌套向量中斷控制器)。NVIC就是控制中斷響應(yīng)的。主要由三個(gè)參數(shù),一個(gè)是中斷使能,一個(gè)是搶占優(yōu)先級(jí),還有一個(gè)就是響應(yīng)優(yōu)先級(jí)。(優(yōu)先級(jí)數(shù)值越小,優(yōu)先級(jí)別越高)
中斷使能很好理解,就是是否開啟中斷,如果開啟中斷,則滿足中斷觸發(fā)條件時(shí)程序會(huì)跳到中斷服務(wù)程序運(yùn)行,否則不響應(yīng)中斷主程序繼續(xù)運(yùn)行。
搶占優(yōu)先級(jí)是用來(lái)判斷一個(gè)中斷是否可以打斷另外一個(gè)中斷的中斷服務(wù)程序搶先運(yùn)行。例如A中斷觸發(fā),正在運(yùn)行A中斷的服務(wù)程序,此時(shí)B中斷也觸發(fā),如果B中斷的搶占優(yōu)先級(jí)比A的高,則程序會(huì)打斷A的中斷服務(wù)程序,去運(yùn)行B的中斷服務(wù)程序,即中斷嵌套。等B的中斷服務(wù)程序運(yùn)行完后繼續(xù)運(yùn)行A的中斷服務(wù)程序。如果B的搶占優(yōu)先級(jí)沒(méi)有高過(guò)A的搶占優(yōu)先級(jí),則程序不會(huì)打斷A的中斷服務(wù)程序,而是待定A的中斷服務(wù)程序運(yùn)行完成后才運(yùn)行B的中斷服務(wù)程序。
響應(yīng)優(yōu)先級(jí)是用來(lái)判斷搶占優(yōu)先級(jí)相同的幾個(gè)中斷那個(gè)中斷會(huì)優(yōu)先響應(yīng)。如果幾個(gè)搶占優(yōu)先相同的中斷同時(shí)觸發(fā),那么響應(yīng)優(yōu)先級(jí)高的最先運(yùn)行。
判斷中斷的優(yōu)先級(jí),先看搶占優(yōu)先級(jí),搶占優(yōu)先級(jí)高的中斷優(yōu)先級(jí)別高。搶占優(yōu)先級(jí)相同的情況下,響應(yīng)優(yōu)先高的中斷優(yōu)先級(jí)別高。搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)相同的情況下,更加中斷向量表確定。如下為部分中斷向量表,詳細(xì)的可以查看stm32F7的數(shù)據(jù)手冊(cè)。
在這里簡(jiǎn)單講解一下優(yōu)先級(jí)分組。STM32以4個(gè)比特位表示中斷的搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)。中斷優(yōu)先級(jí)分組是為了給搶占式優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)在中斷優(yōu)先級(jí)寄叢器的四個(gè)比特位分配各個(gè)優(yōu)先級(jí)數(shù)字所占的位數(shù)。例如3位用于搶占優(yōu)先級(jí)(優(yōu)先級(jí)有2^3=8種優(yōu)先級(jí)),1位用于響應(yīng)優(yōu)先級(jí)(優(yōu)先級(jí)有2^1=2種優(yōu)先級(jí))。
在這里我們就配置好stm32CubeMX工程,重新生成報(bào)告,以及重新生成代碼,編譯程序。
打開main.c文件。把main()函數(shù)里while循環(huán)上一章的代碼刪掉,while循環(huán)里面為空。在main.c文件后面USER CODE BEGIN 4 和 USER CODE END 4 中間添加中斷回調(diào)函數(shù)。
01 | /* USER CODE BEGIN 4 */ |
02 | /** |
03 | * @brief EXTI line detection callbacks |
04 | * @param GPIO_Pin: Specifies the pins connected EXTI line |
05 | * @retval None |
06 | */ |
07 | void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) |
08 | { |
09 | if(GPIO_Pin == GPIO_PIN_0) |
10 | { |
11 | /* Toggle LED1 */ |
12 | BSP_LED_Toggle(LED1); |
13 | } |
14 | } |
15 | /* USER CODE END 4 */ |
中斷函數(shù)里面先判斷是否為EXIT線0中斷,如果是則LED1的狀態(tài)翻轉(zhuǎn)。在STM32F7的數(shù)據(jù)手冊(cè)中可以找到下面這張圖。PA0~PK0為EXTI線0中斷。
重新編譯程序,編譯通過(guò)后下載到Open746-C開發(fā)板。如果沒(méi)有錯(cuò)誤,按下一下WAKEUP按鍵LED1的狀態(tài)改變一次。
下面簡(jiǎn)單講解一下中斷程序的運(yùn)行流程。首先main函數(shù)主程序中一直在while循環(huán)里面執(zhí)行。當(dāng)按鍵(PA0引腳)按下時(shí),邊沿檢測(cè)電路檢測(cè)到上升沿,觸發(fā)中斷,設(shè)置中斷標(biāo)識(shí)位。NVIC中斷控制器判斷EXTI0中斷優(yōu)先是否為最高,若為最高優(yōu)先級(jí)則執(zhí)行EXIT0中斷。
再執(zhí)行中斷服務(wù)函數(shù)之前,Contex-M7內(nèi)核先將現(xiàn)在使用到的寄存器和主程序中斷點(diǎn)的地址壓入堆棧(保護(hù)現(xiàn)場(chǎng))。然后程序在中斷向量表中找到EXTI0中斷對(duì)應(yīng)的地址(0x0000 0058)。這個(gè)地址存儲(chǔ)的為EXTI0中斷服務(wù)函數(shù)的口人地址。然后程序轉(zhuǎn)跳到中斷服務(wù)函數(shù)執(zhí)行。
在startup_stm32f746xx.s啟動(dòng)文件中,我們可以找到中斷向量表。
在上面這張表中我們可以看到地址0x0000 0000保存的為棧頂?shù)牡刂贰?x0000 0004地址保存復(fù)位中斷服務(wù)函數(shù)的地址。第22個(gè)中斷為EXTI0中斷,對(duì)應(yīng)的地址為 22x4,即0x0000 0058。
在stm32f7xx_it.c中斷服務(wù)函數(shù)文件中,我們可以找到EXTI0中斷的服務(wù)函數(shù)。
01 | /** |
02 | * @brief This function handles EXTI line0 interrupt. |
03 | */ |
04 | void EXTI0_IRQHandler(void) |
05 | { |
06 | /* USER CODE BEGIN EXTI0_IRQn 0 */ |
07 |
08 | /* USER CODE END EXTI0_IRQn 0 */ |
09 | HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); |
10 | /* USER CODE BEGIN EXTI0_IRQn 1 */ |
11 |
12 | /* USER CODE END EXTI0_IRQn 1 */ |
13 | } |
中斷服務(wù)函數(shù)里面就調(diào)用了GPIO外部中斷處理函數(shù)HAL_GPIO_EXTI_IRQHandler(),參數(shù)為GPIO_PIN_0,即EXTI0中斷。GPIO外部中斷處理函數(shù)主要就是清除中斷標(biāo)識(shí)位,然后調(diào)用中斷回調(diào)函數(shù)HAL_GPIO_EXTI_Callback()。我們只需重構(gòu)中斷回調(diào)函數(shù),在函數(shù)里面添加我們的應(yīng)用代碼即可(程序中為翻轉(zhuǎn)LED1狀態(tài))。
01 | /** |
02 | * @brief This function handles EXTI interrupt request. |
03 | * @param GPIO_Pin: Specifies the pins connected EXTI line |
04 | * @retval None |
05 | */ |
06 | void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) |
07 | { |
08 | /* EXTI line interrupt detected */ |
09 | if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET) |
10 | { |
11 | __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); |
12 | HAL_GPIO_EXTI_Callback(GPIO_Pin); |
13 | } |
14 | } |
執(zhí)行完中斷服務(wù)函數(shù)后。內(nèi)核從堆棧去除壓入的寄存器數(shù)據(jù)恢復(fù)現(xiàn)場(chǎng),取出主程序中斷點(diǎn)的地址,轉(zhuǎn)到到主程序中斷點(diǎn)的地址繼續(xù)運(yùn)行主程序。
OK,到這里就完成一次中斷服務(wù)。簡(jiǎn)單的來(lái)說(shuō),觸發(fā)中斷時(shí),硬件先標(biāo)識(shí)中斷標(biāo)識(shí)位,然后NVIC中斷控制器判斷中斷優(yōu)先級(jí)是否可以執(zhí)行此中斷。執(zhí)行中斷時(shí),先保護(hù)現(xiàn)在程序的狀態(tài),將數(shù)據(jù)保存進(jìn)堆棧中,執(zhí)行完中斷服務(wù)函數(shù)后,再在堆棧中取數(shù)據(jù)回復(fù)現(xiàn)場(chǎng),跳回主程序繼續(xù)運(yùn)行。如果在中斷服務(wù)函數(shù)中有更高優(yōu)先級(jí)的中斷觸發(fā),則也會(huì)將現(xiàn)在的數(shù)據(jù)保存去執(zhí)行更高優(yōu)先級(jí)的中斷服務(wù)函數(shù),即中斷嵌套。高優(yōu)先級(jí)的中斷執(zhí)行完后,恢復(fù)現(xiàn)場(chǎng),繼續(xù)執(zhí)行低優(yōu)先級(jí)的服務(wù)函數(shù)。
通過(guò)本章的講解希望各位更加深入了解中斷的過(guò)程。
上一篇:STM32CubeMX系列教程3:基本定時(shí)器
下一篇:STM32CubeMX系列教程1:GPIO
推薦閱讀
史海拾趣
DAVE Embedded Systems深知品質(zhì)對(duì)于企業(yè)發(fā)展的重要性。他們建立了嚴(yán)格的質(zhì)量管理體系,確保從原材料采購(gòu)到產(chǎn)品制造的每一個(gè)環(huán)節(jié)都符合高標(biāo)準(zhǔn)的質(zhì)量要求。同時(shí),公司還提供了優(yōu)質(zhì)的售后服務(wù),為客戶提供了全方位的技術(shù)支持和解決方案。這些舉措不僅贏得了客戶的信任和支持,還為公司樹立了良好的口碑。
EMS GmbH公司自創(chuàng)立之初,就專注于汽車轉(zhuǎn)換器注塑件(微動(dòng)開關(guān))的研發(fā)和生產(chǎn)。公司投入大量資源進(jìn)行技術(shù)創(chuàng)新,逐步積累起了一系列核心專利技術(shù)。這些技術(shù)不僅涵蓋了汽車轉(zhuǎn)換器注塑件生產(chǎn)的所有關(guān)鍵技術(shù),還獲得了多個(gè)國(guó)際品質(zhì)管理組織機(jī)構(gòu)及主流整車廠的雙重、三重認(rèn)證。這些專利技術(shù)的積累,使EMS GmbH公司在汽車轉(zhuǎn)換器注塑件領(lǐng)域確立了行業(yè)領(lǐng)先地位。
在公司快速發(fā)展的過(guò)程中,High Tech Chips Inc深刻認(rèn)識(shí)到單打獨(dú)斗的局限性。因此,公司積極尋求與全球知名科技企業(yè)的戰(zhàn)略合作。通過(guò)與華為、三星等手機(jī)制造商的合作,High Tech Chips Inc的芯片產(chǎn)品被廣泛應(yīng)用于這些企業(yè)的旗艦機(jī)型中,極大地提升了產(chǎn)品的知名度和市場(chǎng)占有率。同時(shí),公司還與英偉達(dá)、英特爾等芯片巨頭建立了技術(shù)合作關(guān)系,共同推動(dòng)芯片技術(shù)的創(chuàng)新和發(fā)展。
作為一家有社會(huì)責(zé)任感的企業(yè),Dexter始終關(guān)注環(huán)境保護(hù)和可持續(xù)發(fā)展問(wèn)題。公司積極采用環(huán)保材料和工藝,減少生產(chǎn)過(guò)程中的廢棄物和污染物排放。同時(shí),Dexter還積極參與社會(huì)公益事業(yè),為當(dāng)?shù)厣鐓^(qū)和弱勢(shì)群體提供幫助和支持。這些舉措不僅有助于保護(hù)環(huán)境、推動(dòng)社會(huì)進(jìn)步,還提升了Dexter的企業(yè)形象和品牌價(jià)值。
隨著產(chǎn)品線的不斷豐富和技術(shù)實(shí)力的日益增強(qiáng),GStek開始積極拓展國(guó)內(nèi)外市場(chǎng)。公司采取多元化的市場(chǎng)策略,針對(duì)不同客戶群體提供定制化的解決方案。同時(shí),GStek還注重品牌建設(shè),通過(guò)參加各類行業(yè)展會(huì)、舉辦技術(shù)研討會(huì)等方式,加強(qiáng)與業(yè)界的交流與合作,提升品牌知名度和影響力。這些努力使得GStek的產(chǎn)品廣泛應(yīng)用于各類電子產(chǎn)品中,包括智能手機(jī)、平板電腦、筆記本電腦等移動(dòng)設(shè)備以及家電、工控等領(lǐng)域。
隨著市場(chǎng)的不斷擴(kuò)大,F(xiàn)ERYSTER公司意識(shí)到產(chǎn)品質(zhì)量對(duì)于企業(yè)的重要性。因此,公司投入大量資金用于提升質(zhì)量管理體系,引入國(guó)際先進(jìn)的生產(chǎn)設(shè)備和檢測(cè)儀器。同時(shí),公司還加強(qiáng)了員工的質(zhì)量意識(shí)培訓(xùn),確保每一個(gè)環(huán)節(jié)都符合質(zhì)量標(biāo)準(zhǔn)。這些措施的實(shí)施,使得FERYSTER公司的產(chǎn)品質(zhì)量得到了顯著提升,贏得了客戶的廣泛贊譽(yù)。
要求的模擬的搶答器:1)能容許8組進(jìn)行搶答。2)能顯示搶答組號(hào)。 3)各組記分,并能記分顯示。4)比賽結(jié)束時(shí),能發(fā)出報(bào)警聲。5)能調(diào)節(jié)搶答時(shí)間及回答時(shí)間 用51單片機(jī)設(shè)計(jì)… 查看全部問(wèn)答∨ |
|
請(qǐng)問(wèn),mobile6.0操作系統(tǒng)的智能手機(jī)與電腦連接時(shí),剛開始時(shí)候,下面有個(gè)網(wǎng)絡(luò)連接顯示,后來(lái)才有個(gè)activesyn連接顯示成功。 當(dāng)mobile6.0與windows連接開始時(shí),好像有個(gè)虛擬網(wǎng)絡(luò)連接,有沒(méi)有這方面的詳細(xì)資料。 小弟不勝感激!!! … 查看全部問(wèn)答∨ |
兩臺(tái)GPRS撥號(hào)上網(wǎng)的機(jī)器之間通訊問(wèn)題 我現(xiàn)在有兩臺(tái)通過(guò)中國(guó)移動(dòng)的GPRS上網(wǎng)的設(shè)備,一臺(tái)為L(zhǎng)PC2368的嵌入式開發(fā)板,移植好了PPP協(xié)議棧,已經(jīng)成功獲得了中國(guó)移動(dòng)分配的IP地址10.x.x.x,另一臺(tái)筆記本也通過(guò)中國(guó)移動(dòng)GPRS上網(wǎng),也獲得了10.x.x.x的地址,筆記本可以ping到板子,但我分別運(yùn)行在板子上 ...… 查看全部問(wèn)答∨ |
有一個(gè)用delphi7開發(fā)好的程序,現(xiàn)在想用PDA顯示這個(gè)程序或者程序的結(jié)果,我的PDA的操作系統(tǒng)是 Microsoft Windows Mobile 2003 第二版, 大俠們有什么好的辦法嗎?老師崔的很急,幫幫忙阿?我不知道還有多少分。要不全給你都行… 查看全部問(wèn)答∨ |
團(tuán)購(gòu)maple已到達(dá),正在刷bootloader已預(yù)訂的朋友會(huì)明天發(fā)出有一個(gè)電源濾波電容由于后來(lái)給錯(cuò)了尺寸沒(méi)有安上去,但是不會(huì)對(duì)使用產(chǎn)生什么影響~http://item.taobao.com/auction/item_detail.htm?item_num_id=9040823487 結(jié)束日期:2010-2-15… 查看全部問(wèn)答∨ |
目前我只用到SPI接口,性能真的不錯(cuò),103的spi時(shí)鐘達(dá)到16MHz,DMA時(shí)spi是9MHz比str7優(yōu)秀很多。不過(guò)有點(diǎn)郁悶,為何dma比單字節(jié)寫時(shí)更慢?… 查看全部問(wèn)答∨ |
|
【MSP430共享】基于神經(jīng)網(wǎng)絡(luò)的汽車動(dòng)態(tài)稱重CCD抓拍雙核系統(tǒng)設(shè)計(jì) 介紹了基于T M S 3 2 0 C 5 41 O D S P和M S P 4 3 O F 1 4 9單片機(jī)相結(jié)合的汽車動(dòng)念稱重雙核系統(tǒng)。 該系統(tǒng)采用了B P神經(jīng)網(wǎng)絡(luò)改進(jìn)算法L e v e n b e r g — M a r q u a r d t法實(shí)現(xiàn)精確稱重, 具有對(duì)超重汽車進(jìn)行C C D抓拍 , 圖像車牌識(shí)別等功能 ...… 查看全部問(wèn)答∨ |
TI大學(xué)計(jì)劃培訓(xùn)材料-精密信號(hào)鏈部分 本帖最后由 dontium 于 2015-1-23 11:28 編輯 TI大學(xué)計(jì)劃培訓(xùn)材料-精密信號(hào)鏈部分 … 查看全部問(wèn)答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- Microchip 升級(jí)數(shù)字信號(hào)控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無(wú)線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁(yè)和arduino的通訊
- ESP32 freeRTOS使用測(cè)試
- ?擁抱基礎(chǔ)設(shè)施變革,抓住人工智能的萬(wàn)億美元機(jī)遇
- 中微愛(ài)芯2W帶關(guān)斷模式的AB類音頻功放介紹
- 慧明DM16 PRO與DM16數(shù)字調(diào)音臺(tái)的全方位對(duì)比
- 中微愛(ài)芯電烤箱整體解決方案
- 不是8萬(wàn)也不是13萬(wàn),高速風(fēng)筒為什么偏偏是11萬(wàn)轉(zhuǎn)速呢?
- 國(guó)內(nèi)AI眼鏡Q1出貨飆升116%,支付革新開啟增長(zhǎng)新賽道
- 高性能纖維應(yīng)變傳感器,實(shí)現(xiàn)可穿戴設(shè)備的柔性化、舒適化、便攜化
- 用于生理狀況和活動(dòng)監(jiān)測(cè)的可穿戴傳感器綜述
- 蘋果智能眼鏡新專利:鏡框加LED陣列輔助顯示系統(tǒng)、雙軸鉸鏈設(shè)計(jì)
- 機(jī)械聲學(xué)傳感概念或支持開發(fā)其它無(wú)線柔性傳感系統(tǒng)
- Littelfuse第3期:新型SSA系列雙端超低分流電阻器
- 【EEWORLD第三十二屆】2011年11月社區(qū)明星人物揭曉!
- 泰克WiFi預(yù)一致性測(cè)量方案介紹會(huì) 填問(wèn)卷 贏好禮
- 看視頻贏京東卡 | 泰享實(shí)測(cè)之水哥秘籍
- 美光新春來(lái)集福 京東E卡等你來(lái)抽
- PI有獎(jiǎng)問(wèn)答之聚焦PI InnoSwitch-CH
- 文曄科技有獎(jiǎng)直播:C2000在電機(jī)控制中的應(yīng)用 等你來(lái)看!
- Maxim 有獎(jiǎng)直播:支持工業(yè)系統(tǒng)的集成數(shù)字IO技術(shù)