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

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

3天內不再提示

【GD32F470紫藤派開(kāi)發(fā)板使用手冊】第三講 EXTI-按鍵中斷檢測實(shí)驗

聚沃科技 ? 2024-05-05 09:22 ? 次閱讀
wKgaomYwSqiAY_PQAAnl063z3JE116.png

3.1實(shí)驗內容

通過(guò)本實(shí)驗主要學(xué)習以下內容:

  • EXTI中斷原理;
  • 按鍵中斷檢測原理;

3.2實(shí)驗原理

3.2.1NVIC中斷向量控制器

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

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

wKgaomY23qOAEmmfAAG0vgy2_U4513.png

3.2.2EXTI中斷原理

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

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

wKgaomY23rmAKysIAADHefyD1l8246.png

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

wKgaomY23syANkiFAAF9lZFhLyA501.png

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

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

wKgZomY23uGAS0ibAALbL54CmCk304.png

3.3硬件設計

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

3.4代碼解析

3.4.1主函數代碼解析

主函數代碼如下所示,主要包括驅動(dòng)初始化、LED初始化、key按鍵結構體初始化(此處將用戶(hù)按鍵配置為中斷模式,并將中斷回調函數注冊為USER_KEY_IRQHandler)、串口初始化以及NVIC配置,用戶(hù)按鍵使用的是PA1引腳,因而使能EXTI1_IRQn中斷號,延遲1S后,打印Example of key interrupt detection,之后進(jìn)入主循環(huán),在主循環(huán)中查詢(xún)USER_KEY.press_timerms標志位,當USER_KEY被按鍵觸發(fā)中斷后,該標志將會(huì )被設置為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);

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

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.\r\n");
}
}
}

3.4.2按鍵中斷回調函數

按鍵中斷回調函數如下所示,該函數在dvire_gpio_exti_handle中被調用,dvire_gpio_exti_handle在EXTI1_IRQHandler中被調用,其中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í)驗結果

將本例程燒錄到紫藤派開(kāi)發(fā)板中,在液晶上首先將會(huì )打印Example of key interrupt detection.,之后按下USER_KEY按鍵后,將會(huì )打?。篣SER_KEYis pressed to trigger an interrupt.。

wKgaomY23w-AQAFRACT6Poexn24819.png

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

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

    關(guān)注

    447

    文章

    48385

    瀏覽量

    412252
  • 單片機
    +關(guān)注

    關(guān)注

    6008

    文章

    44105

    瀏覽量

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

    關(guān)注

    25

    文章

    4579

    瀏覽量

    94988
  • GD32
    +關(guān)注

    關(guān)注

    7

    文章

    361

    瀏覽量

    23813
