在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

GD32的中斷-外部中斷的實(shí)現(xiàn)

冬至子 ? 來源:O老師講32 ? 作者:O老師 ? 2023-10-24 14:28 ? 次閱讀

處理器:GD32F103VET6

開發(fā)環(huán)境:MDK(keil 5) + STM32CubeMX

1.1 中斷的作用

中斷的主要作用就是允許一些緊急的任務(wù)“插隊(duì)”,提前進(jìn)行。比如,大家在排隊(duì)做核酸檢測(cè),但是,現(xiàn)在來了一位男士,他說他有緊急情況,希望能夠先做,在征得同意后,他先做了核酸,他做完了跑了,但大家仍然按照原來的順序排隊(duì)進(jìn)行,這就是中斷。

又如,你在玩游戲,但是一個(gè)重要電話進(jìn)來了,你只得暫停當(dāng)前的游戲,先接電話,接完電話繼續(xù)玩。這也是中斷。

在各種電子產(chǎn)品中,中斷用得非常非常多,在我看來,它和GPIO、串口、定時(shí)器一起,是各種處理器學(xué)習(xí)的最重要的四個(gè)模塊之一,我稱之為“四大金剛”。

1.2 GD32的中斷的執(zhí)行及其優(yōu)先級(jí)

對(duì)于GD32的中斷,我們需要關(guān)注以下問題:

1.那些模塊可以申請(qǐng)中斷?絕大部分的模塊,比如串口、定時(shí)器、SPI接口等都可以申請(qǐng)中斷,這些可以申請(qǐng)中斷的模塊我們叫中斷源。

2.某個(gè)模塊申請(qǐng)中斷,并獲得系統(tǒng)同意后,系統(tǒng)將會(huì)做什么?中斷申請(qǐng)并獲得通過后,將會(huì)執(zhí)行中斷函數(shù),中斷函數(shù)執(zhí)行完后又回到原來的地方繼續(xù)執(zhí)行。

GD32的各個(gè)模塊的中斷函數(shù)的函數(shù)名廠家已經(jīng)幫我們?nèi)『昧耍趩?dòng)文件(.s文件)中,具體如圖1所示。

圖片

圖1 GD32的中斷函數(shù)

3.如果有多個(gè)中斷同時(shí)到來,處理器該怎么辦呢?它會(huì)先去執(zhí)行哪個(gè)中斷的中斷函數(shù)呢?通過每個(gè)中斷的優(yōu)先級(jí)才裁決先響應(yīng)誰!優(yōu)先級(jí)高的中斷,它的中斷函數(shù)將會(huì)獲得優(yōu)先執(zhí)行。GD32的每個(gè)中斷的優(yōu)先級(jí)分為搶占式優(yōu)先級(jí)和子優(yōu)先級(jí)兩部分,在實(shí)際應(yīng)用中,一般我們都是只需要設(shè)置搶占式優(yōu)先級(jí)即可,子優(yōu)先級(jí)不用理會(huì)。搶占式優(yōu)先級(jí)可以設(shè)置的值為0-15,值越小優(yōu)先級(jí)越高,這點(diǎn)跟freertos操作系統(tǒng)的優(yōu)先級(jí)剛好相反,freertos的是值越高優(yōu)先級(jí)越高。

GD32的中斷由一個(gè)叫NVIC的模塊統(tǒng)一處理,NVIC全稱叫嵌套中斷向量控制器,搶占式優(yōu)先級(jí)、子優(yōu)先級(jí)、中斷允許、中斷失能都在它里面設(shè)置。

最后補(bǔ)充說明兩點(diǎn):

1.GD32的每一個(gè)模塊都會(huì)有至少一個(gè)中斷開關(guān),只有這個(gè)開關(guān)處于使能狀態(tài),該模塊的中斷信號(hào)才能進(jìn)入到NVIC內(nèi)部。

