在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

第六章 GPIO輸入——按鍵檢測

W55MH32 ? 來源:W55MH32 ? 作者:W55MH32 ? 2025-05-22 16:41 ? 次閱讀

單芯片解決方案,開啟全新體驗——W55MH32 高性能以太網單片機

W55MH32是WIZnet重磅推出的高性能以太網單片機,它為用戶帶來前所未有的集成化體驗。這顆芯片將強大的組件集于一身,具體來說,一顆W55MH32內置高性能Arm? Cortex-M3核心,其主頻最高可達216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲與數據處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協議棧、內置MAC以及PHY,擁有獨立的32KB以太網收發緩存,可供8個獨立硬件socket使用。如此配置,真正實現了All-in-One解決方案,為開發者提供極大便利。

在封裝規格上,W55MH32 提供了兩種選擇:QFN100和QFN68。

W55MH32L采用QFN100封裝版本,尺寸為12x12mm,其資源豐富,專為各種復雜工控場景設計。它擁有66個GPIO、3個ADC、12通道DMA、17個定時器、2個I2C、5個串口、2個SPI接口(其中1個帶I2S接口復用)、1個CAN、1個USB2.0以及1個SDIO接口。如此豐富的外設資源,能夠輕松應對工業控制中多樣化的連接需求,無論是與各類傳感器、執行器的通信,還是對復雜工業協議的支持,都能游刃有余,成為復雜工控領域的理想選擇。 同系列還有QFN68封裝的W55MH32Q版本,該版本體積更小,僅為8x8mm,成本低,適合集成度高的網關模組等場景,軟件使用方法一致。更多信息和資料請進入http://www.w5500.com/網站或者私信獲取。

此外,本W55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應用,涵蓋TCP SSL、HTTP SSL以及 MQTT SSL等,為網絡通信安全再添保障。

為助力開發者快速上手與深入開發,基于W55MH32L這顆芯片,WIZnet精心打造了配套開發板。開發板集成WIZ-Link芯片,借助一根USB C口數據線,就能輕松實現調試、下載以及串口打印日志等功能。開發板將所有外設全部引出,拓展功能也大幅提升,便于開發者全面評估芯片性能。

若您想獲取芯片和開發板的更多詳細信息,包括產品特性、技術參數以及價格等,歡迎訪問官方網頁:http://www.w5500.com/,我們期待與您共同探索W55MH32的無限可能。

wKgZPGgbOfaANhwzACodXd3sVzg463.png

第六章 GPIO輸入——按鍵檢測

本章參考資料:《W55MH32中文參考手冊》按鍵檢測使用到GPIO外設的基本輸入功能。

1 硬件設計

wKgZO2gu4Z2AECFnAAFgD1u0ToY665.png

按鍵機械觸點斷開、閉合時,由于觸點的彈性作用,按鍵開關不會馬上穩定接通或一下子斷開, 使用按鍵時會產生圖 按鍵抖動說明圖 中的帶波紋信號,需要用軟件消抖處理濾波,不方便輸入檢測。本實驗板連接的按鍵帶硬件消抖功能, 見下圖:

wKgZO2gu4Z2ARvoeAAA4-17Dzes757.png

它利用電容充放電的延時,消除了波紋,從而簡化軟件的處理,軟件只需要直接檢測引腳的電平即可。

從按鍵的原理圖可知,這些按鍵在沒有被按下的時候,GPIO引腳的輸入狀態為低電平(按鍵所在的電路不通,引腳接地),當按鍵按下時, GPIO引腳的輸入狀態為高電平(按鍵所在的電路導通,引腳接到電源)。只要我們檢測引腳的輸入電平,即可判斷按鍵是否被按下。

若您使用的實驗板按鍵的連接方式或引腳不一樣,只需根據我們的工程修改引腳即可,程序的控制原理相同。

2 軟件設計

2.1 按鍵輸入檢測方式

按鍵輸入檢測方式分為定時掃描和外部中斷兩種,工作原理和優缺點如下文所示。本篇我們主要講解用外部中斷的方式進行按鍵輸入檢測。

2.1.1 按鍵掃描

