1. 程式人生 > >STM32F103C8T6的USB HID複合裝置的實現要點

STM32F103C8T6的USB HID複合裝置的實現要點

1,可從官網下載STM32_USB-FS-Device_Lib_V4.0,裡面有Custom_HID例子參考。
可從Custom_HID修改得到。時刻記住“自己是STM32F10X_MD系列”以及“自己不是官方demo板”即可將無用的程式碼去掉,譬如去掉ADC等等相關程式碼。
2,需要SystemInit();配置為72MHz,否則無法工作,USB是工作在12MHz。
3,如果D+直接上拉到3.3V,把demo usb_pwr.c的PowerOn和PowerOff函式改為空函式。否則PC無法識別,單步除錯發現不知跳哪去了。假設不註釋,亦可把usb_desc.c的裝置描述符bcdUSB域改為0x0110,即USB1.1也是可行的。
4,主要修改usb_conf.h,usb_desc.c以及usb_prop.c,主要是配置描述符增加鍵鼠的HID描述符和端點描述符,當然對應的報告描述符也需要修改與增加。

usb_prop.c主要在CustomHID_Reset回撥新增新增端點的初始化,以及CustomHID_Data_Setup中對不同index(對應複合裝置裡的不同介面)進行不同的描述符獲取(HID描述符獲取函式、報告描述符獲取函式等)回撥函式的註冊。

總體上比較容易移植!

重點是:理解複合裝置是“一個裝置描述符中包含一個配置描述符,而這個配置描述符又包含N個介面描述符(譬如,鍵鼠為2個),最後,每個介面描述符又包含N個端點描述符(鍵鼠為2個,一個IN埠,另外一個OUT埠,型別是中斷傳輸方式)”。當然如果是hid裝置還會有HID描述符。

順序是:裝置描述符->“配置描述符1->介面描述符1_1->[HID描述符1_1]->端點描述符組1_1->介面描述符1_2->[HID描述符1_2]->端點描述符組1_2....->配置描述符2->介面描述符2_1...."

難點是:理解報告描述符,可參看www.usb.org相關的hid class文件。

需要掌握的技巧是:從已有(現成)的複合裝置(譬如鍵鼠)中使用USBlyzer工具摘取它的報告描述符,填到自己的描述符中,可實現很多,諸如寫字板,thouchpad(使用絕對座標),滑鼠(相對座標)等裝置,十分強大的技巧!!!!!(這裡必須要綠一下)

相關推薦

STM32F103C8T6的USB HID複合裝置實現要點

1,可從官網下載STM32_USB-FS-Device_Lib_V4.0,裡面有Custom_HID例子參考。可從Custom_HID修改得到。時刻記住“自己是STM32F10X_MD系列”以及“自己不是官方demo板”即可將無用的程式碼去掉,譬如去掉ADC等等相關程式碼。2

STM32實現HID和u盤複合裝置

 USB裝置可以定義一個複合裝置,複合裝置分兩種,一種是一個裝置多個配置,還有一種是一個配置多個介面,在本例中採用一個配置多個介面的方式     首先修改裝置描述符,標準裝置描述符和報告描述符都不需要修改,只需要修改配置描述符即可 //usb配置描述符 const u8

STM32 自定義HID USB裝置實現

最近需要使用STM32開發一個裝置通過HID協議與主機通訊,於是開始學習USB,發現USB這個體系實在太龐大了,直接看USB的例程根本看不懂,完全找不到突破口,最後在網上找到一本不錯的書《圈圈教你玩USB》,這本書能夠很好地帶你入門。列舉過程,請求,令牌,資料包,端點,描述符,這些知識都講的很清

USB自定義HID裝置實現-STM32

該文件使用USB韌體庫,在其基礎上進行了自己的定製,完成了一個USB-HID裝置,首先是usb_desc.c檔案,裡面存放了usb各種描述符的存在 #include "usb_desc.h" //usb標準裝置描述符 const u8 DinkUsbDeviceDe

決策樹演算法實現要點

1.定義節點(節點的集合形成樹);即定義一個結構體Point,而 用Point tree[] 來表示樹。 點Point裡面包括name(在該點進行分類的特徵),val(該點父輩的特徵的某個值),n_child(帶點子代的數量),*son(指向子代的指標),id(帶節點是否有必要存在) 2.全

SQLserver Alwayson實現要點

