伦伦影院久久影视,天天操天天干天天射,ririsao久久精品一区 ,一本大道香蕉大久在红桃,999久久久免费精品国产色夜,色悠悠久久综合88,亚洲国产精品久久无套麻豆,亚洲香蕉毛片久久网站,一本一道久久综合狠狠老

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

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

3天內不再提示

基于RT-Thread與MCXA156的USB HID游戲手柄設計與實現 | 技術集結

RT-Thread官方賬號 ? 2026-02-02 18:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

目錄


項目概述


RT-Thread 使用情況概述


硬件框架


軟件框架說明


軟件模塊說明


效果演示


代碼地址


總結

1 項目概述

1.1 實現功能

本項目基于 NXP FRDM-MCXA156 開發板,實現了一個標準的 USB HID 游戲手柄設備,主要功能包括:

16 個數字按鈕:通過 4x4 矩陣鍵盤實現 14 個按鈕 + 2 個搖桿按鍵

雙搖桿輸入:左右兩個模擬搖桿,各提供 X/Y 軸數據

USB HID 協議:標準 HID Gamepad 設備,即插即用,無需驅動

實時響應:10ms 掃描間隔,低延遲輸入

1.2 技術特點

6991b262-0025-11f1-96ea-92fbcf53809c.png

2 RT-Thread使用情況概述

2.1 內核配置

#defineRT_THREAD_PRIORITY_MAX 32 // 32 級優先級#defineRT_TICK_PER_SECOND 1000 // 1ms 系統節拍#defineRT_USING_TIMER_SOFT // 軟件定時器#defineRT_USING_SEMAPHORE // 信號量#defineRT_USING_MUTEX // 互斥鎖#defineRT_USING_MAILBOX // 郵箱

2.2 使用的組件

699f30fe-0025-11f1-96ea-92fbcf53809c.png

2.3 線程設計

69ab95b0-0025-11f1-96ea-92fbcf53809c.png

2.4 自動初始化

項目使用 RT-Thread 自動初始化機制:

INIT_BOARD_EXPORT(rt_hw_adc_init); // ADC 驅動初始化INIT_DEVICE_EXPORT(key_init); // 矩陣鍵盤初始化INIT_DEVICE_EXPORT(joystick_init); // 搖桿初始化INIT_COMPONENT_EXPORT(cherryusb_init); // USB 初始化INIT_APP_EXPORT(gamepad_app_start); // 應用層啟動

3 硬件框架

3.1 系統框圖

┌─────────────────────────────────────────────────────────────┐│ FRDM-MCXA156 ││ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐││ │ 4x4 矩陣 │ │ 雙搖桿模塊 │ │ USBDevice │││ │ 鍵盤 │ │ (帶按鍵) │ │ (FullSpeed) │││ └──────┬──────┘ └──────┬──────┘ └──────────┬──────────┘││ │ │ │ ││ GPIOP2/P3 ADC0 CH0/1/8/13 USB0 ││ │ │ │ ││ ┌──────┴────────────────┴─────────────────────┴──────────┐││ │ MCXA156MCU │││ │ (Cortex-M33@ 96MHz) │││ └─────────────────────────────────────────────────────────┘│└─────────────────────────────────────────────────────────────┘



69c2570a-0025-11f1-96ea-92fbcf53809c.jpg

3.2 引腳分配

3.2.1 矩陣鍵盤 (4x4)

69d82206-0025-11f1-96ea-92fbcf53809c.png

3.2.2 搖桿 ADC

69ec9128-0025-11f1-96ea-92fbcf53809c.png

3.2.3 搖桿按鍵

69fa73ba-0025-11f1-96ea-92fbcf53809c.png

4 軟件框架說明

4.1 軟件框架