2.中斷函數(shù)中盡量不要有延時(shí),如必須要延時(shí),則延時(shí)要盡量小,要快進(jìn)快出,不要影響后續(xù)的中斷的響應(yīng)!

1.3 GD32的外部中斷

GD32F103VET6支持19個(gè)外部中斷,注意,這里雖然用了外部?jī)蓚€(gè)字,但真正只有16來自于芯片的外部,有3個(gè)仍然是在芯片的內(nèi)部。外部的16個(gè)中斷分別為EXTI0~EXTI15,其中EXTI0可以從PA0、PB0、PC0等標(biāo)號(hào)為0的引腳進(jìn)入,EXTI1可以從PA1、PB1、PC1等標(biāo)號(hào)為1引腳進(jìn)入,其他外部中斷同理。

在這16個(gè)從IO引腳進(jìn)入的中斷中,他們的中斷函數(shù)分別為

●EXTI0-EXTI4都有自己獨(dú)立的中斷函數(shù),他們的函數(shù)名分別為EXTI0_IRQHandler~ EXTI4_IRQHandler;

●外部中斷5到9共用一個(gè)中斷函數(shù),函數(shù)名為EXTI9_5_IRQHandler;

●外部中斷10到15共用一個(gè)中斷函數(shù),函數(shù)名為EXTI15_10_IRQHandler。

對(duì)于這些共用中斷函數(shù)的外部中斷,需要在中斷函數(shù)的內(nèi)部進(jìn)一步判斷是那個(gè)外部中斷。

外部中斷的觸發(fā)方式可以有下降沿觸發(fā)和上升沿觸發(fā),這個(gè)可以根據(jù)具體情況來選擇。

1.4 外部中斷應(yīng)用示例

下面我們通過一個(gè)例子來學(xué)習(xí)外部中斷的應(yīng)用。

【例1】使用PE2外部的按鍵KEY0產(chǎn)生外部中斷,每發(fā)生一次外部中斷將LED0的狀態(tài)反轉(zhuǎn)一次。在整個(gè)過程中,LED1以1秒的頻率閃爍。

【實(shí)現(xiàn)過程】

1.設(shè)置系統(tǒng)時(shí)鐘源和系統(tǒng)時(shí)鐘的頻率為72MHz;

2.設(shè)置調(diào)試方式為Serial Wire;

3.設(shè)置與LED0相連的PE12,與LED1相連的PE13工作方式為輸出;

4.設(shè)置與KEY0相連的PE2引腳的為外部中斷引腳,搶占式優(yōu)先級(jí)為3(由于系統(tǒng)滴答定時(shí)器的優(yōu)先級(jí)為0,所以這個(gè)優(yōu)先級(jí)比0低即可)。整個(gè)過程的步驟為:

(1)設(shè)置PE2的工作模式為外部中斷,如圖2所示。

圖片

圖2 PE2引腳設(shè)置為外部中斷示意圖

(2)在GPIO中設(shè)置PE2的中斷觸發(fā)方式為下降沿觸發(fā)(按鍵按下就觸發(fā)),如圖3所示。

圖片

圖3 設(shè)置下降沿觸發(fā)示意圖

(3)設(shè)置外部中斷2的搶占式優(yōu)先級(jí)的值為3,實(shí)際上由于本工程中除了系統(tǒng)滴答定時(shí)器的中斷,其他的中斷都沒有,所以這里設(shè)置不與滴答定時(shí)器的中斷優(yōu)先級(jí)相同即可(滴答定時(shí)器的中斷優(yōu)先級(jí)為0)。設(shè)置步驟和結(jié)果如圖4所示。

圖片

圖4 優(yōu)先級(jí)設(shè)置示意圖