工作原理:通過 CPU 定時或不斷地讀取按鍵所連接的 GPIO 引腳電平狀態,來判斷按鍵是否被按下。比如在一個循環中,反復檢測按鍵對應的引腳是高電平還是低電平 ,若原本是高電平,檢測到變為低電平,且經過消抖處理(一般通過延時,比如 5~10ms 再次檢測確認)后還是低電平,就認為按鍵被按下;松開時則相反。像獨立按鍵掃描,就是單獨檢測每個按鍵引腳;矩陣按鍵掃描則是按行或列掃描,通過行列交叉點判斷哪個按鍵動作 。

優點:

原理簡單易懂,實現起來相對容易,對于初學者友好。

可靈活控制掃描頻率和時機,在一些對按鍵檢測實時性要求不高,且系統資源較為充裕的場景下,能很好地工作。

缺點:

占用 CPU 資源,CPU 需要不斷執行掃描程序來檢測按鍵狀態,若系統中還有其他任務,會影響整體運行效率。

實時性較差,因為是定時或不斷掃描,不能及時響應按鍵動作,存在檢測延遲。

2.1.2 外部中斷

工作原理:當外部事件發生,比如按鍵按下使連接到單片機的外部中斷引腳上電平發生變化(可配置為上升沿觸發、下降沿觸發或雙邊沿觸發 ),單片機的中斷系統會迫使 CPU 暫停正在執行的程序,轉而去執行預先編寫好的中斷服務程序來處理該事件,處理完后再返回原來中斷的地方繼續執行原程序 。以按鍵為例,按鍵連接到外部中斷引腳,按下按鍵產生電平變化,觸發中斷請求,CPU 響應后進入中斷服務函數處理按鍵事件。

優點:

實時性強,能在外部事件發生的瞬間及時響應,快速處理事件,適用于對實時性要求高的場景,如工業控制中對突發信號的快速響應。

節省 CPU 資源,CPU 不需要一直輪詢檢測按鍵狀態,只有在外部事件觸發中斷時才會處理相關事務,提高了 CPU 使用效率。

缺點:

配置相對復雜,需要對中斷相關寄存器(如中斷使能寄存器、中斷優先級寄存器、中斷觸發方式寄存器等 )進行正確配置,對開發者要求較高。

多個中斷源同時請求時,需要合理處理中斷優先級和中斷嵌套等問題,否則可能導致系統運行異常。

2.2 編程要點

1.使能GPIO端口時鐘

2.初始化GPIO目標引腳為輸入模式(浮空輸入);

3.編寫簡單測試程序,檢測按鍵的狀態。

2.3 代碼分析

1. 頭文件包含和宏定義

#include #include #include #include "delay.h" #include "w55mh32.h" #define GPIO_GROUP_TEST GPIOG #define GPIO_MODE_TEST GPIO_Mode_IPU #define GPIO_SPEED_TEST GPIO_Speed_50MHz #define GPIO_PIN_TEST GPIO_Pin_5 USART_TypeDef *USART_TEST = USART1;

頭文件包含:包含標準庫頭文件 stdlib.h、string.h、stdio.h,以及自定義的 delay.h 和 w55mh32.h 頭文件。

宏定義:

GPIO_GROUP_TEST:定義使用的 GPIO 組為 GPIOG。

GPIO_MODE_TEST:定義 GPIO 模式為上拉輸入模式 GPIO_Mode_IPU。

GPIO_SPEED_TEST:定義 GPIO 速度為 50MHz。

GPIO_PIN_TEST:定義使用的 GPIO 引腳為 GPIO_Pin_5。

USART_TEST:定義使用的 USART 外設為 USART1。

2. 函數聲明

void UART_Configuration(uint32_t bound); void GPIO_Configuration(void);

聲明了兩個函數:UART_Configuration 用于配置串口通信,GPIO_Configuration 用于配置 GPIO 引腳和外部中斷。

3. main 函數

int main(void) { RCC_ClocksTypeDef clocks; delay_init(); UART_Configuration(115200); RCC_GetClocksFreq(&clocks); printf("n"); printf("SYSCLK: %3.1fMhz, HCLK: %3.1fMhz, PCLK1: %3.1fMhz, PCLK2: %3.1fMhz, ADCCLK: %3.1fMhzn", (float)clocks.SYSCLK_Frequency / 1000000, (float)clocks.HCLK_Frequency / 1000000, (float)clocks.PCLK1_Frequency / 1000000, (float)clocks.PCLK2_Frequency / 1000000, (float)clocks.ADCCLK_Frequency / 1000000); printf("GPIO IO Input Test.n"); GPIO_Configuration(); while (1) { } }

初始化操作:

delay_init():初始化延時函數。

UART_Configuration(115200):配置串口通信,波特率為 115200。

RCC_GetClocksFreq(&clocks):獲取系統時鐘頻率信息。

打印信息:打印系統時鐘頻率信息和測試提示信息。

GPIO 配置:調用 GPIO_Configuration() 函數配置 GPIO 引腳和外部中斷。

主循環:進入一個無限循環,等待外部中斷觸發。

4. GPIO_Configuration 函數

void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG | RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_PIN_TEST; GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_TEST; GPIO_InitStructure.GPIO_Mode = GPIO_MODE_TEST; GPIO_Init(GPIO_GROUP_TEST, &GPIO_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGPIOG, GPIO_PinSource5); NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); EXTI_InitStructure.EXTI_Line = EXTI_Line5; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); }

時鐘使能:使能 GPIOG 和復用功能 I/O(AFIO)的時鐘。

GPIO 初始化:配置 GPIOG 的 GPIO_Pin_5 為上拉輸入模式,速度為 50MHz。

外部中斷線配置:將 GPIOG 的 GPIO_Pin_5 映射到外部中斷線 EXTI_Line5。

NVIC 配置:

配置外部中斷線 5~9 的中斷通道 EXTI9_5_IRQn。

設置搶占優先級為 2,子優先級為 3,并使能該中斷通道。

EXTI 配置:配置外部中斷線 EXTI_Line5 為中斷模式,下降沿觸發,并使能該中斷線。

5. EXTI9_5_IRQHandler 函數

void EXTI9_5_IRQHandler(void) { if (EXTI_GetITStatus(EXTI_Line5) == SET) { delay_ms(10); if (GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_5) == Bit_RESET) { printf("The key is pressedn"); } } EXTI_ClearITPendingBit(EXTI_Line5); }

中斷處理:

檢查外部中斷線 EXTI_Line5 的中斷標志位是否被置位。

進行 10ms 的消抖處理。

讀取 GPIOG 的 GPIO_Pin_5 的輸入電平,如果為低電平,則打印 "The key is pressed"。

清除外部中斷線 EXTI_Line5 的中斷標志位。

6. UART_Configuration 函數

void UART_Configuration(uint32_t bound) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = bound; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART_TEST, &USART_InitStructure); USART_Cmd(USART_TEST, ENABLE); }

時鐘使能:使能 USART1 和 GPIOA 的時鐘。

GPIO 初始化:

配置 GPIOA 的 GPIO_Pin_9 為復用推挽輸出模式,用于 USART1 的發送引腳。

配置 GPIOA 的 GPIO_Pin_10 為浮空輸入模式,用于 USART1 的接收引腳。

USART 初始化:

配置 USART1 的波特率、數據位、停止位、校驗位、硬件流控制和工作模式。

使能 USART1。

7. EXTI1_IRQHandler 函數

void EXTI1_IRQHandler(void) { if (EXTI_GetITStatus(EXTI_Line1) == SET) { delay_ms(10); if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1) == Bit_SET) { printf("The key is pressedn"); } } EXTI_ClearITPendingBit(EXTI_Line1); }

中斷處理:處理外部中斷線 EXTI_Line1 的中斷事件,與 EXTI9_5_IRQHandler 類似,但該中斷在本代碼中未被使用。

8. SER_PutChar 函數和 fputc 函數

int SER_PutChar(int ch) { while (!USART_GetFlagStatus(USART_TEST, USART_FLAG_TC)); USART_SendData(USART_TEST, (uint8_t)ch); return ch; } int fputc(int c, FILE *f) { if (c == 'n') { SER_PutChar('r'); } return (SER_PutChar(c)); }

SER_PutChar 函數:將一個字符通過 USART 發送出去,等待發送完成標志位被置位。

fputc 函數:重定向標準輸出函數,將換行符 n 替換為回車符 r 后再發送。

2.4 下載驗證

把編譯好的程序下載到開發板并復位,按下按鍵可以在串口查看按鈕是否按下:

wKgZPGgu4oWAGKgdAAB1fLIQSrA597.png

WIZnet 是一家無晶圓廠半導體公司,成立于 1998 年。產品包括互聯網處理器 iMCU?,它采用 TOE(TCP/IP 卸載引擎)技術,基于獨特的專利全硬連線 TCP/IP。iMCU? 面向各種應用中的嵌入式互聯網設備。

