RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【GD32F303紅楓派開(kāi)發(fā)板使用手冊(cè)】第四講 GEXTI-按鍵中斷檢測(cè)實(shí)驗(yàn)

聚沃科技 ? 2024-05-31 10:13 ? 次閱讀
wKgaomZVdiiAfR9BAB3mDFhHnZc972.png

4.1實(shí)驗(yàn)內(nèi)容

通過(guò)本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容:

4.2實(shí)驗(yàn)原理

4.2.1NVIC中斷向量控制器

介紹EXTI之前,首先為各位讀者介紹NVIC中斷向量控制器,NVIC為M4內(nèi)核組件,用于實(shí)現(xiàn)高效的異常和中斷處理。NVIC可以支持搶占以及咬尾中斷,具有多達(dá)68種外設(shè)中斷以及4位中斷優(yōu)先等級(jí)配置(最多支持16個(gè)中斷有限等級(jí)),當(dāng)中斷或異常產(chǎn)生時(shí),系統(tǒng)自動(dòng)將當(dāng)前處理器工作狀態(tài)壓棧,在執(zhí)行完中斷服務(wù)子程序(ISR) 后自動(dòng)將其出棧。

GD32F303系列MCU的中斷向量表如下表所示(包含異常中斷)。

wKgaomZZMUOAKKe6AAZLfpe9MpI833.png

有關(guān)NVIC中斷相關(guān)配置函數(shù)可參考gd32f30x_misc.c,其中主要有以下幾個(gè)函數(shù),其功能簡(jiǎn)介如下表所示。

wKgaomZZMVuAaa25AAGOeMO_CvA028.png

4.2.2EXTI中斷原理

EXTI為外部中斷/事件控制器,GD32F303系列MCU EXTI可以最多支持20個(gè)相互獨(dú)立的邊沿檢測(cè)電路并且能夠向處理器內(nèi)核產(chǎn)生中斷請(qǐng)求或喚醒事件。EXTI有三種觸發(fā)類(lèi)型:上升沿觸發(fā)、下降沿觸發(fā)和任意沿觸發(fā)。EXTI中的每一個(gè)邊沿檢測(cè)電路都可以獨(dú)立配置和屏蔽。

EXTI框圖如下圖所示,極性控制用于控制邊沿檢測(cè),可實(shí)現(xiàn)對(duì)外部EXTI信號(hào)線進(jìn)行檢測(cè)判斷,當(dāng)符合相關(guān)極性配置的EXTI信號(hào)出現(xiàn)后,將會(huì)發(fā)出EXTI請(qǐng)求,硬件EXTI請(qǐng)求與內(nèi)部軟件觸發(fā)信號(hào)相或,然后輸出給NVIC中斷向量控制器產(chǎn)生中斷以及輸出至喚醒單元進(jìn)行喚醒,也即是內(nèi)部軟件也可以觸發(fā)相關(guān)請(qǐng)求。

wKgaomY23rmAKysIAADHefyD1l8246.png

EXTI相關(guān)觸發(fā)源如下表所示,所有的GPIO均可以觸發(fā)EXTI,另外LVD、RTC鬧鐘、USB喚醒以及以太網(wǎng)喚醒也可以觸發(fā)EXTI中斷或事件,EXTI可用于喚醒深度睡眠模式下的MCU。

wKgaomY23syANkiFAAF9lZFhLyA501.png
  • 注意:相同編號(hào)的引腳共用中斷入口,比如PA0、PB0、PC0均使用EXTI0中斷線,讀者在使用時(shí)需注意不同的EXTI中斷需要使用不同編號(hào)的GPIO引腳。

?軟件觸發(fā)EXTI中斷請(qǐng)求可通過(guò)設(shè)置EXTI_SWIEV軟件中斷事件寄存器實(shí)現(xiàn),如下圖所示,設(shè)置相應(yīng)控制位為1,即可實(shí)現(xiàn)軟件觸發(fā)EXTI中斷請(qǐng)求。

wKgZomY23uGAS0ibAALbL54CmCk304.png

4.3硬件設(shè)計(jì)

本例程所使用的電路也為按鍵電路,具體可參考3.3章節(jié)描述。

4.4代碼解析

