3.1實(shí)驗(yàn)內(nèi)容
通過本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容:
EXTI中斷原理;
按鍵中斷檢測原理;
3.2實(shí)驗(yàn)原理
3.2.1NVIC中斷向量控制器
介紹EXTI之前,首先為各位讀者介紹NVIC中斷向量控制器,NVIC為M7內(nèi)核組件,用于實(shí)現(xiàn)高效的異常和中斷處理。NVIC可以支持搶占以及咬尾中斷,具有多達(dá)217種外設(shè)中斷以及4位中斷優(yōu)先等級配置(最多支持16個(gè)中斷有限等級),當(dāng)中斷或異常產(chǎn)生時(shí),系統(tǒng)自動(dòng)將當(dāng)前處理器工作狀態(tài)壓棧,在執(zhí)行完中斷服務(wù)子程序(ISR) 后自動(dòng)將其出棧。
有關(guān)NVIC中斷相關(guān)配置函數(shù)可參考gd32h7xx_misc.c,其中主要有以下幾個(gè)函數(shù),其功能簡介如下表所示。
3.2.2EXTI中斷原理
EXTI為外部中斷/事件控制器,GD32H7系列MCU EXTI可以最多支持38個(gè)相互獨(dú)立的邊沿檢測電路并且能夠向處理器內(nèi)核產(chǎn)生中斷請求或喚醒事件。EXTI有三種觸發(fā)類型:上升沿觸發(fā)、下降沿觸發(fā)和任意沿觸發(fā)。EXTI中的每一個(gè)邊沿檢測電路都可以獨(dú)立配置和屏蔽。
EXTI框圖如下圖所示,極性控制用于控制邊沿檢測,可實(shí)現(xiàn)對外部EXTI信號線進(jìn)行檢測判斷,當(dāng)符合相關(guān)極性配置的EXTI信號出現(xiàn)后,將會(huì)發(fā)出EXTI請求,硬件EXTI請求與內(nèi)部軟件觸發(fā)信號相或,然后輸出給NVIC中斷向量控制器產(chǎn)生中斷以及輸出至喚醒單元進(jìn)行喚醒,也即是內(nèi)部軟件也可以觸發(fā)相關(guān)請求。
EXTI相關(guān)觸發(fā)源如下表所示,所有的GPIO均可以觸發(fā)EXTI,另外LVD、RTC鬧鐘、USB喚醒以及以太網(wǎng)喚醒也可以觸發(fā)EXTI中斷或事件,EXTI可用于喚醒深度睡眠模式下的MCU。
注意:相同編號的引腳共用中斷入口,比如PA0、PB0、PC0均使用EXTI0中斷線,讀者在使用時(shí)需注意不同的EXTI中斷需要使用不同編號的GPIO引腳。
?軟件觸發(fā)EXTI中斷請求可通過設(shè)置EXTI_SWIEV軟件中斷事件寄存器實(shí)現(xiàn),如下圖所示,設(shè)置相應(yīng)控制位為1,即可實(shí)現(xiàn)軟件觸發(fā)EXTI中斷請求。
3.3硬件設(shè)計(jì)
本例程所使用的電路也為按鍵電路,具體可參考2.4章節(jié)描述。
3.4代碼解析
3.4.1主函數(shù)代碼解析
主函數(shù)代碼如下所示,主要包括驅(qū)動(dòng)初始化、LED初始化、key按鍵結(jié)構(gòu)體初始化(此處將用戶按鍵配置為中斷模式,并將中斷回調(diào)函數(shù)注冊為USER_KEY_IRQHandler)、串口初始化以及NVIC配置,用戶按鍵使用的是PA1引腳,因而使能EXTI1_IRQn中斷號,延遲1S后,打印Example of key interrupt detection,之后進(jìn)入主循環(huán),在主循環(huán)中查詢USER_KEY.press_timerms標(biāo)志位,當(dāng)USER_KEY被按鍵觸發(fā)中斷后,該標(biāo)志將會(huì)被設(shè)置為PRESS_DOWN,然后被主循環(huán)檢測到后,將會(huì)打印USER_KEY is pressed to trigger an interrupt。
C
int main(void)
{
driver_init();
bsp_led_group_init();
bsp_led_on(&LED2);
bsp_led_off(&LED1);
/* 配置按鍵為中斷模式,并注冊按鍵回調(diào)函數(shù) */
USER_KEY.key_gpio->gpio_mode = INT_LOW;
USER_KEY.key_gpio->int_callback = USER_KEY_IRQHandler;
bsp_key_init(&USER_KEY);
nvic_irq_enable(EXTI1_IRQn,0,0);
bsp_uart_init(&BOARD_UART);
delay_ms(1000);
printf_log('Example of key interrupt detection.rn');
while (1)
{
if(USER_KEY.press_timerms == PRESS_DOWN)
{
/* 檢測到按鍵被按下 */
USER_KEY.press_timerms = PRESS_NONE;
printf_log('USER_KEY is pressed to trigger an interrupt.rn');
}
}
}
3.4.2按鍵中斷回調(diào)函數(shù)
按鍵中斷回調(diào)函數(shù)如下所示,該函數(shù)在dvire_gpio_exti_handle中被調(diào)用,dvire_gpio_exti_handle在EXTI1_IRQHandler中被調(diào)用,其中EXTI2_IRQHandler為EXTI2的中斷服務(wù)程序入口。
C
void USER_KEY_IRQHandler(typdef_gpio_general *KEYx_IO)
{
if(SET==bsp_key_state_get(&USER_KEY))
{
USER_KEY.press_timerms=PRESS_DOWN;
bsp_led_toggle(&LED2);
bsp_led_toggle(&LED1);
}
}
void dvire_gpio_exti_handle(typdef_gpio_general *gpio)
{
bit_status int_input_bit=RESET;
if(exti_flag_get(gpio->extix)==SET)
{
exti_flag_clear(gpio->extix);
int_input_bit=dvire_gpio_pin_filter_get(gpio);
if( (gpio->gpio_mode==INT_LOW && int_input_bit==RESET) || (gpio->gpio_mode==INT_HIGH && int_input_bit==SET) )
{
if(gpio->int_callback!=NULL)
{
gpio->int_callback((typdef_gpio_general *)gpio);
}
}
}
}
void EXTI1_IRQHandler(void)
{
dvire_gpio_exti_handle(USER_KEY.key_gpio);
}
3.5實(shí)驗(yàn)結(jié)果
將本例程燒錄到海棠派開發(fā)板中,在液晶上首先將會(huì)打印Example of key interrupt detection.,之后按下USER_KEY按鍵后,將會(huì)打印:USER_KEYis pressed to trigger an interrupt.。
上一篇:【GD32F470紫藤派開發(fā)板使用手冊】第十講 USART-中斷串口收發(fā)實(shí)驗(yàn)
下一篇:【GD32F470紫藤派開發(fā)板使用手冊】第四講 FMC-片內(nèi)Flash擦寫讀實(shí)驗(yàn)
推薦閱讀最新更新時(shí)間:2025-06-27 17:20