┌─────────────────────────────────────────────────────────────┐│ 應用層 (Application) ││ ┌─────────────────────────────────────────────────────────┐││ │ gamepad_app.c │││ │ (整合輸入設備,映射到USBHID報告) │││ └─────────────────────────────────────────────────────────┘│├─────────────────────────────────────────────────────────────┤│ 功能層 (Function) ││ ┌───────────────┐ ┌───────────────┐ ┌─────────────────┐ ││ │ key_app.c │ │ joystick_app.c│ │ usb_app.c │ ││ │ (矩陣鍵盤) │ │ (雙搖桿) │ │ (USBHID) │ ││ └───────────────┘ └───────────────┘ └─────────────────┘ │├─────────────────────────────────────────────────────────────┤│ 驅動層 (Driver) ││ ┌───────────────┐ ┌───────────────┐ ┌─────────────────┐ ││ │ drv_pin.c │ │ drv_adc.c │ │ CherryUSB │ ││ │ (GPIO) │ │ (ADC) │ │ (USBStack) │ ││ └───────────────┘ └───────────────┘ └─────────────────┘ │├─────────────────────────────────────────────────────────────┤│ RT-Thread內核 ││ (線程調度、IPC、設備框架、自動初始化) │├─────────────────────────────────────────────────────────────┤│ 硬件抽象層 (HAL) ││ NXPMCXSDK/CMSIS │└─────────────────────────────────────────────────────────────┘



4.2 數據流

矩陣鍵盤 ──? key_read() ──────────────────────────────────┐ │左搖桿 ADC ──? joystick_left_read() ──? apply_deadzone() ──┤ ├──? gamepad_thread右搖桿 ADC ──? joystick_right_read() ──? apply_deadzone() ──┤ │ │ ▼搖桿按鍵 ──? rt_pin_read() ────────────────────────────────┘ scale_axis() │ ▼ USB HID Report │ ▼ hid_gamepad_send_report() │ ▼ USBHost(PC)



嚴格遵守了 感知 --> 認知 --> 控制 系統設計模式

5 軟件模塊說明

5.1 key_app 模塊(矩陣鍵盤)

文件:applications/key_app.c, applications/key_app.h

功能:4x4 矩陣鍵盤掃描

核心函數:

rt_uint8_tkey_read(void); // 返回0-15表示按鍵索引,0xFF 表示無按鍵

掃描原理:

逐列輸出低電平

讀取所有行引腳狀態

檢測到低電平表示該交叉點按鍵被按下

5.2 joystick_app 模塊(搖桿)

文件:applications/joystick_app.c, applications/joystick_app.h

功能:雙搖桿 ADC 讀取與按鍵檢測

數據結構:

typedefstruct { int16_tx; // X軸: -32768 ~ 32767 int16_ty; // Y軸: -32768 ~ 32767 boolbtn; // 按鍵: true=按下}joystick_data_t;

核心函數:

rt_err_tjoystick_left_read(joystick_data_t*data);rt_err_tjoystick_right_read(joystick_data_t*data);

5.3 usb_app 模塊(USB HID)

文件:applications/usb_app.c, applications/usb_app.h

功能:USB HID 游戲手柄設備實現

HID 報告結構 (9 字節):

typedefstruct __attribute__((packed)) { uint16_tbuttons; // 16 個按鈕 int8_tleft_x; // 左搖桿 X (-127 ~ 127) int8_tleft_y; // 左搖桿 Y int8_tright_x; // 右搖桿 X int8_tright_y; // 右搖桿 Y uint8_tleft_trigger; // 左扳機 (0-255) uint8_tright_trigger;// 右扳機 (0-255) uint8_that; // 方向鍵 (0-8)}usb_gamepad_report_t;



USB 描述符配置:

VID: 0x045E (Microsoft)

PID: 0x02FF (Generic Gamepad)

端點: 0x81 (IN), 中斷傳輸

輪詢間隔: 1ms

5.4 gamepad_app 模塊(應用層)

文件: applications/gamepad_app.c, applications/gamepad_app.h

功能: 整合所有輸入設備,映射到 USB HID 報告

核心特性:

死區處理: 消除搖桿中心位置的抖動

變化檢測: 只有狀態變化時才發送報告

發送重試: USB 忙碌時保留報告,下次重試

按鍵映射:

6a0a46f0-0025-11f1-96ea-92fbcf53809c.png

5.5 drv_adc 模塊(ADC 驅動)

文件:Libraries/drivers/drv_adc.c

功能:LPADC 驅動,支持多通道 ADC 讀取

關鍵修改:

修復了多通道初始化覆蓋問題

添加了超時保護,防止系統死鎖

優化了命令槽分配(4 個通道使用 4 個獨立命令槽)

6 演示效果

6.1 啟動日志

KEY OKjoystick:initOK[USB] Initializing HID Gamepad...[USB] HID Gamepad initialized successfully[USB] VID:0x045EPID:0x02FF[GAMEPAD] Started (interval:10ms)System Start[GAMEPAD] Thread started[USB] Device Configured - Gamepad Ready!

6.2 Windows 測試

1.設備連接后,在”設備管理器”中顯示為 “USB Gamepad HID”

2.使用 joy.cpl(游戲控制器)可測試所有按鈕和搖桿

6a16920c-0025-11f1-96ea-92fbcf53809c.gif

3.使用https://gamepad-tester.com/ 在線平臺課測試所有按鈕和搖桿

6a38910e-0025-11f1-96ea-92fbcf53809c.gif6a65e352-0025-11f1-96ea-92fbcf53809c.gif

6.3功能演示

16 個按鈕正常響應

左右搖桿 X/Y 軸正常

6a7d055a-0025-11f1-96ea-92fbcf53809c.gif6a95126c-0025-11f1-96ea-92fbcf53809c.gif

搖桿按鍵正常

6ab0ff72-0025-11f1-96ea-92fbcf53809c.gif

低延遲響應

6ad819f4-0025-11f1-96ea-92fbcf53809c.gif

7 代碼地址

Git 倉庫:https://github.com/Rolmoland/Project_GamepadMi

主要文件:

applications/├── main.c # 主入口├── gamepad_app.c/h # 游戲手柄應用層├── key_app.c/h # 矩陣鍵盤模塊├── joystick_app.c/h # 搖桿模塊└── usb_app.c/h # USB HID 模塊board/├── MCUX_Config/board/pin_mux.c # 引腳配置└── ports/cherryusb/ # CherryUSB 適配Libraries/drivers/└── drv_adc.c # ADC 驅動(已修改)


8 總結

本項目成功實現了基于 RT-Thread 的 USB HID 游戲手柄,具有以下特點:

模塊化設計: 硬件層、功能層、應用層分離,易于維護

實時性好: 基于 RT-Thread 實時內核,10ms 掃描周期

兼容性強: 標準 HID 協議,Windows/Linux/macOS 免驅

可擴展: 可方便添加震動反饋、LED 指示等功能

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

    關注

    60

    文章

    8464

    瀏覽量

    285521
  • HID
    HID
    +關注

    關注

    2

    文章

    140

    瀏覽量

    49008
  • 開發板
    +關注

    關注

    26

    文章

    6372

    瀏覽量

    120050
  • RT-Thread
    +關注

    關注

    32

    文章

    1632

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    風洞懸浮球:基于RT-ThreadMCXA156的簡單控制實踐 | 技術集結

    目錄項目概述硬件選型與連接軟件架構設計VL53L0X配置風扇控制(PWM)控制算法遠程監控OLED數據顯示有待改進的地方項目源碼直播回放1項目概述本項目基于RT-Thread實時操作系統
    的頭像 發表于 10-17 11:53 ?5632次閱讀
    風洞懸浮球:基于<b class='flag-5'>RT-Thread</b>與<b class='flag-5'>MCXA156</b>的簡單控制實踐 | <b class='flag-5'>技術</b><b class='flag-5'>集結</b>

    智能門鎖:基于RT-Thread與FRDM-MCXA156的多外設嵌入式實踐 | 技術集結

    本項目為RT-Thread嵌入式大賽獲獎作品,基于恩智浦MCXA156系列微控制器構建了一款多功能智能門鎖控制系統。目前,恩智浦已有多款產品對RT-Thread完成了適配。近期,MCXA
    的頭像 發表于 01-23 11:06 ?7839次閱讀
    智能門鎖:基于<b class='flag-5'>RT-Thread</b>與FRDM-<b class='flag-5'>MCXA156</b>的多外設嵌入式實踐 | <b class='flag-5'>技術</b><b class='flag-5'>集結</b>

    RT-Thread Vector軟件包:嵌入式開發的動態數組容器 | 技術集結

    RT-Thread Vector軟件包:嵌入式開發的動態數組容器 | 技術集結
    的頭像 發表于 01-25 09:33 ?5556次閱讀
    <b class='flag-5'>RT-Thread</b> Vector軟件包:嵌入式開發的動態數組容器 | <b class='flag-5'>技術</b><b class='flag-5'>集結</b>

    基于RT-Thread和FRDM-MCXA156的智能頭盔傳感器數據采集系統 | 技術集結

    RT-Thread實時操作系統,實現多傳感器數據采集并通過ESP01SWiFi模塊上報至華為云IoT平臺。文末掃碼申請試用開發板。1.1主要功能1.2系統架構+---------
    的頭像 發表于 03-13 17:44 ?7552次閱讀
    基于<b class='flag-5'>RT-Thread</b>和FRDM-<b class='flag-5'>MCXA156</b>的智能頭盔傳感器數據采集系統 | <b class='flag-5'>技術</b><b class='flag-5'>集結</b>

    基于RT-Thread+RA6M4的usb游戲搖桿設計相關資料推薦

    基本的usb slave HID配置,控制游戲搖桿的按鍵,x,y,z軸, 視覺頭盔等功能整體系統框架RT-Thread使用情況概述RT-Thread
    發表于 08-18 11:42

    記錄——基于 RT-Thread 實現 USB 虛擬串口

    記錄——基于 RT-Thread 實現 USB 虛擬串口記錄一下我在正點原子 F429 阿波羅開發板上實現 USB 虛擬串口的過程,希望可以
    發表于 12-02 17:21 ?6次下載
    記錄——基于 <b class='flag-5'>RT-Thread</b> <b class='flag-5'>實現</b> <b class='flag-5'>USB</b> 虛擬串口

    RT-Thread全球技術大會:螢石研發團隊使用RT-Thread技術挑戰

    RT-Thread全球技術大會:研發團隊使用RT-Thread技術挑戰 ? ? ? ? 審核編輯:彭靜
    的頭像 發表于 05-27 11:36 ?2547次閱讀
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技術</b>大會:螢石研發團隊使用<b class='flag-5'>RT-Thread</b>的<b class='flag-5'>技術</b>挑戰

    RT-Thread全球技術大會:RT-Thread測試用例集合案例

    RT-Thread全球技術大會:RT-Thread測試用例集合案例 ? ? ? ? ? 審核編輯:彭靜
    的頭像 發表于 05-27 16:34 ?2951次閱讀
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技術</b>大會:<b class='flag-5'>RT-Thread</b>測試用例集合案例

    RT-Thread全球技術大會:RT-Thread對POSIX的實現情況介紹

    RT-Thread全球技術大會:RT-Thread對POSIX的實現情況介紹 ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發表于 05-27 16:52 ?2846次閱讀
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技術</b>大會:<b class='flag-5'>RT-Thread</b>對POSIX的<b class='flag-5'>實現</b>情況介紹

    RT-Thread文檔_RT-Thread 簡介

    RT-Thread文檔_RT-Thread 簡介
    發表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 簡介

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    RT-Thread USB HID實現數據收發時遇到數據發送不了?

    最近在學習RT-thread,想要實現使用USB HID的數據收發,USB設備類型是人機接口設備,但是發現發送數據時沒有反應,但是電腦是能識
    的頭像 發表于 09-26 14:44 ?2794次閱讀
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>USB</b> <b class='flag-5'>HID</b><b class='flag-5'>實現</b>數據收發時遇到數據發送不了?

    免費申請 | FRDM-MCXA156評測活動發布!

    RT-Thread現已支持恩智浦官方推出的FRDM-MCXA156開發板并提供BSP!為了讓大家更好地體驗MCXA156高能效微控制器的魅力,RT-Thread攜手恩智浦半導體,隆重推
    的頭像 發表于 02-10 18:45 ?1151次閱讀
    免費申請 | FRDM-<b class='flag-5'>MCXA156</b>評測活動發布!

    CherryUSB-HID設備實踐 | 技術集結

    本文為大家帶來CherryUSB-HID設備實踐,以MCXA156為例。開發環境搭建請參考RT-Thread的快速入門,咱們就直入主題,折騰USB去。CherryUSB的移植適配據筆者
    的頭像 發表于 04-27 17:46 ?1987次閱讀
    CherryUSB-<b class='flag-5'>HID</b>設備實踐 | <b class='flag-5'>技術</b><b class='flag-5'>集結</b>

    探索FRDM - MCXA156開發板:設計與評估的理想之選

    探索FRDM - MCXA156開發板:設計與評估的理想之選 在電子設計與開發領域,擁有一款功能強大且易于使用的評估平臺至關重要。今天,我們將深入探討NXP推出的FRDM - MCXA156開發板
    的頭像 發表于 12-24 11:50 ?2096次閱讀