国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

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

聚沃科技 ? 2024-05-31 10:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

wKgaomZVdiiAfR9BAB3mDFhHnZc972.png

4.1實驗內容

通過本實驗主要學習以下內容:

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

4.2實驗原理

4.2.1NVIC中斷向量控制器

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

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

wKgaomZZMUOAKKe6AAZLfpe9MpI833.png

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

wKgaomZZMVuAaa25AAGOeMO_CvA028.png

4.2.2EXTI中斷原理

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

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

wKgaomY23rmAKysIAADHefyD1l8246.png

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

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

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

wKgZomY23uGAS0ibAALbL54CmCk304.png

4.3硬件設計

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

4.4代碼解析

4.4.1主函數代碼解析

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

/* 配置按鍵為中斷模式,并注冊按鍵回調函數 */
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)
{
/* 檢測到按鍵被按下 */
ROCKER_KEY.press_timerms = PRESS_NONE;
printf_log("ROCKER_KEY is pressed to trigger an interrupt.\r\n");
}
}
}

4.4.2按鍵中斷回調函數

按鍵中斷回調函數如下所示,該函數在dvire_gpio_exti_handle中被調用,dvire_gpio_exti_handle在EXTI2_IRQHandler中被調用,其中EXTI2_IRQHandler為EXTI2的中斷服務程序入口。

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實驗結果

將本例程燒錄到紅楓派開發板中,通過Type C數據線連接USB串口和PC,打開串口調試助手,上電復位后,首先將會打印Example of key interrupt detection.,之后按下ROCKER_KEY按鍵后,將會打印:ROCKER_KEYis pressed to trigger an interrupt.。

wKgaomZZMcWAKaWoAAR7MaMcBEk034.png

