用過GD32 MCU的小伙伴們都知道,程序是順序執行的,但當有中斷來的時候程序會跳轉到中斷函數,執行完中斷函數后程序又繼續回到原來的位置繼續執行,那么你們知道MCU是如何找到中斷函數入口的嗎?
今天我們就以GD32F303系列的EXTI0中斷來描述下MCU是如何進入中斷的。
首先來看一個簡單的代碼(以Keil為開發環境):

這段程序初始化了兩個LED燈,并將一個按鍵設置為中斷模式,這里用的是PA0,所以中斷號也為0,即EXTI0。
再來看一下中斷函數:

中斷函數也很簡單,當有中斷發生的時候,去翻轉一個LED燈狀態。
好,我們通過map文件看下這個中斷函數的地址在哪里(不會的小伙伴可以看看前面的視頻——《如果查看GD32 Keil和IAR工程的map文件》哦):

沒錯,中斷函數就保存在0x08000193開始的flash地址中,且該函數占用了24個byte的空間。
正常情況下,程序是不會跳轉到這個地址去執行的,那為什么中斷信號一來,程序就直接跳轉過去了呢?
下面重點來了,小伙伴們要仔細聽哦。
我們來看下GD32F30x系列的啟動文件:

其中用匯編寫了一段代碼:使用DCD指令(DCD指令是為特定的數據分配地址)將棧頂指針__initial_sp和中斷函數分配到flash最開始的地址中去,我們看下flash中的數據:

用紅框標注的數據就是程序的棧頂指針,再看下第23個地址也就是0x08000058保存的數據,就是0x08000193,剛好就是中斷函數EXTI0_IRQHandler的入口。

實際上,flash最開始保存的這一段數據有個專有名詞——中斷向量表,可以通過GD32F30x的用戶手冊查到:

注意:因為向量編號是從0開始的(0號即為棧頂指針),所以EXTI0的中斷編號為22,也就存在flash第23個地址(按字對齊)中。
當有EXTI0中斷發生,MCU會知道是22號中斷來了,內部總線就會去查flash最開始地址中的中斷向量表,找到第23個地址(0x08000058),并取得里面的數據也就是中斷函數的入口,然后就跳轉到中斷函數中執行程序了。
關鍵字:GD32 中斷函數
引用地址:
GD32 MCU是如何進入中斷函數的
推薦閱讀最新更新時間:2025-06-07 23:47
STM32使用freertos時在中斷中調用系統函數的注意點
CORTEX內核的優先級是數值越小優先級越高,即0是最高優先級。FreeRTOS正好相反,為了滿足某些應用對中斷實時性要求高的需求,使得中斷優先級高于某個值之后,就不能調用操作系統的內核函數來提高實時性。而我們經常所犯的錯誤就是將中斷的優先級設置的高于這個值,卻還在中斷中調用操作系統提供的API引起的。當把優先級改小也就是數值改大之后,程序能夠正常運行。 注意點: 1:首先要將中斷的嵌套設置為搶占優先級。 2:將freertos系統內核中斷(configKERNEL_INTERRUPT_PRIORITY)的優先級設置成最低。 3:將freertos的最大系統調用中斷優先級(configMAX_SYSCALL_IN
[單片機]
【GD32 MCU 入門教程】GD32 MCU 常見外設介紹 (6) ADC 模塊介紹
6.1.ADC 基礎知識 12 位逐次逼近式模數轉換器模塊(ADC),可以采樣來自于外部輸入通道、內部輸入通道的模擬信號,采樣轉換后,轉換結果可以按照最低有效位對齊或最高有效位對齊的方式保存在相應的數據寄存器中。 6.2.GD32 ADC 外設原理 GD32 ADC 主要特性 ? 高性能: – ADC采樣分辨率: 12位、 10位、 8位、或者6位分辨率; – 前置校準功能; – 可編程采樣時間; – 數據存儲模式:最高有效位對齊和最低有效位對齊; – 支持規則數據轉換的DMA請求。 ? 模擬輸入通道: – 16個外部模擬輸入通道; – 1個內部溫度傳感器輸入通道(VSENSE); – 1個內部參考電壓輸入通道(VREFINT
[單片機]
GD32對Timer定時器原理的詳細講解
GD32 Timr定時器看起來比較復雜啊。一看GD32E10x 的SPEC:一個高級定時器,三個通用定時器,還有一個基本定時器。 項目上想用來做分時處理程序都不知道用哪個? 就用通用的定時器 timer1 一起看下時鐘樹,如下圖所示: GD32時鐘樹部分硬件展示 TIMER1的時鐘是CK_TIMER1,要提供CK_TIMER1需要TIMER1 enable并且需要提供具體的時鐘 具體的時鐘 if(APB1 prescale = 1 ) x 1 else x 2 我們的CK_SYS時鐘(系統時鐘)經過Prescaler之后最大頻率是CK_AHB(120MHz) 然后經過預分頻,APB1頻率最大到60MHz,如果預分頻系數是1的
[單片機]
GD32芯片怎么樣?GD32芯片運行速度慢的原因
GD32芯片是一種基于ARM Cortex-M3內核的微控制器(MCU),是中國長江存儲器有限責任公司(GigaDevice)推出的產品系列。與NXP LPC、STMicroelectronics STM32、TI MSP、Freescale Kinetis等常見的MCU產品相比,GD32芯片具有低功耗、高性價比和良好的性能等特點。 GD32芯片怎么樣? GD32芯片具有以下優點: 1.高性價比:GD32芯片生產成本相對較低,價格也相對更為實惠。 2.低功耗:采用低功耗技術,能夠長時間運行。 3.高集成度:具備豐富的外設,包括LCD、CAN、USB、SPI、I2C等通用接口,適用于多種應用場景。 4.可擴展性好:GD32芯片的應
[單片機]
STM32、GD32、ESP32的區別
01 前言 STM32:意法半導體在 2007 年 6 月 11 日發布的產品,32位單片機。 GD32:兆易創新 2013 年發布的產品,在芯片開發、配置、命名上基本模仿 STM32,甚至 GPIO 和 STM32 都是 pin to pin 的,封裝不改焊上去直接用。有時候 STM32 的源碼不修改,重新編譯燒寫到 GD32 上就可以跑。當然也有很多不同,比如串口驅動、USB 、庫文件等。 ESP32:樂鑫公司 2017 年開發的產品,和 STM32、GD32 不同,ESP32 主要面向物聯網領域,支持功能很多,但引出 GPIO pin 腳很少,因此大多數 GPIO 都有很多復用功能。出廠就集成藍牙、WiFi 等物聯網
[單片機]
兆易創新及GD32系列產品蟬聯“十大大中華 IC 設計公司”和“年度最佳MCU”大獎
日前,在2017年度大中華IC領袖峰會暨大中華IC設計成就獎頒獎盛典上,兆易創新(GigaDevice)和GD32 MCU產品再度包攬“十大大中華 IC 設計公司”和“年度最佳處理器/MCU/FPGA” 兩項大獎!下面就隨單片機小編一起來了解一下相關內容吧。 3月24日,由全球領先電子行業媒體集團AspenCore旗下的《電子工程專輯》、《EDN 電子技術設計》和《國際電子商情》在上海浦東嘉里大酒店舉行2017年度大中華IC領袖峰會暨大中華IC設計成就獎頒獎盛典。經過IC產業人士,系統設計工程師以及媒體分析師團隊歷時6個月的層層選拔,兆易創新(GigaDevice)和 GD32系列MCU憑借高質量的產品和杰出的市場表現,贏得了業
[單片機]
陳光祖:單片機是汽車電子業發展基石
單片機的電子學名稱為微控制器(MCU),在當代單片機已成為汽車電子產業發展的基石。單片機并不是什么神秘的東西,它已廣泛的存在于人們工作與生活方方面面,無時不刻的在接觸與使用中,只不過它裝在電器產品的內在空間,我們很少能看到,也意識不到而已。如我們的手機、電視、空調、微波器、洗衣機、音響、電熱水器、汽車……等,都裝有各種各樣的單片機為核心的微型計算機或微處理器中,而且它的作用和地位越來越重要,難怪國內外信息專家說:現在我們正生活在單片機的花花世界中。 那么,什么是單片機?它實際上是一種特殊的,高級的芯片,它不像一般芯片那樣,只能完成某一邏輯的功能,可以說它是非常微妙的腦型芯片。 單片機的作用是將微型計算機上
[單片機]