WIZnet 在全球擁有 70 多家分銷商,在香港、韓國、美國設有辦事處,提供技術支持和產品營銷。

香港辦事處管理的區域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。

審核編輯 黃宇

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

    關注

    3

    文章

    22

    瀏覽量

    42362
  • GPIO
    +關注

    關注

    16

    文章

    1261

    瀏覽量

    53470
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    AS32X601驅動系列教程 GPIO_按鍵檢測詳解

    在嵌入式系統開發中,GPIO(通用輸入輸出端口)是實現硬件與軟件交互的關鍵組件。本節主要利用的時GPIO輸入采集功能,本節的主要功能為,讀取板載
    的頭像 發表于 05-23 16:44 ?56次閱讀
    AS32X601驅動系列教程 <b class='flag-5'>GPIO</b>_<b class='flag-5'>按鍵</b><b class='flag-5'>檢測</b>詳解

    RK3568驅動指南|第十二篇 GPIO子系統-第135 GPIO子系統與pinctrl子系統相結合實驗

    RK3568驅動指南|第十二篇 GPIO子系統-第135 GPIO子系統與pinctrl子系統相結合實驗
    的頭像 發表于 05-23 13:47 ?96次閱讀
    RK3568驅動指南|第十二篇 <b class='flag-5'>GPIO</b>子系統-第135<b class='flag-5'>章</b> <b class='flag-5'>GPIO</b>子系統與pinctrl子系統相結合實驗

    【紫光同創盤古PGX-Lite 7K教程】——(盤古PGX-Lite 7K開發板/PGC7KD-6IMBG256第六章)密碼鎖實驗例程

    就不重復描述了; :實驗現象 驗證步驟: 1、 調整輸入序列,更改撥碼開關的輸入值(SW[3:0]); 2、 調整固定序列,通過輕觸按鍵 KEY1~KEY0 調整
    發表于 02-10 11:28

    遠心鏡頭應用手機按鍵檢測

    遠心鏡頭的手機按鍵檢測方案具有高效、準確、穩定等優點。該方案能夠實現對手機按鍵的全方位檢測,包括按鍵的位置、高度、間隙以及彈力等參數。同時,
    的頭像 發表于 01-20 10:18 ?347次閱讀
    遠心鏡頭應用手機<b class='flag-5'>按鍵</b><b class='flag-5'>檢測</b>

    廣電計量入選工信部第六批產業技術基礎公共服務平臺

    近日,工業和信息化部發布了擬列入第六批產業技術基礎公共服務平臺名錄的建議名單,經單位自主申報、四川省審核推薦、專家評審、公示等相關程序,廣電計量檢測(成都)有限公司(簡稱:成都廣電計量)成功入選工業和信息化部第六批產業技術基礎公
    的頭像 發表于 01-14 11:41 ?529次閱讀

    藍橋杯中GPIO輸入按鍵實驗

    常見的是觸點式開關按鍵。在單片機應用系統中,除了復位按鍵有專門的復位電路及專一的復位功能外,其他按鍵都是以開關狀態來設置控制功能或輸入數據的。當所設置的功能鍵或數
    的頭像 發表于 01-09 21:02 ?670次閱讀
    藍橋杯中<b class='flag-5'>GPIO</b><b class='flag-5'>輸入</b>之<b class='flag-5'>按鍵</b>實驗

    《DNESP32S3使用指南-IDF版_V1.6》第六章 新建基礎工程

    第六章 新建基礎工程 在前面的章節中,我們已經簡要介紹了ESP32-S3的基礎知識和ESP-IDF的基本概念,并詳細闡述了VS Code IDE環境的搭建以及Espressif插件的安裝流程。現在
    發表于 12-02 14:43

    基于狀態機和面向對象的思想設計按鍵檢測模塊

    物理按鍵,在很多嵌入式產品里面應用得非常廣泛,很多嵌入式軟件工程師在剛剛開始入門的時候,點完燈之后就開始學習按鍵輸入檢測按鍵
    的頭像 發表于 11-14 11:44 ?830次閱讀
    基于狀態機和面向對象的思想設計<b class='flag-5'>按鍵</b><b class='flag-5'>檢測</b>模塊

    gpio接口是干什么的 gpio四種輸入輸出模式怎么選擇

    GPIO接口的作用 GPIO(General Purpose Input/Output)接口,即通用輸入輸出接口,是一種用于連接和控制各種外部設備的數字接口。它由一組引腳組成,可以通過編程的方式控制
    的頭像 發表于 10-06 16:07 ?6892次閱讀

    《DNK210使用指南 -CanMV版 V1.0》第六章 Kendryte K210固件燒錄

    第六章 Kendryte K210固件燒錄 本章將為讀者介紹Kendryte K210的固件燒錄,以及Kendryte K210外部NOR Flash的空間分布。本章分為如下幾個小節:6.1 外部
    發表于 09-12 14:20

    【「ARM MCU嵌入式開發 | 基于國產GD32F10x芯片」閱讀體驗】+書籍整體概況

    ,這里包含系統滴答定時器SysTick,RTC實時時鐘,看門狗(獨立看門狗與窗口看門狗),定時器(基本定時器、通用定時器、高級定時器),以及PWM實現呼吸燈效果實驗。第六章為通用同步/異步串行通信
    發表于 08-25 22:48

    第六章-電機驅動和PWM STM32項目

    **功能介紹放開頭, 使用便捷無需愁。** **這是全網最詳細、性價比最高的STM32實戰項目入門教程,通過合理的硬件設計和詳細的視頻筆記介紹,硬件使用STM32F103主控資料多方便學習,通過3萬字筆記、12多個小時視頻、20多章節代碼手把手教會你如何開發和調試。讓你更快掌握嵌入式系統開發。** V3.3.0-STM32智能小車 視頻: https://www.bilibili.com/video/BV16x4y1M7EN/?spm_id_from=333.337.search-card.all.click V3:HAL庫開發、功能:PID速度控制、PID循跡、PID跟隨、遙控、避障、PID角度控制、視覺控制、電磁循跡、RTOS等功能。
    的頭像 發表于 08-21 16:46 ?872次閱讀
    <b class='flag-5'>第六章</b>-電機驅動和PWM STM32項目

    優利德UT2000/3000系列數字存儲示波器中文使用說明書

    /UT3000系列數字存儲示波器的操作方法。第三 應用示例:提供如何解決各種測量問題示例。第四 系統提示及故障排除:第五 服務和支持:第六章 附錄:附錄A:技術指標附錄B:UT2
    發表于 07-22 11:52 ?13次下載

    STM32 GPIO八種模式及工作原理詳解

    圍設備(像控制led亮滅,按鍵控制,軟件模擬IIC等)直觀又簡單的控制。 GPIO的8種模式 ?1. 輸入模式: ??(1)上拉輸入模式 GPIO
    的頭像 發表于 07-22 09:32 ?8106次閱讀
    STM32 <b class='flag-5'>GPIO</b>八種模式及工作原理詳解

    雙麒麟系統!迅為RK3588開發板+銀河麒麟/開放麒麟

    Build root系統功能測試 第四 Ubuntu系統功能測試 第五 Debian系統功能測試 第六章 openkylin系統功能測試 第七 銀河麒麟系統功能測試
    發表于 07-15 10:35
    主站蜘蛛池模板: 日韩va亚洲va欧美va浪潮 | 免费人成在线观看网站 | 天天做日日爱 | 狠狠操狠狠 | 婷婷射| 夜夜欢视频 | 久久久一本波多野结衣 | 欧美午夜在线视频 | 我要色综合网 | 4虎影院在线观看 | 欧美精品色精品一区二区三区 | 韩漫免费网站无遮挡羞羞漫画 | 午夜黄色一级片 | 久久羞羞视频 | 看黄a大片 免费 | 天天噜天天干 | 黄黄网| 手机看片a永久免费看大片 手机毛片 | 97午夜理伦片在线影院 | 美女视频黄的免费视频网页 | 欧美色惰| 狠狠干夜夜草 | 久久vs国产综合色大全 | 婷婷了五月色香综合缴情 | www.av毛片| 丝袜紧身裙国产在线播放 | 国产精品好好热在线观看 | 看一级特黄a大片日本片 | 亚洲国产tv | 午夜寂寞影院视频观看 | 伊人久久精品成人网 | 国产成人永久免费视频 | 亚洲欧美成人 | 免费在线观看你懂的 | 免费能直接在线观看黄的视频 | 色多多在线观看高清免费 | 四虎永久免费影院在线 | videos另类重口tv| 日本三级成人午夜视频网 | 色婷婷亚洲十月十月色天 | 狠狠色狠狠色综合日日不卡 |