精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

【GD32 MCU 入門教程】GD32 MCU 常見外設介紹(4)EXTI 中斷介紹

聚沃科技 ? 2024-08-13 11:20 ? 次閱讀

EXTI(中斷/事件控制器)包含多個相互獨立的邊沿檢測電路并且能夠向處理器內核產生中斷請求或喚醒事件。 EXTI 有三種觸發類型:上升沿觸發、下降沿觸發和任意沿觸發。 EXTI中的每一個邊沿檢測電路都可以獨立配置和屏蔽。

4.1.GD32 EXTI 外設原理簡介

GD32 EXTI 主要特性(以 GD32F30x 為例)

? 高效的中斷處理;

? 支持異常搶占和咬尾中斷;

? 將系統從省電模式喚醒;

? 3 種觸發類型:上升沿觸發,下降沿觸發和任意沿觸發;

? 軟件中斷或事件觸發;

? 可配置的觸發源;

? Cortex-M4系統異常;

? 多達68種可屏蔽的外設中斷;

? 4位中斷優先級配置位,可配置16個中斷優先級;

? EXTI中有多達20個相互獨立的邊沿檢測電路;

EXTI 框圖

輸入圖片說明

如圖所示,EXTI 可分為兩大部分功能,一個是產生中斷,另一個是產生事件。EXTI的輸入線可以通過寄存器設置為任意GPIO,也可以是一些外設的事件,輸入線是存在電平變化的信號

EXTI包含一個邊沿檢測電路,它會根據上升沿觸發選擇寄存器和下降沿觸發選擇寄存器對應位的設置來控制信號觸發。邊沿檢測電路以輸入線作為信號輸入端,如果檢測到有邊沿跳變就輸出有效信號給邊沿檢測電路,否則輸出無效信號,而通過配置寄存器,可設置邊沿檢測電路響應跳變過程,如設置為上升沿觸發、下降沿觸發和雙邊沿觸發。

EXTI還包含一個或門電路,它一個輸入來自邊沿檢測電路,另外一個輸入來自軟件中斷事件寄存器。軟件中斷事件寄存器允許我們通過程序控制就可以啟動中斷/事件線,這在某些地方非常有用。

中斷/事件線

不同系列的MCU對應有不同數量、不同種類的中斷/事件線,以GD32F10x系列為例,如EXTI中斷線圖所示它有20個中斷/事件線,每個 GPIO都可以被設置為輸入線,占用 EXTI0至EXTI15,另外 4根特定外設中斷/事件線由外設觸發,比如EXTI16代表低壓檢測LVD中斷、EXTI17代表RTC鬧鐘中斷、EXTI18代表USB喚醒中斷、EXTI19代表以太網喚醒中斷。

EXTI 中斷線

輸入圖片說明

EXTI0至 EXTI15用于 GPIO,通過編程控制可以實現任意一個 GPIO作為 EXTI的輸入源。由表可知,EXTI0 可以通過 EXTI源選擇寄存器0寄存器(AFIO_EXTISS0)的EXTI0_SS[3:0]位選擇配置為 PA0、PB0、PC0、PD0、PE0、PF0、PG0,其他 EXTI線(EXTI中斷/事件線)使用配置都是類似的。

注意:多組中同一標號PIN僅可配置一個IO口為外部中斷,例: PA0、 PB0、 PC0僅支持三個中的其中一個IO口產生外部中斷,不支持三個同為外部中斷模式。

各系列 EXTI 功能差異

GD32系列MCU有關SPI外設各系列功能差異如 GD32 MCU 各系列 EXTI 功能差異表所示。

輸入圖片說明

4.2.硬件連接說明

外部中斷輸入檢測可以通過配置上升沿、下降沿或者任意沿觸發,讀者可根據輸入信號的初始狀態進行配置。如按鍵設計原理圖所示,該圖為GD32 開發板按鍵設計原理圖,在按鍵未按下時KEY引腳狀態為高電平,按下后,引腳電平狀態為低電平,因而可以配置為下降沿(按鍵按下時)觸發EXTI、上升沿(按鍵松開后)觸發EXTI或任意沿(按鍵按下和松開后)觸發EXTI。

輸入圖片說明

4.3.軟件配置說明

本小節講解EXTI_Example歷程中EXTI模塊的配置說明,主要包括外設時鐘配置、GPIO引腳配置、EXTI外設配置、主函數介紹以及運行結果。本例程主要介紹GD32 MCU各系列EXTI外部中斷的使用。

外設時鐘配置

外設時鐘配置如代碼清單EXTI例程時鐘配置代碼所示,在該歷程中使用PA0作為EXTI輸入檢測引腳,因而,在GD32全系列MCU中均需打開GPIOA的時鐘,另外,在GD32F1X0、GD32F3X0和GD32E23X中需要打開CFGCMP時鐘,以及在GD32F4XX中需要打開SYSCFG時鐘,主要由于 EXTI源選擇控制位在系統配置寄存器中。