注意,如果EXTI2的中斷的優(yōu)先級(jí)采用默認(rèn),也就是搶占式優(yōu)先級(jí)為0,子優(yōu)先級(jí)也為0,這兩個(gè)優(yōu)先級(jí)跟滴答定時(shí)器(System tick timer)的優(yōu)先級(jí)一樣,則可能在中斷中使用延時(shí)函數(shù)HAL_Delay()時(shí),有可能會(huì)使系統(tǒng)死機(jī)(延時(shí)函數(shù)HAL_Delay()通過tick 定時(shí)器的中斷來工作,當(dāng)進(jìn)入EXTI2中斷函數(shù)執(zhí)行時(shí),tick 定時(shí)器的中斷得不到及時(shí)執(zhí)行,所以會(huì)出現(xiàn)死機(jī)現(xiàn)象!)。

5.配置好中斷后,接下來是配置工程名、工程存放路徑等信息,然后點(diǎn)擊生成代碼,生成代碼后,我們需要補(bǔ)充如下功能:

(1)在主函數(shù)的while循環(huán)中補(bǔ)充是的LED1閃爍的程序段,具體如圖5所示。

圖片

圖5 LED1閃爍程序段示意圖

(2)編寫中斷服務(wù)回調(diào)函數(shù),注意不是中斷服務(wù)函數(shù),該函數(shù)的內(nèi)容如圖6所示。

圖片

圖6 EXTI2的中斷回調(diào)(callback)函數(shù)

程序編寫好后,編譯程序并將程序下載到開發(fā)板中,可以看到LED1閃爍,LED0則是按下一次KEY0鍵LE0的狀態(tài)反轉(zhuǎn)一次,任務(wù)目標(biāo)完成。

1.5 HAL庫中中斷函數(shù)的執(zhí)行流程

在剛才的步驟中,有一步為編寫中斷服務(wù)回調(diào)函數(shù),注意,為回調(diào)函數(shù)而不是中斷服務(wù)函數(shù),這跟我們前面的介紹是不是互相矛盾呢?我們通過觀察CubeMX生成的工程的中斷的執(zhí)行流程來回答這個(gè)問題。這個(gè)流程如下:

①系統(tǒng)接收到EXTI2的中斷請(qǐng)求并響應(yīng)后,到.s文件中尋找到該中斷函數(shù)的入口,如圖7所示。

圖片

圖7 外部中斷EXTI2的中斷服務(wù)函數(shù)的入口示意圖

②由于函數(shù)的名字就是函數(shù)的入口,所以找到入口后,接下來執(zhí)行函數(shù)EXTI2_IRQHandler,如圖8所示。函數(shù)EXTI2_IRQHandler就是EXTI2的中斷服務(wù)函數(shù)。

圖片

圖8 中斷服務(wù)函數(shù)EXTI2_IRQHandler的內(nèi)容

③執(zhí)行通用IO口外部中斷函數(shù)HAL_GPIO_EXTI_IRQHandler(),這個(gè)函數(shù)是一個(gè)通用函數(shù),其他的GPIO口的外部中斷都調(diào)用這個(gè)函數(shù),它的參數(shù)只有一個(gè),就是中斷的輸入引腳標(biāo)號(hào),實(shí)際上就是外部中斷線編號(hào)。函數(shù)HAL_GPIO_EXTI_IRQHandler的內(nèi)容如圖9所示。

圖片

圖9 通用外部中斷函數(shù)的內(nèi)容示意圖

由圖9可以看到,在該函數(shù)中,在判斷GPIO_Pin引腳對(duì)應(yīng)的標(biāo)志位為真后執(zhí)行兩個(gè)動(dòng)作,分別是

●使用宏__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin)來清除標(biāo)志位,以便下一次的中斷能夠進(jìn)來;

●調(diào)用中斷回調(diào)函數(shù)HAL_GPIO_EXTI_Callback(),我們要實(shí)現(xiàn)的中斷需要做的事情就在中斷回調(diào)函數(shù)中實(shí)現(xiàn),所以在前面的步驟中,我們編寫的是中斷回調(diào)函數(shù)的代碼,而不是中斷服務(wù)函數(shù)的代碼,當(dāng)然,大家也可以將代碼內(nèi)容直接寫到中斷服務(wù)函數(shù)中。

