電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>用于Nucleo32和CubeMX第1部分的USB HID

用于Nucleo32和CubeMX第1部分的USB HID

2022-11-24 | zip | 0.29 MB | 次下載 | 免費(fèi)

資料介紹

描述

使用 Nucelo32 的 HID USB 設(shè)備 - 第 1 部分

由于 STM 引入了用于代碼生成的 CubeMX,我尋找了一個(gè)有趣的應(yīng)用程序來(lái)使用這個(gè)工具并檢查它的易用性。選擇是制作一個(gè) HID 設(shè)備,特別是具有 X/Y 模擬輸入和一些按鈕的操縱桿或游戲手柄,在 Window10 下支持。

第 1 部分:使用模擬點(diǎn)擊設(shè)置 USB 設(shè)備

使用 Cube 項(xiàng)目“USBTest4_joystick”

Nucleo32對(duì)于硬件,我們使用 STM43L432KC Nucleo-32 板,但您可以使用任何其他支持備用 USB 接口的 nucleo(32/64/144) 板,但我喜歡小巧的外形和 Arduino 接頭樣式。它配備了一個(gè)大型 32 位微控制器,在本例中為 Cortex-M4 - QFN32 封裝中的低功耗

pYYBAGN-z--ACpZBAAJqO9eBzwg773.png
連接性
?

該板預(yù)定義了一個(gè)調(diào)試芯片 - ST-Link -,它使用頂部的 mico-usb 通過(guò)虛擬 com 端口和/或大容量存儲(chǔ)接口進(jìn)行通信這個(gè) ST-Link 是您的程序和調(diào)試接口(和電源),并且使用 UArt2 RX/TX 進(jìn)行接口,(這不是我們將使用的 USB !?。﹤溆?USB 設(shè)備被移植到 PA_12(D2 ) 和板上的 PA_11 (D10)。為了準(zhǔn)備,您可以使用舊的 USB 電纜,切斷外圍連接器(迷你或微型 USB)并剝?nèi)ル娋€。:

紅色 = 5V,黑色 = GND,綠色 =D+,白色 =D-。這個(gè)不錯(cuò)的部分是您可以將 USB 直接連接到核板,不需要接口,如果您愿意,除了一些保護(hù)(即鉗位二極管,或者在我的情況下,5V 電源線上的二極管以避免核電源在連接錯(cuò)誤)。現(xiàn)在您已準(zhǔn)備好設(shè)置工具。

立方體MX

CubeMX 是一款免費(fèi)工具,支持使用基本驅(qū)動(dòng)程序或 Bsp(板級(jí)支持包)輕松設(shè)置 STM32 設(shè)備,以用于新的開(kāi)發(fā)項(xiàng)目。它會(huì)生成一組標(biāo)準(zhǔn)的庫(kù)和驅(qū)動(dòng)程序,因此您可以快速準(zhǔn)備好構(gòu)建自己的應(yīng)用程序。CubeMX 可在此處下載,CubeIDE在此處,安裝在您的系統(tǒng)上并啟動(dòng) CubeMX。

  • 深入閱讀 CubeMX 項(xiàng)目設(shè)置 :: ahackaday

現(xiàn)在選擇新項(xiàng)目,并使用板選擇器工具找到您的核板。生成默認(rèn)值,您最終將得到所選設(shè)備的引腳。

pYYBAGN-0QaAHg4eAAEuHiY_jDU205.png
選擇板后的 CubeMX 啟動(dòng)屏幕
?

當(dāng)您選擇板時(shí),布局已經(jīng)預(yù)先定義,板上的 IO 布線,如 OSC、UArt2 RX/TX 和 PB3 上的綠色 LED。在左側(cè),您可以選擇每個(gè)功能塊的芯片布局詳細(xì)信息。要添加 USB,請(qǐng)選擇connecivity ,選擇USB并選擇FS device ,現(xiàn)在已經(jīng)配備了引腳 PA11 和 PA12。對(duì)于中間件(驅(qū)動(dòng)程序),選擇中間件部分,USB_Device并選擇人機(jī)接口設(shè)備(HID)的下拉框(不要使用自定義的)USB需要48Mhz時(shí)鐘,所以在頂部選擇時(shí)鐘配置,您可以使用自動(dòng)時(shí)鐘解析器USB 時(shí)鐘設(shè)置為 48Mhz。您幾乎可以編寫(xiě)應(yīng)用程序了!

立方IDE

還有一些準(zhǔn)備工作的步驟:選擇Project Manager選項(xiàng)卡,為項(xiàng)目命名,使用Basic Application Structure(對(duì)于 main.c 結(jié)構(gòu)),然后在 Toolchain 部分選擇CubeIDE 保存您的項(xiàng)目....然后按右上角的生成代碼!準(zhǔn)備好后,您可以打開(kāi)項(xiàng)目,CubeIDE 將啟動(dòng):