void rcu_config(void) { #if defined GD32F10X_HD || GD32F30X_HD || GD32F20X_CL || GD32E10X rcu_periph_clock_enable(RCU_GPIOA); #elif defined GD32F1X0 || GD32F4XX || GD32F3X0 || GD32E23X rcu_periph_clock_enable(RCU_GPIOA); #if defined GD32F1X0 || GD32F3X0 || GD32E23X rcu_periph_clock_enable(RCU_CFGCMP); #elif defined GD32F4XX rcu_periph_clock_enable(RCU_SYSCFG); #endif #endif }

GPIO 引腳配置

GPIO引腳配置如代碼清單EXTI例程GPIO引腳配置代碼所示,PA0引腳需要配置為浮空輸入狀態。

void gpio_config(void) { #if defined GD32F10X_HD || GD32F30X_HD || GD32F20X_CL || GD32E10X gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_0); #elif defined GD32F1X0 || GD32F4XX || GD32F3X0 || GD32E23X gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_0); #endif }

EXTI 外設配置

EXTI外設配置代碼如代碼清單EXTI例程EXTI外設配置代碼所示,在該代碼中,首先使能EXTI中斷,之后配置EXTI源以及所需要的邊沿,最后清除EXTI中斷標志。

void exti_config(void) { #if defined GD32F10X_HD|| GD32F30X_HD || GD32F1X0 || GD32F20X_CL || GD32F4XX || GD32F3X0 || GD32E10X || GD32E23X #if defined GD32F1X0 || GD32F3X0 || GD32E23X || GD32F4XX #if defined GD32E23X /* enable and set key EXTI interrupt to the lowest priority */ nvic_irq_enable(EXTI0_1_IRQn, 2U); #elif defined GD32F4XX nvic_irq_enable(EXTI0_IRQn, 2U,0U); #elif defined GD32F1X0 || GD32F3X0 nvic_irq_enable(EXTI0_1_IRQn, 2U,0U); #endif /* connect key EXTI line to key GPIO pin */ syscfg_exti_line_config(EXTI_SOURCE_GPIOA, EXTI_SOURCE_PIN0); /* configure key EXTI line */ exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING); exti_interrupt_flag_clear(EXTI_0); #else nvic_irq_enable(EXTI0_IRQn, 2U,0U); gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOA, GPIO_PIN_SOURCE_0); /* configure key EXTI line */ exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING); exti_interrupt_flag_clear(EXTI_0); #endif #endif }

主函數說明及中斷處理函數說明

主函數配置十分簡單,如代碼清單EXTI例程主函數所示,主要包括外設時鐘初始化調用、GPIO初始化調用以及EXTI配置函數。

int main(void) { /* peripheral clock enable */ rcu_config(); /* GPIO config */ gpio_config(); /* SPI config */ exti_config(); while(1) { } }

中斷處理函數如代碼清單EXTI中斷處理函數所示。在中斷處理函數中,首先判斷產生EXTI的中斷是否為EXTI_0的中斷標志,如果是,則進入EXTI_0的中斷處理,處理完成后,清除EXTI_0的中斷標志。

void EXTI0_IRQHandler(void) { if(exti_interrupt_flag_get(EXTI_0) == SET) { exti_interrupt_flag_clear(EXTI_0); } }

運行結果

將EXTI_Example例程按照對應的芯片工程編譯完成后,下載到對應芯片中,在中斷處理函數中加斷點,可以發現,當PA0有下降沿發生時,會產生EXTI中斷,進入EXTI中斷處理函數。

教程GD32 MCU方案商聚沃科技原創發布,了解更多GD32 MCU教程,關注聚沃科技官網

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

    關注

    6032

    文章

    44514

    瀏覽量

    632949
  • mcu
    mcu
    +關注

    關注

    146

    文章

    16984

    瀏覽量

    350293
  • 嵌入式
    +關注

    關注

    5068

    文章

    19014

    瀏覽量

    303231
  • GD32
    +關注

    關注

    7

    文章

    403

    瀏覽量

    24218
  • EXTI
    +關注

    關注

    0

    文章

    27

    瀏覽量

    3672
收藏 人收藏

    評論

    相關推薦

    GD32 MCU 入門教程GD32 MCU 常見外設介紹(12)FMC 模塊介紹

    閃存控制器(FMC),提供了片上閃存需要的所有功能。FMC 也提供了頁擦除,整片擦除,以及32 位整字或 16 位半字編程閃存等操作。 GD32 MCU 支持不同類型編程的具體說明如下表 GD32
    的頭像 發表于 08-21 09:56 ?978次閱讀
    <b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>常見外設</b><b class='flag-5'>介紹</b>(12)FMC 模塊<b class='flag-5'>介紹</b>

    GD32的外部中斷介紹

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

    GD32MCU介紹

    其實兆芯的MCU為了兼容ST,外設的寄存器設計與ST保持一致了。比如GD32VF103或者GD32E103系列的USBFS這個外設,基本等同
    發表于 11-01 06:03

    GD32 MCU原理及固件庫開發指南》 + 初讀感悟

    GD32 MCU原理固件庫開發指南這本書內容豐富,囊括了GD32中的所有外設,書中首先介紹了如何使用MDK或IAR軟件搭建
    發表于 03-31 22:11

    GD32 MCU原理及固件庫開發指南》+讀后感

    。 第2章介紹GD32 MCU快速入門與開發平臺搭建的方法,包括對軟硬件開發平臺、調試工具、GD32 M
    發表于 06-06 21:52

    兆易創新GD32 MCU選型手冊,適用于GD32全系列MCU

    兆易創新GD32MCU選型手冊,適用于GD32全系列MCUGD32MCU選型手冊,適用于GD32全系列MCU
    發表于 10-19 17:26 ?49次下載

    你了解GD32 MCU的命名規則嗎

    下面為大家介紹GD32 MCU的通用命名規則,以GD32F303ZGT6為例,其中,GD32代表GD32
    的頭像 發表于 01-13 09:38 ?3445次閱讀
    你了解<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>的命名規則嗎

    GD32 MCU的選項字節是什么?

    GD32 MCU的選項字節是什么,有什么功能呢?選項字節被誤篡改如何回復?
    的頭像 發表于 01-17 09:42 ?1259次閱讀
    <b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>的選項字節是什么?

    不同型號的GD32 MCU如何區分?

    大家是否碰到過以下應用場景:同一套軟件代碼希望跑在不同型號的GD32 MCU中,但有些地方需要根據MCU型號進行調整?或者上位機或其他MCUGD3
    的頭像 發表于 01-27 09:32 ?950次閱讀
    不同型號的<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>如何區分?

    GD32 MCU 入門教程】一、GD32 MCU 開發環境搭建(1)使用Keil開發GD32

    GD32系列為通用型MCU,所以開發環境也可以使用通用型的IDE,目前使用較多的是KEIL、IAR、 GCC和Embedded Builder,客戶可以根據個人喜好來選擇相應的開發環境。
    的頭像 發表于 08-08 15:01 ?1009次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】一、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 開發環境搭建(1)使用Keil開發<b class='flag-5'>GD32</b>

    GD32 MCU 入門教程】一、GD32 MCU 開發環境搭建(2)使用 IAR 開發 GD32

    GD32系列為通用型MCU,所以開發環境也可以使用通用型的IDE,目前使用較多的是KEIL、IAR、 GCC和Embedded Builder,客戶可以根據個人喜好來選擇相應的開發環境。
    的頭像 發表于 08-08 15:40 ?588次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】一、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 開發環境搭建(2)使用 IAR 開發 <b class='flag-5'>GD32</b>

    GD32 MCU 入門教程】一、GD32 MCU 開發環境搭建(3)使用 Embedded Builder 開發 GD32

    GD32系列為通用型MCU,所以開發環境也可以使用通用型的IDE,目前使用較多的是KEIL、IAR、 GCC和Embedded Builder,客戶可以根據個人喜好來選擇相應的開發環境。
    的頭像 發表于 08-08 16:03 ?827次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】一、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 開發環境搭建(3)使用 Embedded Builder 開發 <b class='flag-5'>GD32</b>

    GD32 MCU 入門教程GD32 MCU 常見外設介紹(14)RTC 模塊介紹

    GD32 MCU內部提供了一個RTC(實時時鐘)模塊,通過RTC可以實現日歷時鐘、鬧鐘等功能。RTC也可以用于深度睡眠或待機模式的低功耗喚醒。不同系列的GD32 MCU在RTC設計和功
    的頭像 發表于 08-23 09:18 ?374次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>常見外設</b><b class='flag-5'>介紹</b>(14)RTC 模塊<b class='flag-5'>介紹</b>

    GD32 MCU 入門教程GD32 MCU FPU 使用方法

    GD32 MCU FPU 使用方法
    的頭像 發表于 08-25 09:24 ?466次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> FPU 使用方法

    GD32 MCU入門教程GD32 MCU GPIO 結構與使用注意事項

    本文是專門為基于GD32 MCU開發的工程設計人員提供,主要介紹了GPIO的功能配置、內部結構以及在不同場景使用時的注意事項,旨在幫助GD32 MC
    的頭像 發表于 09-07 10:34 ?583次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b><b class='flag-5'>入門教程</b>】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> GPIO 結構與使用注意事項