之前一直沒有完全弄清楚Alwayson的原理,包括可用組的概念,叢集的架構是怎麼樣的,故障轉移是如何實現的,讀寫分離是如何實現的,故障轉移和可用組群的關係,稍微學習總結一下。 最重要的結論是: 1、標準的AlwaysOn方案提供讀寫分離的是統一的listener(包括虛擬IP、連線地址和埠,

amlogic平臺android 系統linux核心中新增i2c裝置實現i2c的讀寫

上一篇,我介紹瞭如何在uboot中新增i2c裝置,以及移植i2c的讀寫介面。簡單來說uboot階段使用i2c裝置和平臺關聯性比較大,但不同平臺套路是差不多的。你可以將uboot階段看作是引導androi

ADIS16203角度感測器的stm32驅動實現要點

一、前言ADIS16203是一款完整的傾斜角測量系統,採用ADI公司的 iSensor™整合技術製造,全部功能均集成於一個緊湊的封裝中。該器件採用嵌入式訊號處理解決方案來增強ADI公司的 iMEMS®感測器技術,可提供適當格式的工廠校準、感測器數字傾斜角資料,從而利用序列外設

簡單使用系統的裝置實現二維碼掃描

這裡我用了系統的東西簡單的實現了一下掃描二維碼 .h #import <UIKit/UIKit.h> #import <AVFoundation/AVFoundation.h> @interface saoMiaoViewController :

【bootstrap】對於不同裝置實現某一div塊的自動隱藏或者顯示

使用bootstrap,想實現相對於不同裝置實現某一div塊的自動隱藏或者顯示,如下: Bootstrap 提供了一些輔助類,以便更快地實現對移動裝置友好的開發。這些可以通過媒體查詢結合大型、小型和

atol(atoi)函式的實現要點

以下是c標準庫中該函式的實現程式碼,從中分析要點/*** *atox.c - atoi and atol conversion * * Copyright (c) 1989-1997, Microsoft Corpor

基於stm32的自定義HID裝置開發與上位機通訊實現(附原始碼)

現在主流的安卓手機資料連線線,Mini-usb、Micro-usb,Type-c,產品追隨主流,非聯網裝置,摒棄ST-LINK、JLINK,直接用usb資料傳輸升級。主要實現與HID裝置的通訊即人機互動。本文主要介紹了HID裝置的下位機通訊連線與上位機裝置識別。 下位機:

Mysql DBA 高級運維學習筆記-Heartbeat實現web服務的高可用案例及維護要點

heartbeat8.Heartbeat實現web服務的高可用案例 8.1部署準備 通過web服務高可用案例來熟悉heatbeat軟件的使用,用上面的兩臺服務器機器名分別為heartbeat-1-130和heartbeat-1-129 8.2 安裝配置http服務(兩臺機器都要安裝) yum install

mysql運維管理-Heartbeat實現web服務的高可用案例及維護要點

server exp lec disabled urn tool distrib model recover 1.DRBD介紹 Distributed Replicated Block Device (DRBD)是基於塊設備在不同的高可用服務器對之間同步和鏡像數據的軟件,通

Android實現關機、重啟裝置

  1、關機 方法一:關機屬於系統級操作,所以需要獲得系統級的許可權。 android:sharedUserId="android.uid.system" <uses-permission android:name="android.permission.SHU

Android 整合百度地圖實現裝置定位

Android 整合百度地圖實現裝置定位步驟1:申請android 端SDK :http://lbsyun.baidu.com/步驟2:下載基礎版SDK步驟3:下載示例程式步驟4:開始整合:ak加入libs加入SDKInitializer.setCoordType(CoordType.BD09LL);圖示類

我物聯專案(14)智慧裝置定位服務實現

步驟一:申請百度地圖賬號及配置應用資訊* http://lbsyun.baidu.com/ 步驟二:智慧裝置定位服務實現 var map = new BMap.Map("map"); var point = new BMap.Point(121.382029,40.312903)

[轉]C++ MFC介面讀寫USB HID裝置資料程式

C++ MFC介面讀寫USB HID裝置資料程式跟大家分享一個最近開發的,用來測試USB HID裝置的通用程式,程式還有很多可以繼續優化的地方,比如說interupt的週期,讀取位元組的多少等。我遇到的問題是:開發一個簡單易用的介面,用來對USB HID裝置(比如說遊戲手柄,控制面板等)讀寫資料,一

樹莓派Raspberry Pi實戰之命令列下實現USB儲存裝置自動掛載

簡單介紹實現命令列下USB儲存裝置自動掛載的方法,Linux gnome/kde視窗環境下有移動儲存的管理程式,可以實現自動掛載移動儲存裝置,但是在命令列下 通常需要用mount命令手動掛載USB儲存裝置。   通過給linux下的裝置管理服務udev新增規則配置檔案,可以實現命令列下U

基於DLNA實現iOS,Android投屏:SSDP發現裝置

SSDP能夠在區域網能簡單地發現裝置提供的服務。SSDP有兩種發現方式:主動通知和搜尋響應方式。 定址 UPnP 技術是架構在 IP 網路之上。因此擁有一個網路中唯一的 IP 地址是 UPnP 裝置正常工作的基礎。UPnP 裝置首先檢視網路中是否有 DHCP 伺服器,如果有,那麼使用 DHC