1.6 外部中斷實(shí)驗(yàn)中涉及到的HAL庫的函數(shù)/宏及其他相關(guān)知識(shí)

1.獲取外部中斷標(biāo)志位和清除外部中斷標(biāo)志位

中斷標(biāo)志位被置1說明該中斷獲得了響應(yīng),獲得響應(yīng)后要在中斷服務(wù)函數(shù)中清除該標(biāo)志位,以使得下次該中斷有中斷申請(qǐng)到來時(shí)能獲得響應(yīng)。HAL庫中,獲取中斷標(biāo)志位和清除中斷標(biāo)志位分別用下面兩個(gè)宏來完成。

●獲取中斷標(biāo)志位:__HAL_GPIO_EXTI_GET_IT()

●清除中斷標(biāo)志位: __HAL_GPIO_EXTI_CLEAR_IT()

這兩個(gè)宏都只有一個(gè)參數(shù),就是外部中斷輸入引腳的編號(hào)。

注意,與HAL庫中的函數(shù)不用,HAL庫中宏名用兩個(gè)下劃線開始,其格式為

“__” + “HAL” + 模塊名 + 執(zhí)行動(dòng)作名

2.外部中斷回調(diào)函數(shù)HAL_GPIO_EXTI_Callback()

HAL庫中回調(diào)函數(shù)使用Callback結(jié)尾,對(duì)于外部中斷回調(diào)函數(shù),它只有一個(gè)參數(shù),這個(gè)參數(shù)就是外部中斷的編號(hào)—也即外部中斷輸入IO引腳的標(biāo)號(hào)。

3.HAL庫初始化函數(shù)HAL_Init()

每次我們用STM32CubeMX生成工程時(shí),主函數(shù)中的第一條語句就是執(zhí)行函數(shù)HAL_Init()的內(nèi)容,這個(gè)函數(shù)具體做什么呢?我們打開看一下,可以看到這個(gè)函數(shù)的內(nèi)容如圖10所示。

圖片

圖10 HAL庫初始化函數(shù)HAL_Init()的內(nèi)容

由圖可見,函數(shù)HAL_Init()主要所兩個(gè)事,分別是:

①設(shè)置搶占式優(yōu)先級(jí)的位數(shù),這里是設(shè)置為4位,其值可以從015,所以搶占式優(yōu)先級(jí)可以設(shè)置為015的任意數(shù)字。

②配置tick timer定時(shí)器,并設(shè)置它的優(yōu)先級(jí)。

1.7 結(jié)論及注意事項(xiàng)

在本章的學(xué)習(xí)中,主要注意以下幾點(diǎn):

1.發(fā)生外部中斷后,在系統(tǒng)提供的中斷服務(wù)函數(shù)中已經(jīng)清除了中斷標(biāo)志位,所以大家在編寫中斷回調(diào)函數(shù)的時(shí)候不需要再次清除中斷標(biāo)志位。

2.中斷的優(yōu)先級(jí)不要跟tick timer,也就是滴答定時(shí)器的中斷優(yōu)先級(jí)一樣,否則在中斷回調(diào)函數(shù)中使用HAL_Delay函數(shù)時(shí)會(huì)出現(xiàn)死機(jī)現(xiàn)象。

