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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

GD32的中斷-外部中斷的實現

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

處理器:GD32F103VET6

開發環境:MDK(keil 5) + STM32CubeMX

1.1 中斷的作用

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

又如,你在玩游戲,但是一個重要電話進來了,你只得暫停當前的游戲,先接電話,接完電話繼續玩。這也是中斷。

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

1.2 GD32的中斷的執行及其優先級

對于GD32的中斷,我們需要關注以下問題:

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

2.某個模塊申請中斷,并獲得系統同意后,系統將會做什么?中斷申請并獲得通過后,將會執行中斷函數,中斷函數執行完后又回到原來的地方繼續執行。

GD32的各個模塊的中斷函數的函數名廠家已經幫我們取好了,在啟動文件(.s文件)中,具體如圖1所示。

圖片

圖1 GD32的中斷函數

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

GD32的中斷由一個叫NVIC的模塊統一處理,NVIC全稱叫嵌套中斷向量控制器,搶占式優先級、子優先級、中斷允許、中斷失能都在它里面設置。

最后補充說明兩點:

1.GD32的每一個模塊都會有至少一個中斷開關,只有這個開關處于使能狀態,該模塊的中斷信號才能進入到NVIC內部。

2.中斷函數中盡量不要有延時,如必須要延時,則延時要盡量小,要快進快出,不要影響后續的中斷的響應!

1.3 GD32的外部中斷

GD32F103VET6支持19個外部中斷,注意,這里雖然用了外部兩個字,但真正只有16來自于芯片的外部,有3個仍然是在芯片的內部。外部的16個中斷分別為EXTI0~EXTI15,其中EXTI0可以從PA0、PB0、PC0等標號為0的引腳進入,EXTI1可以從PA1、PB1、PC1等標號為1引腳進入,其他外部中斷同理。

在這16個從IO引腳進入的中斷中,他們的中斷函數分別為

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

●外部中斷5到9共用一個中斷函數,函數名為EXTI9_5_IRQHandler;

●外部中斷10到15共用一個中斷函數,函數名為EXTI15_10_IRQHandler。

對于這些共用中斷函數的外部中斷,需要在中斷函數的內部進一步判斷是那個外部中斷。

外部中斷的觸發方式可以有下降沿觸發和上升沿觸發,這個可以根據具體情況來選擇。

1.4 外部中斷應用示例

下面我們通過一個例子來學習外部中斷的應用。

【例1】使用PE2外部的按鍵KEY0產生外部中斷,每發生一次外部中斷將LED0的狀態反轉一次。在整個過程中,LED1以1秒的頻率閃爍。

【實現過程】

1.設置系統時鐘源和系統時鐘的頻率為72MHz;

2.設置調試方式為Serial Wire;

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

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

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

圖片

圖2 PE2引腳設置為外部中斷示意圖

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

圖片

圖3 設置下降沿觸發示意圖

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

圖片

圖4 優先級設置示意圖

注意,如果EXTI2的中斷的優先級采用默認,也就是搶占式優先級為0,子優先級也為0,這兩個優先級跟滴答定時器(System tick timer)的優先級一樣,則可能在中斷中使用延時函數HAL_Delay()時,有可能會使系統死機(延時函數HAL_Delay()通過tick 定時器的中斷來工作,當進入EXTI2中斷函數執行時,tick 定時器的中斷得不到及時執行,所以會出現死機現象!)。

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

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

圖片

圖5 LED1閃爍程序段示意圖

(2)編寫中斷服務回調函數,注意不是中斷服務函數,該函數的內容如圖6所示。

圖片

圖6 EXTI2的中斷回調(callback)函數

程序編寫好后,編譯程序并將程序下載到開發板中,可以看到LED1閃爍,LED0則是按下一次KEY0鍵LE0的狀態反轉一次,任務目標完成。

1.5 HAL庫中中斷函數的執行流程

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

①系統接收到EXTI2的中斷請求并響應后,到.s文件中尋找到該中斷函數的入口,如圖7所示。

圖片

圖7 外部中斷EXTI2的中斷服務函數的入口示意圖

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

圖片

圖8 中斷服務函數EXTI2_IRQHandler的內容

③執行通用IO口外部中斷函數HAL_GPIO_EXTI_IRQHandler(),這個函數是一個通用函數,其他的GPIO口的外部中斷都調用這個函數,它的參數只有一個,就是中斷的輸入引腳標號,實際上就是外部中斷線編號。函數HAL_GPIO_EXTI_IRQHandler的內容如圖9所示。

圖片

圖9 通用外部中斷函數的內容示意圖

由圖9可以看到,在該函數中,在判斷GPIO_Pin引腳對應的標志位為真后執行兩個動作,分別是

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

●調用中斷回調函數HAL_GPIO_EXTI_Callback(),我們要實現的中斷需要做的事情就在中斷回調函數中實現,所以在前面的步驟中,我們編寫的是中斷回調函數的代碼,而不是中斷服務函數的代碼,當然,大家也可以將代碼內容直接寫到中斷服務函數中。

1.6 外部中斷實驗中涉及到的HAL庫的函數/宏及其他相關知識

1.獲取外部中斷標志位和清除外部中斷標志位

中斷標志位被置1說明該中斷獲得了響應,獲得響應后要在中斷服務函數中清除該標志位,以使得下次該中斷有中斷申請到來時能獲得響應。HAL庫中,獲取中斷標志位和清除中斷標志位分別用下面兩個宏來完成。

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

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

這兩個宏都只有一個參數,就是外部中斷輸入引腳的編號。

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

“__” + “HAL” + 模塊名 + 執行動作名

2.外部中斷回調函數HAL_GPIO_EXTI_Callback()