pYYBAGN-0QiAPWWsAAC6TyOR2Ow317.png
CubeIDE 重新開(kāi)始
?

我不打算解釋 CubeIDE 接口,假設(shè)您以前使用過(guò)像 Gnu 或 Keil 這樣的 IDE。這是 CubeMX 所做的好事:

  • 它生成了您的完整項(xiàng)目,包括驅(qū)動(dòng)程序、庫(kù)和一個(gè) main() 函數(shù),其中設(shè)置了初始化并且您可以編寫(xiě)程序代碼,它編譯無(wú)錯(cuò)誤哇!
  • 有一些缺點(diǎn):它只生成一種 USB HID:鼠標(biāo),因此您可以在 Middelwares>...> Class>HID>Inc 和 >Src 中更改 USB 描述符。
  • 有一個(gè)主要缺點(diǎn):一旦您重新運(yùn)行 CubeMX 生成器,即在您添加了一些 GPIO 或 DMA 之后,它會(huì)覆蓋您的 Middelware 更改......所以請(qǐng)進(jìn)行備份!
  • 一般來(lái)說(shuō),我的印象是它覆蓋了除 main() 之外的所有代碼,在 "/* USER CODE BEGIN.... */" 和 /* USER CODE END... */." 部分的注釋之間。BE知道的 ?。?!

USB 描述符

這本身就是一個(gè)故事。請(qǐng)讓自己了解 USB 是如何工作的,以及描述符是如何工作的。有趣的鏈接是:

那么要改變什么呢?- 檢查這篇文章中的 CubeMX 項(xiàng)目文件,打開(kāi)帶有項(xiàng)目的 CubeIDE:USBTest4_joystick 。此示例構(gòu)建 USB 接口并生成“假”XY 運(yùn)動(dòng)和按鈕按下作為示例。

中間件部分:Class>HID>SRC>usbd_hid.c - 在這里我們必須更改描述符。首先適配“ USB HID device Configuration Descriptor ”:,這有3個(gè)部分:FS/HS和OtherSpeed,都是一樣的設(shè)置。將接口子類更改為無(wú)啟動(dòng) (0x00) 并將接口協(xié)議更改為 0x04 = 操縱桿。對(duì)所有 3 個(gè)部分執(zhí)行此操作(?。?/font>

0x00,             /* bInterfaceSubClass : 1=BOOT, 0=no boot */
0x04,             /* nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse  4=joystick  */

其次,我們必須更改 HID 設(shè)備描述符。這描述了我們發(fā)送給 USB 主機(jī)的報(bào)告,以告知我們的設(shè)備正在吐出哪些數(shù)據(jù):find static uint8_t HID_MOUSE_ReportDesc (我們保持相同的鼠標(biāo)命名,但如果您愿意,可以在整個(gè)文件中更改它)。數(shù)組內(nèi)容將是:

0x05, 0x01, // Usage Page ( Generic Desktop controls)
    0x09, 0x04, // Usage (Joystick)
    0xA1, 0x01, // Collection (Application)

	0xA1, 0x02, // Collection (Logical)
	 0x05, 0x01, // Usage Page (Generic Ctrls)
	 0x09, 0x30, // Usage X
	 0x09, 0x31, // Usage Y
	 0x15, 0x81, // Logical Minimum (-127)
	 0x25, 0x7F, // Logical Maximum (127)
	 0x75, 0x08, // Report Size (8) -> 8 bits (1 byte value)
	 0x95, 0x02, // Report Count (2) -> 2x = 2 bytes -> no bit stuffing
	 0x81, 0x02, // Input (Data,Var,Abs,...)
	 0x05, 0x09, // Usage Page (Button)
	 0x09, 0x01, // Usage Button1
	 0x15, 0x00, // Logical Minimum (0)
	 0x25, 0x01, // Logical Maximum (1)
	 0x75, 0x01, // Report Size (1) -> 1 bit
	 0x95, 0x01, // Report Count (1) -> 1 value : need to stuff 7 more bits
	 0x81, 0x02, // Input (Data,Var,Abs...)
	 0x75, 0x07, // Report Size (7) -> 7 bit
         0x95, 0x01, // Report Count (1) -> 1 value  7 bits for byte alignment
	 0x81, 0x03, // Input (Const,Var,Abs,,,,,)
	0xC0, // end collection Logical

   0xC0, // End Collection =>  46 bytes
         //  Report 2 bytes signed for XY and 1byte  unsigned for button info bit-0

現(xiàn)在更改包含文件以將 Class>HID>SRC>usbd_hid.h 中此數(shù)組的大小更改為 46:

#define HID_EPIN_ADDR                              0x81U
#define HID_EPIN_SIZE                              0x04U // kept the same

#define USB_HID_CONFIG_DESC_SIZ                    34U
#define USB_HID_DESC_SIZ                           9U
#define HID_MOUSE_REPORT_DESC_SIZE                 46U // CHANGED

現(xiàn)在,對(duì)這兩個(gè)文件進(jìn)行備份,因?yàn)楫?dāng)您運(yùn)行另一個(gè)代碼生成器時(shí),cubeMX 會(huì)覆蓋這些文件!這就是我們所做的全部更改,USB 部分將使用 STM USB-ID,并且設(shè)備將被識(shí)別為 STM 產(chǎn)品。對(duì)于測(cè)試,這很好,對(duì)于您自己的產(chǎn)品,您應(yīng)該通過(guò) USB.ORG 獲取您自己的 ID。