4.4.1主函數(shù)代碼解析

主函數(shù)代碼如下所示,主要包括延遲初始化、LED初始化、key按鍵結(jié)構(gòu)體初始化(此處將KEY0按鍵配置為中斷模式,并將中斷回調(diào)函數(shù)注冊(cè)為ROCKER_KEY_IRQHandler)、串口初始化以及NVIC配置,KEY0使用的是PE2引腳,因而使能EXTI2_IRQn中斷號(hào),延遲1S后,打印Example of key interrupt detection,之后進(jìn)入主循環(huán),在主循環(huán)中查詢(xún)ROCKER_KEY.press_timerms標(biāo)志位,當(dāng)ROCKER_KEY被按鍵觸發(fā)中斷后,該標(biāo)志將會(huì)被設(shè)置為PRESS_DOWN,然后被主循環(huán)檢測(cè)到后,將會(huì)打印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);

/* 配置按鍵為中斷模式,并注冊(cè)按鍵回調(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.\r\n");

while (1)
{
if(ROCKER_KEY.press_timerms == PRESS_DOWN)
{
/* 檢測(cè)到按鍵被按下 */
ROCKER_KEY.press_timerms = PRESS_NONE;
printf_log("ROCKER_KEY is pressed to trigger an interrupt.\r\n");
}
}
}

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實(shí)驗(yàn)結(jié)果

將本例程燒錄到紅楓派開(kāi)發(fā)板中,通過(guò)Type C數(shù)據(jù)線連接USB串口和PC,打開(kāi)串口調(diào)試助手,上電復(fù)位后,首先將會(huì)打印Example of key interrupt detection.,之后按下ROCKER_KEY按鍵后,將會(huì)打印:ROCKER_KEYis pressed to trigger an interrupt.。

wKgaomZZMcWAKaWoAAR7MaMcBEk034.png

