chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內(nèi)不再提示

基于RT-Thread與MCXA156的USB HID游戲手柄設(shè)計與實現(xiàn) | 技術(shù)集結(jié)

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

掃碼添加小助手

加入工程師交流群

目錄


項目概述


RT-Thread 使用情況概述


硬件框架


軟件框架說明


軟件模塊說明


效果演示


代碼地址


總結(jié)

1 項目概述

1.1 實現(xiàn)功能

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

16 個數(shù)字按鈕:通過 4x4 矩陣鍵盤實現(xiàn) 14 個按鈕 + 2 個搖桿按鍵

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

USB HID 協(xié)議:標準 HID Gamepad 設(shè)備,即插即用,無需驅(qū)動

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

1.2 技術(shù)特點

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

2 RT-Thread使用情況概述

2.1 內(nèi)核配置

#defineRT_THREAD_PRIORITY_MAX 32 // 32 級優(yōu)先級#defineRT_TICK_PER_SECOND 1000 // 1ms 系統(tǒng)節(jié)拍#defineRT_USING_TIMER_SOFT // 軟件定時器#defineRT_USING_SEMAPHORE // 信號量#defineRT_USING_MUTEX // 互斥鎖#defineRT_USING_MAILBOX // 郵箱

2.2 使用的組件

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

2.3 線程設(shè)計

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

2.4 自動初始化

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

INIT_BOARD_EXPORT(rt_hw_adc_init); // ADC 驅(qū)動初始化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 系統(tǒng)框圖

┌─────────────────────────────────────────────────────────────┐│ 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 │││ │ (整合輸入設(shè)備,映射到USBHID報告) │││ └─────────────────────────────────────────────────────────┘│├─────────────────────────────────────────────────────────────┤│ 功能層 (Function) ││ ┌───────────────┐ ┌───────────────┐ ┌─────────────────┐ ││ │ key_app.c │ │ joystick_app.c│ │ usb_app.c │ ││ │ (矩陣鍵盤) │ │ (雙搖桿) │ │ (USBHID) │ ││ └───────────────┘ └───────────────┘ └─────────────────┘ │├─────────────────────────────────────────────────────────────┤│ 驅(qū)動層 (Driver) ││ ┌───────────────┐ ┌───────────────┐ ┌─────────────────┐ ││ │ drv_pin.c │ │ drv_adc.c │ │ CherryUSB │ ││ │ (GPIO) │ │ (ADC) │ │ (USBStack) │ ││ └───────────────┘ └───────────────┘ └─────────────────┘ │├─────────────────────────────────────────────────────────────┤│ RT-Thread內(nèi)核 ││ (線程調(diào)度、IPC、設(shè)備框架、自動初始化) │├─────────────────────────────────────────────────────────────┤│ 硬件抽象層 (HAL) ││ NXPMCXSDK/CMSIS │└─────────────────────────────────────────────────────────────┘



4.2 數(shù)據(jù)流

矩陣鍵盤 ──? 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)



嚴格遵守了 感知 --> 認知 --> 控制 系統(tǒng)設(shè)計模式

5 軟件模塊說明

5.1 key_app 模塊(矩陣鍵盤)

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

功能:4x4 矩陣鍵盤掃描

核心函數(shù):

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

掃描原理:

逐列輸出低電平

讀取所有行引腳狀態(tài)

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

5.2 joystick_app 模塊(搖桿)

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

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

數(shù)據(jù)結(jié)構(gòu):

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

核心函數(shù):

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 游戲手柄設(shè)備實現(xiàn)

HID 報告結(jié)構(gòu) (9 字節(jié)):

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

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

核心特性:

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

變化檢測: 只有狀態(tài)變化時才發(fā)送報告

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

按鍵映射:

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

5.5 drv_adc 模塊(ADC 驅(qū)動)

文件:Libraries/drivers/drv_adc.c

功能:LPADC 驅(qū)動,支持多通道 ADC 讀取

關(guān)鍵修改:

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

添加了超時保護,防止系統(tǒng)死鎖

優(yōu)化了命令槽分配(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.設(shè)備連接后,在”設(shè)備管理器”中顯示為 “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 驅(qū)動(已修改)


8 總結(jié)

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

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

實時性好: 基于 RT-Thread 實時內(nèi)核,10ms 掃描周期

兼容性強: 標準 HID 協(xié)議,Windows/Linux/macOS 免驅(qū)

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

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

    關(guān)注

    60

    文章

    8424

    瀏覽量

    283291
  • HID
    HID
    +關(guān)注

    關(guān)注

    2

    文章

    139

    瀏覽量

    48761
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    26

    文章

    6235

    瀏覽量

    116445
  • RT-Thread
    +關(guān)注

    關(guān)注

    32

    文章

    1596

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    風洞懸浮球:基于RT-ThreadMCXA156的簡單控制實踐 | 技術(shù)集結(jié)

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

    智能門鎖:基于RT-Thread與FRDM-MCXA156的多外設(shè)嵌入式實踐 | 技術(shù)集結(jié)

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

    RT-Thread Vector軟件包:嵌入式開發(fā)的動態(tài)數(shù)組容器 | 技術(shù)集結(jié)

    RT-Thread Vector軟件包:嵌入式開發(fā)的動態(tài)數(shù)組容器 | 技術(shù)集結(jié)
    的頭像 發(fā)表于 01-25 09:33 ?4979次閱讀
    <b class='flag-5'>RT-Thread</b> Vector軟件包:嵌入式開發(fā)的動態(tài)數(shù)組容器 | <b class='flag-5'>技術(shù)</b><b class='flag-5'>集結(jié)</b>

    基于RT-Thread+RA6M4的usb游戲搖桿設(shè)計相關(guān)資料推薦

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

    記錄——基于 RT-Thread 實現(xiàn) USB 虛擬串口

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

    RT-Thread全球技術(shù)大會:螢石研發(fā)團隊使用RT-Thread技術(shù)挑戰(zhàn)

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

    RT-Thread全球技術(shù)大會:Kconfig在RT-Thread中的工作機制

    RT-Thread全球技術(shù)大會:Kconfig在RT-Thread中的工作機制 ? ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 14:49 ?2271次閱讀
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技術(shù)</b>大會:Kconfig在<b class='flag-5'>RT-Thread</b>中的工作機制

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

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

    RT-Thread全球技術(shù)大會:RT-Thread對POSIX的實現(xiàn)情況介紹

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

    RT-Thread文檔_RT-Thread 簡介

    RT-Thread文檔_RT-Thread 簡介
    發(fā)表于 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 介紹與移植
    發(fā)表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    RT-Thread USB HID實現(xiàn)數(shù)據(jù)收發(fā)時遇到數(shù)據(jù)發(fā)送不了?

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

    免費申請 | FRDM-MCXA156評測活動發(fā)布!

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

    CherryUSB-HID設(shè)備實踐 | 技術(shù)集結(jié)

    本文為大家?guī)鞢herryUSB-HID設(shè)備實踐,以MCXA156為例。開發(fā)環(huán)境搭建請參考RT-Thread的快速入門,咱們就直入主題,折騰USB去。CherryUSB的移植適配據(jù)筆者
    的頭像 發(fā)表于 04-27 17:46 ?1714次閱讀
    CherryUSB-<b class='flag-5'>HID</b>設(shè)備實踐 | <b class='flag-5'>技術(shù)</b><b class='flag-5'>集結(jié)</b>

    探索FRDM - MCXA156開發(fā)板:設(shè)計與評估的理想之選

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