Src > Main() :首先將 Hid 包含文件添加到用戶包含部分:

/* USER CODE BEGIN Includes */
#include 
#include "usbd_hid.h"
/* USER CODE END Includes */

其次,我必須顯式聲明 USB 句柄,否則編譯器會(huì)出錯(cuò)(可能是我的路徑有問(wèn)題?):

/* USER CODE BEGIN PV */
extern USBD_HandleTypeDef hUsbDeviceFS;
/* USER CODE END PV */

現(xiàn)在設(shè)置一個(gè)符合 usbd_hid.c 中報(bào)告描述符的結(jié)構(gòu)和變量:

// HID Game
 struct gameHID_t {
      int8_t JoyX; 	// X 1 byte, signed value
      int8_t JoyY; 	// Y 1 byte, signed value
      uint8_t JoyB1; 	// Button, one byte, button is bit #0
	  };
	  struct gameHID_t gameHID;
	  gameHID.JoyX = 0;
	  gameHID.JoyY = 0;
	  gameHID.JoyB1 = 0;
	  int8_t counter1=0; // counter for makingthe fake values wrapping around

最后但同樣重要的是,在主 while 循環(huán)中設(shè)置和發(fā)送報(bào)告值:

while (1)
  {

    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
 // Send HID report
counter1=(counter1+1)%32-127; // faking X,Y and button values
gameHID.JoyX = counter1*2;
gameHID.JoyY = counter1*4;
gameHID.JoyB1 = ~gameHID.JoyB1; // 
USBD_HID_SendReport(&hUsbDeviceFS, (uint8_t*) &gameHID, sizeof(struct gameHID_t));
HAL_Delay(100);

  }
  /* USER CODE END 3 */

編譯項(xiàng)目,并啟動(dòng)代碼(使用調(diào)試器或使用 Bin 文件轉(zhuǎn)儲(chǔ)到 PC 上 nucleo 的大容量存儲(chǔ)驅(qū)動(dòng)器。如果您需要使用 nucleo 板在 CubeIDE 中設(shè)置調(diào)試器的幫助,這是有趣的閱讀:

視窗 USB

運(yùn)行后,將 USB 插入系統(tǒng),它應(yīng)該可以識(shí)別 USB 設(shè)備。在 Windows> ControlPanel > Devices & Printers 下,會(huì)彈出一個(gè)新設(shè)備作為 GameController STM32 !

pYYBAGN-0QuAfP-7AAKcorLNBes152.png
Windows下的USB設(shè)備
?

左鍵單擊新設(shè)備,然后選擇設(shè)置,雙擊 STM 控制器打開(kāi)測(cè)試窗口。- 如果您的設(shè)備根本不顯示,請(qǐng)檢查您的 USB HID 代碼。- 如果您的設(shè)備顯示,但有感嘆,點(diǎn)擊設(shè)備,windows給你一個(gè)故障描述,主要是描述符有問(wèn)題(錯(cuò)誤代碼,或者數(shù)組大小不匹配)-如果你的設(shè)備顯示正常,但測(cè)試結(jié)果不存在(沒(méi)有移動(dòng)或按鈕閃爍),報(bào)告發(fā)送有問(wèn)題,請(qǐng)檢查 main() 中的報(bào)告數(shù)據(jù)和結(jié)構(gòu)。

要進(jìn)行更多調(diào)試,您可以使用由 CubeMX 實(shí)例化的 ST-Link 調(diào)試 Uart(在本例中為 uart2)并使用虛擬 com-port 通過(guò) HAL_UART_Transmit( ) 函數(shù)發(fā)送/接收文本,請(qǐng)參閱此閱讀鏈接。(它在 115200baud, 8, n, 1 上啟動(dòng))

第 2 部分:使用真正的按鈕和滑塊構(gòu)建 HID 設(shè)備

工作正在進(jìn)行中....


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開(kāi)發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)