4.1實驗內(nèi)容
通過本實驗主要學(xué)習(xí)以下內(nèi)容:
EXTI中斷原理;
按鍵中斷檢測原理;
4.2實驗原理
4.2.1NVIC中斷向量控制器
介紹EXTI之前,首先為各位讀者介紹NVIC中斷向量控制器,NVIC為M4內(nèi)核組件,用于實現(xiàn)高效的異常和中斷處理。NVIC可以支持搶占以及咬尾中斷,具有多達68種外設(shè)中斷以及4位中斷優(yōu)先等級配置(最多支持16個中斷有限等級),當(dāng)中斷或異常產(chǎn)生時,系統(tǒng)自動將當(dāng)前處理器工作狀態(tài)壓棧,在執(zhí)行完中斷服務(wù)子程序(ISR) 后自動將其出棧。
GD32F303系列MCU的中斷向量表如下表所示(包含異常中斷)。
有關(guān)NVIC中斷相關(guān)配置函數(shù)可參考gd32f30x_misc.c,其中主要有以下幾個函數(shù),其功能簡介如下表所示。
4.2.2EXTI中斷原理
EXTI為外部中斷/事件控制器,GD32F303系列MCU EXTI可以最多支持20個相互獨立的邊沿檢測電路并且能夠向處理器內(nèi)核產(chǎn)生中斷請求或喚醒事件。EXTI有三種觸發(fā)類型:上升沿觸發(fā)、下降沿觸發(fā)和任意沿觸發(fā)。EXTI中的每一個邊沿檢測電路都可以獨立配置和屏蔽。
EXTI框圖如下圖所示,極性控制用于控制邊沿檢測,可實現(xiàn)對外部EXTI信號線進行檢測判斷,當(dāng)符合相關(guān)極性配置的EXTI信號出現(xiàn)后,將會發(fā)出EXTI請求,硬件EXTI請求與內(nèi)部軟件觸發(fā)信號相或,然后輸出給NVIC中斷向量控制器產(chǎn)生中斷以及輸出至喚醒單元進行喚醒,也即是內(nèi)部軟件也可以觸發(fā)相關(guān)請求。
EXTI相關(guān)觸發(fā)源如下表所示,所有的GPIO均可以觸發(fā)EXTI,另外LVD、RTC鬧鐘、USB喚醒以及以太網(wǎng)喚醒也可以觸發(fā)EXTI中斷或事件,EXTI可用于喚醒深度睡眠模式下的MCU。
|
?軟件觸發(fā)EXTI中斷請求可通過設(shè)置EXTI_SWIEV軟件中斷事件寄存器實現(xiàn),如下圖所示,設(shè)置相應(yīng)控制位為1,即可實現(xiàn)軟件觸發(fā)EXTI中斷請求。
4.3硬件設(shè)計
本例程所使用的電路也為按鍵電路,具體可參考3.3章節(jié)描述。
4.4代碼解析
4.4.1主函數(shù)代碼解析
主函數(shù)代碼如下所示,主要包括延遲初始化、LED初始化、key按鍵結(jié)構(gòu)體初始化(此處將KEY0按鍵配置為中斷模式,并將中斷回調(diào)函數(shù)注冊為ROCKER_KEY_IRQHandler)、串口初始化以及NVIC配置,KEY0使用的是PE2引腳,因而使能EXTI2_IRQn中斷號,延遲1S后,打印Example of key interrupt detection,之后進入主循環(huán),在主循環(huán)中查詢ROCKER_KEY.press_timerms標(biāo)志位,當(dāng)ROCKER_KEY被按鍵觸發(fā)中斷后,該標(biāo)志將會被設(shè)置為PRESS_DOWN,然后被主循環(huán)檢測到后,將會打印ROCKER_KEY is pressed to trigger an interrupt。
C
int main(void)
{
driver_init();
bsp_led_group_init();
bsp_led_on(&LED0);
bsp_led_off(&LED1);
/* 配置按鍵為中斷模式,并注冊按鍵回調(diào)函數(shù) */
ROCKER_KEY.key_gpio->gpio_mode = INT_LOW;
ROCKER_KEY.key_gpio->int_callback = ROCKER_KEY_IRQHandler;
bsp_key_init(&ROCKER_KEY);
nvic_irq_enable(EXTI2_IRQn,0,0);
bsp_uart_init(&BOARD_UART);
delay_ms(1000);
printf_log('Example of key interrupt detection.rn');
while (1)
{
if(ROCKER_KEY.press_timerms == PRESS_DOWN)
{
/* 檢測到按鍵被按下 */
ROCKER_KEY.press_timerms = PRESS_NONE;
printf_log('ROCKER_KEY is pressed to trigger an interrupt.rn');
}
}
}
4.4.2按鍵中斷回調(diào)函數(shù)
按鍵中斷回調(diào)函數(shù)如下所示,該函數(shù)在dvire_gpio_exti_handle中被調(diào)用,dvire_gpio_exti_handle在EXTI2_IRQHandler中被調(diào)用,其中EXTI2_IRQHandler為EXTI2的中斷服務(wù)程序入口。
C
void ROCKER_KEY_IRQHandler(typdef_gpio_general *KEYx_IO)
{
if(SET==bsp_key_state_get(&ROCKER_KEY))
{
ROCKER_KEY.press_timerms=PRESS_DOWN;
bsp_led_toggle(&LED0);
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 EXTI2_IRQHandler(void)
{
dvire_gpio_exti_handle(ROCKER_KEY.key_gpio);
}
4.5實驗結(jié)果
將本例程燒錄到紅楓派開發(fā)板中,通過Type C數(shù)據(jù)線連接USB串口和PC,打開串口調(diào)試助手,上電復(fù)位后,首先將會打印Example of key interrupt detection.,之后按下ROCKER_KEY按鍵后,將會打印:ROCKER_KEYis pressed to trigger an interrupt.。
上一篇:【GD32F303紅楓派開發(fā)板使用手冊】第十四講 DAC-輸出電壓實驗
下一篇:【GD32F470紫藤派開發(fā)板使用手冊】第一講 GPIO-流水燈實驗
推薦閱讀最新更新時間:2025-05-23 16:38

設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- Microchip 升級數(shù)字信號控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- NCP2809B帶輸出耦合電容的典型應(yīng)用
- AZ431B精密5V/1A穩(wěn)壓器典型應(yīng)用
- 【訓(xùn)練營】鴻蒙BigDog
- OP495GSZ 4.5V、低壓差運算放大器基準(zhǔn)的典型應(yīng)用
- 使用 Analog Devices 的 LTC1261IS8 的參考設(shè)計
- EVAL-AD7414/15EB,用于 AD7414 SMBus/I2C、10 位數(shù)字溫度傳感器的評估板
- 102110037,Wio Link 是一款基于 ESP8266 SoC 的開源 Wi-Fi 開發(fā)板,適用于物聯(lián)網(wǎng)應(yīng)用
- 使用 Richtek Technology Corporation 的 RT9164 的參考設(shè)計
- 用于開/關(guān)控制應(yīng)用的 AM2G-2415SH30Z 15V 2 瓦 DC-DC 轉(zhuǎn)換器的典型應(yīng)用
- 具有大接地回路電壓的 LTC2862AIS8-1 RS485 鏈路的典型應(yīng)用
- 納祥科技2W 24位數(shù)字功放NX4920,可用于AI語音播報、WIFI播放器
- 常用解調(diào)器的定義和工作原理
- 從性能與網(wǎng)絡(luò)傳輸出發(fā),講講鐵威馬MAX系列為什么一騎絕塵
- 惠普選中Hailo下一代人工智能加速器,革新零售業(yè)與酒店業(yè)運營模式
- 跨國商務(wù)溝通困局破解之道:時空壺 W4Pro 全場景應(yīng)用解析
- 從矢量降噪到雙向同傳,時空壺 W4Pro 如何重構(gòu) AI 同傳技術(shù)標(biāo)準(zhǔn)?
- LoRa+NB-IoT雙模融合,地下車庫信號盲區(qū)電梯場景等的冗余通信
- LoRa與UWB的“定位之戰(zhàn)”,成本敏感場景高精度需求的場景切割
- 時空壺X1再升級:引領(lǐng)AI同傳新時代,革新演講翻譯體驗
- ARXML 規(guī)則下 ECU 總線通訊與 ADTF 測試方案
- 芯片級封裝新技術(shù)興起 加速LED行業(yè)整合步伐
- 一組直流5V的電源,如何轉(zhuǎn)換成±12V
- 新一代網(wǎng)絡(luò)紅人玩環(huán)保,林家小妹刺激你的眼球!
- nboot里面串口輸出死活都有問題,大家熟悉的朋友指導(dǎo)下啊
- pb5.0的browse info問題
- 本人不太擅長編程還請大神們幫幫忙
- 今天上午10:00 直播:ADI 儲能系統(tǒng)助力電動汽車快充站的建設(shè)
- 用I2C總線往G-sensor的寄存器中寫數(shù)據(jù)怎么寫不進去?盼高手指點!
- 如何測量MSP430的功耗?
- 求助關(guān)于2812串口發(fā)送數(shù)據(jù)的問題!