設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- Microchip 升級數(shù)字信號控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- LT3477IUF 5V 至 4 個(gè)白光 LED、具有 PWM 調(diào)光的升壓的典型應(yīng)用電路
- 使用 TC7117 模數(shù)轉(zhuǎn)換器和 1.2 外部帶隙基準(zhǔn)(VIN - 連接到公共端)的典型應(yīng)用
- 2.5V 輸出 ADR391A 微功耗、低噪聲精密電壓基準(zhǔn)的典型應(yīng)用
- 使用 NXP Semiconductors 的 TDA1016 的參考設(shè)計(jì)
- DC1116,LTC6103 雙通道、高電壓、高側(cè)電流檢測放大器的演示電路
- 使用 Analog Devices 的 ADR441A 的參考設(shè)計(jì)
- 使用 NXP Semiconductors 的 P2020N 的參考設(shè)計(jì)
- MIC22950YML EV,MIC22950 評估套件,一種高效、10A 集成同步降壓(降壓)穩(wěn)壓器
- T4240RDB-PB,QorIQ T4240 參考設(shè)計(jì)板,緊湊型 (U1),具有 24 虛擬核 T4240 器件的高度集成板
- LT1308BIS8 5V 至 12V 升壓轉(zhuǎn)換器的典型應(yīng)用電路
- 晶豐明源:完成DC/DC產(chǎn)品芯片樣品內(nèi)部評估,入客戶送樣
- 大聯(lián)大世平集團(tuán)推出基于NXP產(chǎn)品的PEPS無鑰匙進(jìn)入及啟動(dòng)系統(tǒng)
- 數(shù)字信號源使用注意事項(xiàng)須知
- 蘋果2022春季發(fā)布會(huì)解密!iPhone/iPad新品配置/價(jià)格良心
- 700MW火力發(fā)電廠孤網(wǎng)運(yùn)行的事故處理及分析
- 第41章 STM32F429的LTDC應(yīng)用之LCD漢字顯示和2D圖形顯示
- PSM3000/PSM4000/PSM5000系列功率計(jì)的性能特點(diǎn)及應(yīng)用范圍
- 新能源汽車樣車對標(biāo)benchmarking技術(shù)開發(fā)設(shè)計(jì)
- 雙極步進(jìn)電機(jī)和單極步進(jìn)電機(jī)之間差異
- 納祥科技2W 24位數(shù)字功放NX4920,可用于AI語音播報(bào)、WIFI播放器
- 常用解調(diào)器的定義和工作原理
- 從性能與網(wǎng)絡(luò)傳輸出發(fā),講講鐵威馬MAX系列為什么一騎絕塵
- 惠普選中Hailo下一代人工智能加速器,革新零售業(yè)與酒店業(yè)運(yùn)營模式
- 跨國商務(wù)溝通困局破解之道:時(shí)空壺 W4Pro 全場景應(yīng)用解析
- 從矢量降噪到雙向同傳,時(shí)空壺 W4Pro 如何重構(gòu) AI 同傳技術(shù)標(biāo)準(zhǔn)?
- LoRa+NB-IoT雙模融合,地下車庫信號盲區(qū)電梯場景等的冗余通信
- LoRa與UWB的“定位之戰(zhàn)”,成本敏感場景高精度需求的場景切割
- 時(shí)空壺X1再升級:引領(lǐng)AI同傳新時(shí)代,革新演講翻譯體驗(yàn)
- ARXML 規(guī)則下 ECU 總線通訊與 ADTF 測試方案
- 蟄伏四年,藝術(shù)大師OPPO又出招了
- 傳新iPhone雙卡雙待版本將是“中國特供”
- 微軟在做雙屏Surface 模樣讓人想起中興手機(jī)
- vivo NEX推送新版本防攝像頭偷拍 防止偷拍發(fā)生
- 不賣大樓心不死?傳索尼將關(guān)閉部分地區(qū)手機(jī)業(yè)務(wù)
- 機(jī)器人邁進(jìn)新時(shí)代,NVIDIA推出超級計(jì)算模塊
- 機(jī)器人揀貨時(shí)代到來 京東進(jìn)一步向智能化邁進(jìn)
- 2019年半導(dǎo)體檢測有望實(shí)現(xiàn)突破
- Gartner預(yù)測:2019七大AI科技趨勢 百萬行業(yè)將顛覆
- 大疆發(fā)布“御”Mavic 2行業(yè)雙光版 熱成像云臺相機(jī)進(jìn)入便捷時(shí)代
- DeviceIoControl()如何向U盤發(fā)送SCSI命令??!!
- Realtek瑞昱WIFI熱點(diǎn)打不開解決方法
- 內(nèi)部的flash能不分割一塊出來當(dāng)類ee用?
- 北京市昌平天池旅游風(fēng)景區(qū)(組圖)
- 關(guān)于wince、2410 com2,com3的問題
- IIS2ICLX不知道是不是最低噪聲的加速度傳感器,反正非常低
- 15單片機(jī)的流水燈怎么做啊?我才接觸單片機(jī)
- SQLCE創(chuàng)建錯(cuò)誤
- 轉(zhuǎn)行通信系統(tǒng)開發(fā)準(zhǔn)備工作,希望給點(diǎn)指引.
- wince6.0 directshow例子編譯問題