HAL庫中回調函數使用Callback結尾,對于外部中斷回調函數,它只有一個參數,這個參數就是外部中斷的編號—也即外部中斷輸入IO引腳的標號。

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

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

圖片

圖10 HAL庫初始化函數HAL_Init()的內容

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

①設置搶占式優先級的位數,這里是設置為4位,其值可以從015,所以搶占式優先級可以設置為015的任意數字。

②配置tick timer定時器,并設置它的優先級。

1.7 結論及注意事項

在本章的學習中,主要注意以下幾點:

1.發生外部中斷后,在系統提供的中斷服務函數中已經清除了中斷標志位,所以大家在編寫中斷回調函數的時候不需要再次清除中斷標志位。

2.中斷的優先級不要跟tick timer,也就是滴答定時器的中斷優先級一樣,否則在中斷回調函數中使用HAL_Delay函數時會出現死機現象。

3.GD32/STM32的優先級是:優先級值越小的中斷,它的中斷優先級越高。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19825

    瀏覽量

    233768
  • FreeRTOS
    +關注

    關注

    12

    文章

    492

    瀏覽量

    63844
  • 外部中斷
    +關注

    關注

    1

    文章

    133

    瀏覽量

    16115
  • GD32F103
    +關注

    關注

    5

    文章

    18

    瀏覽量

    9633
  • stm32cubemx
    +關注

    關注

    5

    文章

    286

    瀏覽量

    16006
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    GD32外部中斷介紹

    起因介紹因為公司之前用GD32F4和周立功的CSM300產品的一個SPI轉CAN模塊,做了個產品,其在收到CAN幀時INT引腳會為由高電平轉為低電平。需要做一個中斷接收的程序防止丟包。GD32
    發表于 08-16 08:36

    如何實現GD32外部中斷的軟件配置

    如何實現GD32外部中斷的軟件配置
    發表于 11-17 06:46

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

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

    STM32外部中斷實現紅外遙控功能

    STM32外部中斷實現紅外遙控功能。
    發表于 12-14 15:49 ?67次下載

    GD32-Colibri-F207實驗板中斷主從機通信

    GD32-Colibri-F207實驗板中斷主從機通信,很好的GD32資料,快來學習吧。
    發表于 04-21 11:19 ?10次下載

    GD32-Colibri-F207實驗板中斷主從機通信發送

    GD32-Colibri-F207實驗板中斷主從機通信發送,很好的GD32資料,快來學習吧。
    發表于 04-21 11:51 ?9次下載

    GD32硬件中斷錯誤寄存器及相應位功能

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

    中斷系統詳解、外部中斷

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

    STM32 中斷原理及外部中斷實現

    NVIC 中斷配置Nested Vectored Interrupt Controller,嵌套向量中斷控制器。CM3支持256個中斷,16個內核中斷,240個
    發表于 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'>實現</b>

    GD32系列外部中斷

    起因介紹因為公司之前用GD32F4和周立功的CSM300產品的一個SPI轉CAN模塊,做了個產品,其在收到CAN幀時INT引腳會為由高電平轉為低電平。需要做一個中斷接收的程序防止丟包。GD32
    發表于 11-24 17:06 ?14次下載
    <b class='flag-5'>GD32</b>系列<b class='flag-5'>外部</b><b class='flag-5'>中斷</b>

    stm32外部中斷系列

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

    GD32外部中斷(按鍵問題實現

    平臺:GD32F350G8背景:工作的關系接觸到了gd32的一個開發板,老板的第一個需求就是利用中斷實現按鍵控制LED,并嘗試長按短按,前后搞了好幾天,到處去尋找資料,好在皇天不負有心
    發表于 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'>實現</b>)

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

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

    GD32如何配置中斷優先級分組以及中斷優先級

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

    GD32 MCU是如何進入中斷函數的

    用過GD32 MCU的小伙伴們都知道,程序是順序執行的,但當有中斷來的時候程序會跳轉到中斷函數,執行完中斷函數后程序又繼續回到原來的位置繼續執行,那么你們知道MCU是如何找到
    的頭像 發表于 01-30 09:45 ?1480次閱讀
    <b class='flag-5'>GD32</b> MCU是如何進入<b class='flag-5'>中斷</b>函數的
    主站蜘蛛池模板: 一区二区三区精品国产欧美 | 影视精品网站入口 | seetube18日本第一次 | 午夜在线观看免费观看大全 | 欧美ol丝袜高跟秘书在线播放 | 免费超爽视频 | 操操操干干 | avtt天堂网永久资源 | 亚洲卡一卡2卡三卡4卡国色 | 国产精品高清免费网站 | 青草悠悠视频在线观看 | 免费精品视频在线 | 日本免费大黄 | 国产香蕉视频在线 | 亚色视频在线 | 欧美影院一区二区三区 | 伊人网在线免费视频 | 色偷偷综合网 | 辣h高h肉h激h超h | 日韩午夜在线视频不卡片 | 女性一级全黄生活片 | 天天草天天干天天 | 2021国产精品 | 中文字幕在线观看一区二区 | 五月婷婷六月婷婷 | 中文一区二区在线观看 | 狠狠五月深爱婷婷网免费 | 免费国产综合视频在线看 | 国产老头和美女在线观看 | 国产在线观看www鲁啊鲁免费 | 日本三级欧美三级香港黄 | 免费爱做网站在线看 | 妇少香港三日本三级视频 | 欲香欲色 | 天天爱夜夜做 | 1024手机在线看永久免费 | 四虎影永久地址www 四虎影永久在线观看精品 四虎影永久在线观看网址 四虎影院.com | 久久福利国产 | 好看的一级毛片 | 久久精品亚洲精品国产欧美 | 婷婷开心激情 |