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

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

目錄


項(xiàng)目概述


RT-Thread 使用情況概述


硬件框架


軟件框架說明


軟件模塊說明


效果演示


代碼地址


總結(jié)

1 項(xiàng)目概述

1.1 實(shí)現(xiàn)功能

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

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

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

USB HID 協(xié)議:標(biāo)準(zhǔn) HID Gamepad 設(shè)備,即插即用,無需驅(qū)動(dòng)

實(shí)時(shí)響應(yīng):10ms 掃描間隔,低延遲輸入

1.2 技術(shù)特點(diǎn)

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

2 RT-Thread使用情況概述

2.1 內(nèi)核配置

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

2.2 使用的組件

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

2.3 線程設(shè)計(jì)

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

2.4 自動(dòng)初始化

項(xiàng)目使用 RT-Thread 自動(dòng)初始化機(jī)制:

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

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 軟件框架

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



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

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)

檢測到低電平表示該交叉點(diǎn)按鍵被按下

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è)備實(shí)現(xiàn)

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

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



USB 描述符配置:

VID: 0x045E (Microsoft)

PID: 0x02FF (Generic Gamepad)

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

輪詢間隔: 1ms

5.4 gamepad_app 模塊(應(yīng)用層)

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

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

核心特性:

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

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

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

按鍵映射:

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

5.5 drv_adc 模塊(ADC 驅(qū)動(dòng))

文件:Libraries/drivers/drv_adc.c

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

關(guān)鍵修改:

修復(fù)了多通道初始化覆蓋問題

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

優(yōu)化了命令槽分配(4 個(gè)通道使用 4 個(gè)獨(dú)立命令槽)

6 演示效果

6.1 啟動(dòng)日志

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/ 在線平臺(tái)課測試所有按鈕和搖桿

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

6.3功能演示

16 個(gè)按鈕正常響應(yīng)

左右搖桿 X/Y 軸正常

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

搖桿按鍵正常

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

低延遲響應(yīng)

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

7 代碼地址

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

主要文件:

applications/├── main.c # 主入口├── gamepad_app.c/h # 游戲手柄應(yīng)用層├── 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ū)動(dòng)(已修改)


8 總結(jié)

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

模塊化設(shè)計(jì): 硬件層、功能層、應(yīng)用層分離,易于維護(hù)

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

兼容性強(qiáng): 標(biāo)準(zhǔn) HID 協(xié)議,Windows/Linux/macOS 免驅(qū)

可擴(kuò)展: 可方便添加震動(dòng)反饋、LED 指示等功能

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

    關(guān)注

    60

    文章

    8437

    瀏覽量

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

    關(guān)注

    2

    文章

    139

    瀏覽量

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

    關(guān)注

    26

    文章

    6262

    瀏覽量

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

    關(guān)注

    32

    文章

    1602

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    RT-Thread全球技術(shù)大會(huì):RT-Thread對POSIX的實(shí)現(xiàn)情況介紹 ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 16:52 ?2573次閱讀
    <b class='flag-5'>RT-Thread</b>全球<b class='flag-5'>技術(shù)</b>大會(huì):<b class='flag-5'>RT-Thread</b>對POSIX的<b class='flag-5'>實(shí)現(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實(shí)現(xiàn)數(shù)據(jù)收發(fā)時(shí)遇到數(shù)據(jù)發(fā)送不了?

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

    免費(fèi)申請 | FRDM-MCXA156評(píng)測活動(dòng)發(fā)布!

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

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

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

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

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