教程GD32 MCU方案商聚沃科技原創(chuàng)發(fā)布,了解更多GD32 MCU教程,關(guān)注聚沃科技官網(wǎng)

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6035

    文章

    44554

    瀏覽量

    634621
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17123

    瀏覽量

    350978
  • 開(kāi)發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5032

    瀏覽量

    97371
  • GD32
    +關(guān)注

    關(guān)注

    7

    文章

    403

    瀏覽量

    24326
  • EXTI
    +關(guān)注

    關(guān)注

    0

    文章

    27

    瀏覽量

    3686
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    GD32 MCU 移植教程】2、從 GD32F303 移植到 GD32F503

    GD32E503 系列是 GD 推出的 Cortex_M33 系列產(chǎn)品,該系列資源上與 GD32F303 兼容度非常高,本應(yīng)用筆記旨在幫助您快速將應(yīng)用程序從 GD32F303 系列微控
    的頭像 發(fā)表于 08-31 09:36 ?1446次閱讀
    【<b class='flag-5'>GD</b>32 MCU 移植教程】2、從 <b class='flag-5'>GD32F303</b> 移植到 <b class='flag-5'>GD32F</b>503

    GD32F303紅楓開(kāi)發(fā)板使用手冊(cè)】第二十七 USB-虛擬鍵盤(pán)實(shí)驗(yàn)

    ,傳輸速度也很快,這些特性使支持USB接口的電子設(shè)備更易用、更大眾化。GD32F303系列MCU集成了USB2.0全速設(shè)備USBD模塊,可以滿足作為USB設(shè)備與主機(jī)
    的頭像 發(fā)表于 06-27 09:42 ?826次閱讀
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>紅楓</b><b class='flag-5'>派</b><b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第二十七<b class='flag-5'>講</b>  USB-虛擬鍵盤(pán)<b class='flag-5'>實(shí)驗(yàn)</b>

    GD32F303紅楓開(kāi)發(fā)板使用手冊(cè)】第二十 SPI-SPI NAND FLASH讀寫(xiě)實(shí)驗(yàn)

    通過(guò)本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容: ?SPI通信協(xié)議,參考19.2.1東方紅開(kāi)發(fā)板使用手冊(cè) ?GD32F303 SPI操作方式,參考19.2.2東方紅開(kāi)
    的頭像 發(fā)表于 06-20 09:50 ?883次閱讀
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>紅楓</b><b class='flag-5'>派</b><b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第二十<b class='flag-5'>講</b> SPI-SPI NAND FLASH讀寫(xiě)<b class='flag-5'>實(shí)驗(yàn)</b>

    GD32F303紅楓開(kāi)發(fā)板使用手冊(cè)】第十七 USART-中斷串口收發(fā)實(shí)驗(yàn)

    前面章節(jié)中我們已經(jīng)學(xué)習(xí)了串口的狀態(tài)標(biāo)志位,本實(shí)驗(yàn)就是使用TBE中斷和RBNE中斷來(lái)實(shí)現(xiàn)中斷收發(fā)數(shù)據(jù),實(shí)驗(yàn)原理是RBNE
    的頭像 發(fā)表于 06-17 09:53 ?1027次閱讀
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>紅楓</b><b class='flag-5'>派</b><b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第十七<b class='flag-5'>講</b> USART-<b class='flag-5'>中斷</b>串口收發(fā)<b class='flag-5'>實(shí)驗(yàn)</b>

    GD32F303紅楓開(kāi)發(fā)板使用手冊(cè)】第十六 USART-DMA串口收發(fā)實(shí)驗(yàn)

    在前面ADC章節(jié)中,我們介紹了DMA的工作原理,這里就不多做介紹。從GD32F303用戶手冊(cè)中可以查到,各串口的TX和RX分別對(duì)應(yīng)DMA的不同通道,比如USART0的TX對(duì)應(yīng)DMA0的通道3,而RX對(duì)應(yīng)DMA0的通道4。
    的頭像 發(fā)表于 06-15 09:54 ?1061次閱讀
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>紅楓</b><b class='flag-5'>派</b><b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第十六<b class='flag-5'>講</b> USART-DMA串口收發(fā)<b class='flag-5'>實(shí)驗(yàn)</b>

    GD32F303紅楓開(kāi)發(fā)板使用手冊(cè)】第十二 ADC-雙軸按鍵搖桿多通道循環(huán)采樣實(shí)驗(yàn)

    實(shí)驗(yàn)是通過(guò)ADC規(guī)則組多通道循環(huán)采樣方式實(shí)現(xiàn)雙軸按鍵搖桿傳感器x和y軸電壓值的讀取,通過(guò)本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容: ?雙軸按鍵搖桿傳感器工作原理 ?DMA原理 規(guī)則組多通道循環(huán)采樣
    的頭像 發(fā)表于 06-11 09:40 ?624次閱讀
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>紅楓</b><b class='flag-5'>派</b><b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第十二<b class='flag-5'>講</b>   ADC-雙軸<b class='flag-5'>按鍵</b>搖桿多通道循環(huán)采樣<b class='flag-5'>實(shí)驗(yàn)</b>

    GD32F303紅楓開(kāi)發(fā)板使用手冊(cè)】第六 PMU-低功耗實(shí)驗(yàn)

    PMU即電源管理單元,其內(nèi)部結(jié)構(gòu)下圖所示,由該圖可知,GD32F303系列MCU具有三個(gè)電源域,包括VDD/VDDA電源域、1.2V電源域以及電池備份域,其中,VDD /VDDA域由電源直接供電。在
    的頭像 發(fā)表于 06-02 10:12 ?716次閱讀
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>紅楓</b><b class='flag-5'>派</b><b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第六<b class='flag-5'>講</b> PMU-低功耗<b class='flag-5'>實(shí)驗(yàn)</b><b class='flag-5'>講</b>

    GD32F303紅楓開(kāi)發(fā)板使用手冊(cè)】第五 FMC-片內(nèi)Flash擦寫(xiě)讀實(shí)驗(yàn)

    MC即Flash控制器,其提供了片上Flash操作所需要的所有功能,在GD32F303系列MCU中,F(xiàn)lash前256K字節(jié)空間內(nèi),?CPU執(zhí)行指令零等待,具有相同主頻下最快的代碼執(zhí)行效率。FMC也
    的頭像 發(fā)表于 06-02 10:05 ?765次閱讀
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>紅楓</b><b class='flag-5'>派</b><b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第五<b class='flag-5'>講</b> FMC-片內(nèi)Flash擦寫(xiě)讀<b class='flag-5'>實(shí)驗(yàn)</b>

    GD32F303紅楓開(kāi)發(fā)板使用手冊(cè)】第三 GPIO-按鍵查詢(xún)檢測(cè)實(shí)驗(yàn)

    GD32F303系列MCU GPIO輸入配置結(jié)構(gòu)如下圖所示,輸入可配置上下拉電阻,通過(guò)施密特觸發(fā)器后可通過(guò)備用功能輸入或者通過(guò)輸入狀態(tài)寄存器進(jìn)行讀取。
    的頭像 發(fā)表于 05-30 10:02 ?852次閱讀
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>紅楓</b><b class='flag-5'>派</b><b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第三<b class='flag-5'>講</b> GPIO-<b class='flag-5'>按鍵</b>查詢(xún)<b class='flag-5'>檢測(cè)</b><b class='flag-5'>實(shí)驗(yàn)</b>

    GD32F303紅楓開(kāi)發(fā)板使用手冊(cè)】第二 GPIO-流水燈實(shí)驗(yàn)

    GD32F303系列MCU最多可支持?112?個(gè)通用I/O?引腳(GPIO),分別為?PA0 ~ PA15,?PB0 ~ PB15,?PC0 ~ PC15,PD0 ~ PD15,?PE0
    的頭像 發(fā)表于 05-29 10:02 ?1631次閱讀
    【<b class='flag-5'>GD32F303</b><b class='flag-5'>紅楓</b><b class='flag-5'>派</b><b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第二<b class='flag-5'>講</b> GPIO-流水燈<b class='flag-5'>實(shí)驗(yàn)</b>

    GD32F470紫藤開(kāi)發(fā)板使用手冊(cè)】第三 EXTI-按鍵中斷檢測(cè)實(shí)驗(yàn)

    通過(guò)本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容: EXTI中斷原理; 按鍵中斷檢測(cè)原理;
    的頭像 發(fā)表于 05-05 09:22 ?538次閱讀
    【<b class='flag-5'>GD32F</b>470紫藤<b class='flag-5'>派</b><b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第三<b class='flag-5'>講</b> EXTI-<b class='flag-5'>按鍵</b><b class='flag-5'>中斷</b><b class='flag-5'>檢測(cè)</b><b class='flag-5'>實(shí)驗(yàn)</b>

    GD32F470紫藤開(kāi)發(fā)板使用手冊(cè)】第二 GPIO-按鍵查詢(xún)實(shí)驗(yàn)

    通過(guò)本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容: GPIO輸入功能原理; 按鍵查詢(xún)輸入檢測(cè)原理;
    的頭像 發(fā)表于 04-30 11:39 ?695次閱讀
    【<b class='flag-5'>GD32F</b>470紫藤<b class='flag-5'>派</b><b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>使用手冊(cè)</b>】第二<b class='flag-5'>講</b> GPIO-<b class='flag-5'>按鍵</b>查詢(xún)<b class='flag-5'>實(shí)驗(yàn)</b>

    APT32F102 開(kāi)發(fā)板使用手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《APT32F102 開(kāi)發(fā)板使用手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 04-16 09:07 ?0次下載

    GD32F303為什么啟動(dòng)慢?

    在MCU開(kāi)發(fā)中,有一項(xiàng)非常重要的參數(shù)——MCU啟動(dòng)時(shí)間,即MCU上電后到程序開(kāi)始運(yùn)行這段時(shí)間。我們來(lái)看下GD32F303的datasheet中對(duì)啟動(dòng)時(shí)間的描述:
    的頭像 發(fā)表于 02-22 11:11 ?1337次閱讀
    <b class='flag-5'>GD32F303</b>為什么啟動(dòng)慢?

    GD32F303 低功耗模式要點(diǎn)

    我們都知道,MCU有低功耗模式,比如GD32F303芯片,就有Sleep、Deepsleep和Standby三種模式。關(guān)于這三種模式的具體使用方法,小伙伴們可以參考《GD32F30x系列用戶手冊(cè)》。
    的頭像 發(fā)表于 01-17 09:40 ?2497次閱讀
    <b class='flag-5'>GD32F303</b> 低功耗模式要點(diǎn)
    RM新时代网站-首页