教程GD32 MCU方案商聚沃科技原創發布,了解更多GD32 MCU教程,關注聚沃科技官網

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6076

    文章

    45495

    瀏覽量

    670276
  • mcu
    mcu
    +關注

    關注

    147

    文章

    18924

    瀏覽量

    398060
  • 開發板
    +關注

    關注

    26

    文章

    6289

    瀏覽量

    118059
  • GD32
    +關注

    關注

    7

    文章

    432

    瀏覽量

    27342
  • EXTI
    +關注

    關注

    0

    文章

    27

    瀏覽量

    4169
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    星鴻——開源星閃開發板上線!首批試用申請中~

    按鍵,另外還有溫濕度模塊用以檢測溫濕度?!毙区?b class='flag-5'>派(海思WS63V100)掃碼入群,獲取試用鏈接概覽星鴻是一款面向創客、學生、嵌入式開發者的
    的頭像 發表于 01-27 08:04 ?510次閱讀
    星鴻<b class='flag-5'>派</b>——開源星閃<b class='flag-5'>開發板</b>上線!首批試用申請中~

    CW32F030開發板的工程模板

    030_StandardPeripheralLibExamples CW32-48F大學計劃例程 EX1流水燈實驗 EX2蜂鳴器實驗 EX3
    發表于 12-26 08:08

    【RA4M2-SENSOR開發板評測】使用QE工具配置觸摸按鍵

    本期來使用瑞薩官方的QE工具嘗試對開發板上的兩個電容按鍵進行配置。
    的頭像 發表于 12-10 17:14 ?2681次閱讀
    【RA4M2-SENSOR<b class='flag-5'>開發板</b>評測】使用QE工具配置觸摸<b class='flag-5'>按鍵</b>

    RVMCU課堂「12」: 手把手教你玩轉RVSTAR—外部中斷

    [size=14.6667px]NucleiStudio IDE 202102版 硬件需求 RV-STAR開發板 中斷知識介紹 外部中斷處理介紹 在SoC層面,GD
    發表于 10-31 07:39

    MCU無法檢測到W5500是怎么回事?

    檢測到W5500,在GD32F303和N32G457都顯示為Wiznet chip not detected。 在三個MCU上用的都是同一個SPI接口,RST,INT,CS用的GPIO都是一樣的,在三個BSP中修改的地方也是基本上一樣的。 不知道各位有沒有碰到類似的情況,
    發表于 10-14 07:38

    GD32的串口DMA收發數據失敗怎么解決?

    我在使用RTT的GD32F303的BSP時,配置使用串口DMA收發(rt_device_open),發現錯誤,最終無法收發數據,對比了STM32的BSP發現在drv_usart.c中
    發表于 09-17 06:04

    GD32F437開發板添加lwip支持后ping不通電腦怎么解決?

    使用GD32F437的開發板,在studio中添加lwip的支持后,將開設置和電腦相同的網段,并用網線連接開發板和電腦,
    發表于 09-09 07:43

    九航星達CPCI6320型復合視頻播放使用手冊

    九航星達CPCI6320型復合視頻播放使用手冊
    發表于 07-11 15:46 ?4次下載

    STM32固件庫使用手冊的中文翻譯版

    STM32固件庫使用手冊的中文翻譯版
    發表于 06-09 22:38

    基于小凌RK2206開發板:OpenHarmony如何使用IoT接口控制FLASH外設

    1、實驗簡介本實驗將演示如何在小凌-RK2206開發板上使用IOT庫的FLASH接口,進行FLASH編程開發。例程將創建一個任務,實現FL
    的頭像 發表于 04-22 14:49 ?913次閱讀
    基于小凌<b class='flag-5'>派</b>RK2206<b class='flag-5'>開發板</b>:OpenHarmony如何使用IoT接口控制FLASH外設

    基于小凌RK2206開發板:OpenHarmony如何使用IoT接口控制UART外設

    1、實驗簡介本實驗將演示如何在小凌-RK2206開發板上使用IOT庫的UART接口,進行UART編程開發。例程將創建一個任務,通過配置UA
    的頭像 發表于 04-22 14:22 ?1068次閱讀
    基于小凌<b class='flag-5'>派</b>RK2206<b class='flag-5'>開發板</b>:OpenHarmony如何使用IoT接口控制UART外設

    基于小凌RK2206開發板:OpenHarmony如何使用IoT接口控制GPIO中斷

    1、實驗簡介本實驗將演示如何在小凌-RK2206開發板上使用IOT庫的GPIO中斷模式,進行GPIO編程
    的頭像 發表于 04-21 10:39 ?1092次閱讀
    基于小凌<b class='flag-5'>派</b>RK2206<b class='flag-5'>開發板</b>:OpenHarmony如何使用IoT接口控制GPIO<b class='flag-5'>中斷</b>

    基于RV1126開發板按鍵測試方法與例程

    RV1126開發板按鍵測試方法與例程詳細描述
    的頭像 發表于 04-15 17:03 ?1047次閱讀
    基于RV1126<b class='flag-5'>開發板</b>的<b class='flag-5'>按鍵</b>測試方法與例程

    基于小凌RK2206開發板:OpenHarmony如何使用IoT接口控制ADC外設

    1、案例簡介本案例主要講解如何在小凌-RK2206開發板上使用IoT庫的ADC接口,進行ADC編程開發。例程內容為創建一個任務,讀取按鍵的ADC值,并打印到串口。例程源代碼:http
    的頭像 發表于 04-10 16:00 ?904次閱讀
    基于小凌<b class='flag-5'>派</b>RK2206<b class='flag-5'>開發板</b>:OpenHarmony如何使用IoT接口控制ADC外設

    雷卯收集AI實驗課程開發板

    收集目的:方便客戶選用AI實驗課程開發板,并且能夠讓AI實驗課程開發板穩定工作。雷卯EMC小哥圍繞AI實驗課程
    的頭像 發表于 04-02 12:14 ?713次閱讀
    雷卯收集AI<b class='flag-5'>實驗</b>課程<b class='flag-5'>開發板</b>