收藏 人收藏

    評論

    相關(guān)推薦

    GD32F470紫藤開(kāi)發(fā)板使用手冊】第九講 USART-printf打印實(shí)驗

    通過(guò)本實(shí)驗主要學(xué)習以下內容: 串口簡(jiǎn)介 GD32F470串口工作原理 使用printf打印信息
    的頭像 發(fā)表于 05-13 10:14 ?764次閱讀
    【<b class='flag-5'>GD32F470</b><b class='flag-5'>紫藤</b>派<b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>使用手冊</b>】第九講  USART-printf打印<b class='flag-5'>實(shí)驗</b>

    GD32F470紫藤開(kāi)發(fā)板使用手冊】第十一講 SPI-SPI NOR FLASH讀寫(xiě)實(shí)驗

    通過(guò)本實(shí)驗主要學(xué)習以下內容: ?SPI簡(jiǎn)介 ?GD32F470 SPI簡(jiǎn)介 ?SPI NOR FLASH——GD25Q32ESIGR簡(jiǎn)介 ?使用GD32F470 SPI接口實(shí)現對
    的頭像 發(fā)表于 05-17 09:57 ?796次閱讀
    【<b class='flag-5'>GD32F470</b><b class='flag-5'>紫藤</b>派<b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>使用手冊</b>】第十一講 SPI-SPI NOR FLASH讀寫(xiě)<b class='flag-5'>實(shí)驗</b>

    使用GD32F470編譯drv_adc.c時(shí)報錯怎么解決?

    使用GD32F470芯片,編譯drv_adc.c時(shí)報錯好幾個(gè)編譯錯誤,可能是適配GD32F470芯片沒(méi)有適配好。 編譯問(wèn)題如下圖:
    發(fā)表于 02-23 06:55

    這是DE2開(kāi)發(fā)板使用手冊

    DE2開(kāi)發(fā)板使用手冊,有興趣的人可以下載看一下
    發(fā)表于 06-03 17:58

    QC-CPLD開(kāi)發(fā)板快速使用手冊

    `QC-CPLD開(kāi)發(fā)板快速使用手冊.pdf`
    發(fā)表于 10-06 08:11

    【零基礎學(xué)習STM32】第三講EXTI中斷輸入實(shí)驗——讀取ARM按鍵狀態(tài)

    原理圖 在iCore3雙核心開(kāi)發(fā)板中,采用一個(gè)獨立的按鍵與STM32F407的GPIO相連,另一端接地,且PH15外接一個(gè)1k電阻大小的上拉電阻。、
    發(fā)表于 02-02 21:59

    迅為iMX6ULL開(kāi)發(fā)板使用手冊資料下載

    開(kāi)發(fā)板使用手冊》第一部分 開(kāi)發(fā)板入門(mén)第二部分 開(kāi)發(fā)環(huán)境搭建第三部分 Linux系統編譯第四部分 QT
    發(fā)表于 12-02 14:13

    現有的BSP工程可以直接在GD32F470上進(jìn)行開(kāi)發(fā)

    大家好:有關(guān)于GD32F470的BSP工程的問(wèn)題咨詢(xún),我在GD官網(wǎng)上查照資料了解470和450是很相似的,目前因為項目需要使用的470芯片,想使用rt-thread的操作系統,但是不知
    發(fā)表于 08-01 10:39

    YL-51開(kāi)發(fā)板使用手冊

    YL-51開(kāi)發(fā)板使用手冊,YL-51開(kāi)發(fā)板使用手冊YL-51開(kāi)發(fā)板使用手冊YL-51
    發(fā)表于 05-10 16:31 ?20次下載

    STC15單片機實(shí)戰項目軟件開(kāi)發(fā)第三講 - 按鍵檢測(外部中斷)

    STC15單片機實(shí)戰項目軟件開(kāi)發(fā)第三講 - 按鍵檢測(外部中斷)
    發(fā)表于 11-22 15:06 ?16次下載
    STC15單片機實(shí)戰項目軟件<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>第三講</b> - <b class='flag-5'>按鍵</b><b class='flag-5'>檢測</b>(外部<b class='flag-5'>中斷</b>)

    GD32H757Z海棠派開(kāi)發(fā)板使用手冊第三講 EXTI-按鍵中斷檢測實(shí)驗

    介紹EXTI之前,首先為各位讀者介紹NVIC中斷向量控制器,NVIC為M7內核組件,用于實(shí)現高效的異常和中斷處理。NVIC可以支持搶占以及咬尾中斷,具有多達217種外設
    的頭像 發(fā)表于 04-18 09:38 ?160次閱讀
    【<b class='flag-5'>GD</b>32H757Z海棠派<b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>使用手冊</b>】<b class='flag-5'>第三講</b>  <b class='flag-5'>EXTI-</b><b class='flag-5'>按鍵</b><b class='flag-5'>中斷</b><b class='flag-5'>檢測</b><b class='flag-5'>實(shí)驗</b>

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

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

    GD32F470紫藤開(kāi)發(fā)板使用手冊】第八講 ADC-規則組多通道采樣實(shí)驗

    通過(guò)本實(shí)驗主要學(xué)習以下內容: ?ADC的簡(jiǎn)介 ?GD32F470 ADC工作原理 ?DMA原理 ?規則組多通道循環(huán)采樣
    的頭像 發(fā)表于 05-12 10:00 ?199次閱讀
    【<b class='flag-5'>GD32F470</b><b class='flag-5'>紫藤</b>派<b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>使用手冊</b>】第八講 ADC-規則組多通道采樣<b class='flag-5'>實(shí)驗</b>

    GD32F470紫藤開(kāi)發(fā)板使用手冊】第十講 USART-中斷串口收發(fā)實(shí)驗

    通過(guò)本實(shí)驗主要學(xué)習以下內容: ?使用中斷進(jìn)行串口收發(fā)
    的頭像 發(fā)表于 05-14 10:39 ?233次閱讀
    【<b class='flag-5'>GD32F470</b><b class='flag-5'>紫藤</b>派<b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>使用手冊</b>】第十講 USART-<b class='flag-5'>中斷</b>串口收發(fā)<b class='flag-5'>實(shí)驗</b>

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

    通過(guò)本實(shí)驗主要學(xué)習以下內容: ?EXTI中斷原理; ?按鍵中斷檢測原理;
    的頭像 發(fā)表于 05-31 10:13 ?118次閱讀
    【<b class='flag-5'>GD</b>32F303紅楓派<b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>使用手冊</b>】第四講 GEXTI-<b class='flag-5'>按鍵</b><b class='flag-5'>中斷</b><b class='flag-5'>檢測</b><b class='flag-5'>實(shí)驗</b>
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看