娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

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

發(fā)布者:幸福旅程最新更新時間:2024-12-12 來源: elecfans關(guān)鍵字:GD32F303 手機看文章 掃描二維碼
隨時隨地手機看文章

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的中斷向量表如下表所示(包含異常中斷)。

wKgaomZZMUOAKKe6AAZLfpe9MpI833.png

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

wKgaomZZMVuAaa25AAGOeMO_CvA028.png

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)請求。

wKgaomY23rmAKysIAADHefyD1l8246.png

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

wKgaomY23syANkiFAAF9lZFhLyA501.png

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

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

wKgZomY23uGAS0ibAALbL54CmCk304.png


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.。

wKgaomZZMcWAKaWoAAR7MaMcBEk034.png


關(guān)鍵字:GD32F303 引用地址:【GD32F303紅楓派開發(fā)板使用手冊】第四講 GEXTI-按鍵中斷檢測實驗

上一篇:【GD32F303紅楓派開發(fā)板使用手冊】第十四講 DAC-輸出電壓實驗
下一篇:【GD32F470紫藤派開發(fā)板使用手冊】第一講 GPIO-流水燈實驗

推薦閱讀最新更新時間:2025-05-23 16:38

GD32F303紅楓開發(fā)板使用手冊】第六講 PMU-低功耗實驗講
6.1實驗內(nèi)容 通過本實驗主要學(xué)習(xí)以下內(nèi)容: PMU原理; 低功耗的進入以及退出操作; 6.2實驗原理 6.2.1PMU結(jié)構(gòu)原理 PMU即電源管理單元,其內(nèi)部結(jié)構(gòu)下圖所示,由該圖可知,GD32F303系列MCU具有三個電源域,包括VDD/VDDA電源域、1.2V電源域以及電池備份域,其中,VDD /VDDA域由電源直接供電。在VDD/VDDA域中嵌入了一個LDO,用來為1.2V域供電。在備份域中有一個電源切換器,當(dāng)VDD/VDDA電源關(guān)閉時,電源切換器可以將備份域的電源切換到VBAT引腳,此時備份域由VBAT引腳(電池)供電。 VDD/VDDA電源域 VDD 域為數(shù)字電源域包括HXTAL(高速外部晶體振蕩器)、LDO
[單片機]
【<font color='red'>GD32F303</font><font color='red'>紅楓</font><font color='red'>派</font><font color='red'>開發(fā)板</font>使用手冊】第六講 PMU-低功耗實驗講
小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 华容县| 玉溪市| 瑞安市| 平湖市| 临江市| 乐山市| 大城县| 耒阳市| 五莲县| 威宁| 海宁市| 克什克腾旗| 双柏县| 安新县| 东山县| 西峡县| 广汉市| 大邑县| 威远县| 胶南市| 应城市| 如东县| 定安县| 武宣县| 南陵县| 池州市| 龙陵县| 昌宁县| 泰州市| 旬阳县| 安多县| 贵港市| 开江县| 余姚市| 礼泉县| 饶平县| 松滋市| 湖州市| 太白县| 永兴县| 余江县|