3.GD32/STM32的優(yōu)先級(jí)是:優(yōu)先級(jí)值越小的中斷,它的中斷優(yōu)先級(jí)越高。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19684

    瀏覽量

    232681
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    485

    瀏覽量

    63385
  • 外部中斷
    +關(guān)注

    關(guān)注

    1

    文章

    132

    瀏覽量

    16030
  • GD32F103
    +關(guān)注

    關(guān)注

    5

    文章

    18

    瀏覽量

    9585
  • stm32cubemx
    +關(guān)注

    關(guān)注

    5

    文章

    286

    瀏覽量

    15834
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    GD32外部中斷介紹

    起因介紹因?yàn)楣局坝?b class='flag-5'>GD32F4和周立功的CSM300產(chǎn)品的一個(gè)SPI轉(zhuǎn)CAN模塊,做了個(gè)產(chǎn)品,其在收到CAN幀時(shí)INT引腳會(huì)為由高電平轉(zhuǎn)為低電平。需要做一個(gè)中斷接收的程序防止丟包。GD32
    發(fā)表于 08-16 08:36

    如何實(shí)現(xiàn)GD32外部中斷的軟件配置

    如何實(shí)現(xiàn)GD32外部中斷的軟件配置
    發(fā)表于 11-17 06:46

    GD32串口dma接收空閑中斷配置流程是怎樣的?

    GD32串口dma接收空閑中斷配置流程是怎樣的,用過的朋友分享下經(jīng)驗(yàn)。現(xiàn)在已經(jīng)實(shí)現(xiàn)串口+DMA的發(fā)送和接收,都沒有問題,并且使用查詢idle方式也可以接收不定長(zhǎng)數(shù)據(jù)幀。參照stm32的配置方法和順序配置
    發(fā)表于 11-03 07:51

    STM32外部中斷實(shí)現(xiàn)紅外遙控功能

    STM32外部中斷實(shí)現(xiàn)紅外遙控功能。
    發(fā)表于 12-14 15:49 ?67次下載

    GD32-Colibri-F207實(shí)驗(yàn)板中斷主從機(jī)通信

    GD32-Colibri-F207實(shí)驗(yàn)板中斷主從機(jī)通信,很好的GD32資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-21 11:19 ?10次下載

    GD32-Colibri-F207實(shí)驗(yàn)板中斷主從機(jī)通信發(fā)送

    GD32-Colibri-F207實(shí)驗(yàn)板中斷主從機(jī)通信發(fā)送,很好的GD32資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-21 11:51 ?9次下載

    GD32硬件中斷錯(cuò)誤寄存器及相應(yīng)位功能

    本文描述的是GD32硬件中斷錯(cuò)誤的所有寄存器以及相應(yīng)的位功能。
    發(fā)表于 08-28 15:32 ?10次下載

    中斷系統(tǒng)詳解、外部中斷

    圖:允許中斷:配置中斷方式:編寫中斷處理函數(shù):5個(gè)中斷源的中斷入口及中斷級(jí)別:
    發(fā)表于 11-22 12:51 ?14次下載
    <b class='flag-5'>中斷</b>系統(tǒng)詳解、<b class='flag-5'>外部</b><b class='flag-5'>中斷</b>

    STM32 中斷原理及外部中斷實(shí)現(xiàn)

    NVIC 中斷配置Nested Vectored Interrupt Controller,嵌套向量中斷控制器。CM3支持256個(gè)中斷,16個(gè)內(nèi)核中斷,240個(gè)
    發(fā)表于 11-23 18:06 ?1次下載
    STM32 <b class='flag-5'>中斷</b>原理及<b class='flag-5'>外部</b><b class='flag-5'>中斷</b>的<b class='flag-5'>實(shí)現(xiàn)</b>

    GD32系列外部中斷

    起因介紹因?yàn)楣局坝?b class='flag-5'>GD32F4和周立功的CSM300產(chǎn)品的一個(gè)SPI轉(zhuǎn)CAN模塊,做了個(gè)產(chǎn)品,其在收到CAN幀時(shí)INT引腳會(huì)為由高電平轉(zhuǎn)為低電平。需要做一個(gè)中斷接收的程序防止丟包。GD32
    發(fā)表于 11-24 17:06 ?14次下載
    <b class='flag-5'>GD32</b>系列<b class='flag-5'>外部</b><b class='flag-5'>中斷</b>

    stm32外部中斷系列

    實(shí)現(xiàn)步驟1.如果串口中斷先配置串口,gpio中斷先配置gpio2.串口中斷組的選擇3.串口外部中斷
    發(fā)表于 11-26 12:36 ?2次下載
    stm32<b class='flag-5'>外部</b><b class='flag-5'>中斷</b>系列

    GD32外部中斷(按鍵問題實(shí)現(xiàn)

    平臺(tái):GD32F350G8背景:工作的關(guān)系接觸到了gd32的一個(gè)開發(fā)板,老板的第一個(gè)需求就是利用中斷實(shí)現(xiàn)按鍵控制LED,并嘗試長(zhǎng)按短按,前后搞了好幾天,到處去尋找資料,好在皇天不負(fù)有心
    發(fā)表于 12-02 15:06 ?15次下載
    <b class='flag-5'>GD32</b><b class='flag-5'>外部</b><b class='flag-5'>中斷</b>(按鍵問題<b class='flag-5'>實(shí)現(xiàn)</b>)

    STM32如何配置外部中斷?STM32外部中斷配置步驟

    觸發(fā)或上升沿觸發(fā)的外部中斷線。這些中斷線可以通過中斷線控制器(EXTI)進(jìn)行設(shè)置,并可以綁定到不同的GPIO端口上,以實(shí)現(xiàn)
    的頭像 發(fā)表于 10-26 17:47 ?4188次閱讀

    GD32如何配置中斷優(yōu)先級(jí)分組以及中斷優(yōu)先級(jí)

    使用GD32 MCU的過程中,大家可能會(huì)有以下疑問:中斷優(yōu)先級(jí)如何配置和使用?
    的頭像 發(fā)表于 01-10 10:30 ?3543次閱讀
    <b class='flag-5'>GD32</b>如何配置<b class='flag-5'>中斷</b>優(yōu)先級(jí)分組以及<b class='flag-5'>中斷</b>優(yōu)先級(jí)

    GD32 MCU是如何進(jìn)入中斷函數(shù)的

    用過GD32 MCU的小伙伴們都知道,程序是順序執(zhí)行的,但當(dāng)有中斷來的時(shí)候程序會(huì)跳轉(zhuǎn)到中斷函數(shù),執(zhí)行完中斷函數(shù)后程序又繼續(xù)回到原來的位置繼續(xù)執(zhí)行,那么你們知道MCU是如何找到
    的頭像 發(fā)表于 01-30 09:45 ?1362次閱讀
    <b class='flag-5'>GD32</b> MCU是如何進(jìn)入<b class='flag-5'>中斷</b>函數(shù)的
    主站蜘蛛池模板: 精品成人在线观看 | 国产gav成人免费播放视频 | 国产美女视频黄a视频全免费网站 | 福利天堂| 亚洲va老文色欧美黄大片人人 | 欧美一级特黄aa大片视频 | 黄色高清视频网站 | www.亚洲免费 | 毛片网在线 | 五月激情综合网 | 久久男人的天堂色偷偷 | 一区二区精品 | 日韩特级毛片免费观看视频 | 国产精品嫩草影院在线播放 | 国产午夜在线观看视频 | 激情六月丁香 | 国产色婷婷精品免费视频 | 黄色欧美视频 | 羞羞爱爱| 日本午夜片成年www 日本午夜三级 | 午夜噜噜噜私人影院在线播放 | 看看一级毛片 | 哪里可以看免费毛片 | 日本网络视频www色高清免费 | 国产视频国产 | 天天色色网| 午夜无码国产理论在线 | 复古毛片 | 亚洲国产婷婷综合在线精品 | 国产视频一二 | 性欧美17一18sex性高清 | 日本日b视频 | 四只虎免费永久观看 | 日本加勒比在线播放 | 好黄好硬好爽好刺激 | 色视频网| 人人精品| 碰免费人人人视频 | 国产女人水多白浆 | 色偷偷7777www人 | 神马福利|