程序功能
將STM32的USB枚舉為HID設備。
STM32使用3個端點,端點0用于枚舉用,端點1和2用于數據的發送和接收。
端點長度為64,也就是單次最多可以傳輸64個字節數據。
STM32獲取上位機下發的數據并將該數據通過USB原樣返回,同時將數據打印輸出。
上位機程序通過調用windows的API實現對HID設備的讀寫控制。
USB接口原理圖:
HID枚舉成功:
程序效果圖
圖一 上位機程序運行圖
圖二 STM32串口打印輸出
圖三 Bus Hound抓取的數據
程序部分代碼
STM32的報告描述符:
const uint8_t CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] =
{
0x05, 0x8c, /* USAGE_PAGE (ST Page) */
0x09, 0x01, /* USAGE (Demo Kit) */
0xa1, 0x01, /* COLLECTION (Application) */
// The Input report
0x09,0x03, // USAGE ID - Vendor defined
0x15,0x00, // LOGICAL_MINIMUM (0)
0x26,0x00, 0xFF, // LOGICAL_MAXIMUM (255)
0x75,0x08, // REPORT_SIZE (8bit)
0x95,0x40, // REPORT_COUNT (64Byte)
0x81,0x02, // INPUT (Data,Var,Abs)
// The Output report
0x09,0x04, // USAGE ID - Vendor defined
0x15,0x00, // LOGICAL_MINIMUM (0)
0x26,0x00,0xFF, // LOGICAL_MAXIMUM (255)
0x75,0x08, // REPORT_SIZE (8bit)
0x95,0x40, // REPORT_COUNT (64Byte)
0x91,0x02, // OUTPUT (Data,Var,Abs)
0xc0 /* END_COLLECTION */
}; /* CustomHID_ReportDescriptor */
上位機測試程序
/**
* @brief 發送數據后讀取數據
* @param None
* @retval None
*/
void HIDSampleFunc(void)
{
HANDLE hDev;
BYTE recvDataBuf[1024],reportBuf[1024];;
DWORD bytes;
hDev = OpenMyHIDDevice(0); // 打開設備,不使用重疊(異步)方式 ;
if (hDev == INVALID_HANDLE_VALUE){
printf("INVALID_HANDLE_VALUE\n");
return;
}
reportBuf[0] = 0; // 輸出報告的報告 ID 是 0
for(int i=0;i reportBuf[i+1]=i+1;//將數據存放在數據緩沖區 } printf("開始寫數據到設備...\n"); // 寫入數據到設備,注意,第三個參數值必須為REPORT_COUNT+1,否則會返回1784錯誤 if (!WriteFile(hDev, reportBuf, REPORT_COUNT+1, &bytes, NULL)){ printf("write data error! %d\n",GetLastError()); return; }else{ printf("成功向設備寫出%d個數據... \n",bytes); } printf("開始從設備讀取數據...\n"); // 從設備讀取數據,注意,第三個參數值必須大于等于REPORT_COUNT+1,否則會返回1784錯誤 if(!ReadFile(hDev, recvDataBuf, REPORT_COUNT+1, &bytes, NULL)){ // 讀取設備發給主機的數據 printf("read data error! %d\n",GetLastError()); return; }else{ printf("成功向設備讀出%d個數據... \n",bytes); } printf("設備返回的數據為:\n"); //顯示讀取回來的數據 for(int i=0;i printf("0x%02X ",recvDataBuf[i+1]); } printf("\n\r"); }
上一篇:STM32學習筆記之USB數據接收和發送流程分析
下一篇:stm32usb庫bug及解決辦法
推薦閱讀
史海拾趣
Collins Electronics Corp的創始人在電子領域擁有深厚的背景和豐富的經驗。在公司創立初期,他們發現市場上的電子設備在性能和穩定性上存在巨大的提升空間。于是,他們決定創立一家公司,專注于研發和生產高品質的電子設備。經過多次試驗和改進,Collins Electronics Corp推出了他們的首款產品,一款高性能的信號放大器。這款產品憑借其卓越的性能和穩定性,在市場上獲得了極大的成功,也為公司的后續發展奠定了堅實的基礎。
APM Hexseal的產品很快在軍事領域獲得了廣泛應用。公司的密封靴子通過了嚴格的軍事檢查和獨立的QPL等效項,證明了其卓越的性能和可靠性。此外,APM Hexseal還協助開發了MIL-B-5423規范(現為MIL-DTL-5423),為軍方的新設備保護要求設定了初始標準。這一合作不僅提升了APM Hexseal在軍事領域的影響力,也為其在電子行業中的發展打開了新的大門。
在品質和創新的支撐下,協順電子開始積極拓展市場。公司通過參加各類展會、舉辦技術交流會等方式加強與客戶的溝通和交流,同時也不斷完善自己的銷售網絡和售后服務體系。此外,協順電子還注重品牌建設,通過廣告宣傳、公關活動等方式提升品牌知名度和美譽度。這些努力使得公司的市場份額不斷擴大,品牌影響力也逐漸增強。
如今,AirBorn已經成為電子連接器行業的領軍企業之一。面對未來,AirBorn將繼續秉承“創新、質量、服務”的理念,不斷提升技術水平和產品質量。同時,公司還將積極拓展新的應用領域和市場,為全球客戶提供更加優質、高效的產品和服務。相信在未來的發展中,AirBorn將繼續書寫輝煌的發展篇章。
請注意,以上故事是基于AirBorn公司的公開信息和一般電子行業的發展趨勢創作的,可能并不完全準確或詳盡。要了解AirBorn公司的最新發展和詳細信息,建議查閱公司官方網站或相關新聞報道。
Elcoma公司一直將產品質量視為企業的生命線。他們建立了嚴格的質量管理體系,從原材料采購到產品生產的每一個環節都進行嚴格的質量控制。同時,Elcoma還注重客戶反饋,不斷改進產品和服務,以滿足客戶的需求和期望。這種對品質的執著追求贏得了客戶的信任和好評,使Elcoma在競爭激烈的電子市場中脫穎而出。
2015年,FIDELIX迎來了一個重要的轉折點。在這一年,東芯半導體有限公司(以下簡稱“東芯半導體”)正式收購了FIDELIX 25.3%的股權,成為其第一大股東及實際控制人。這一收購標志著FIDELIX開始進入一個新的發展階段。
通過與東芯半導體的合作,FIDELIX獲得了更多的資金支持和市場資源。東芯半導體是一家專注于中小容量存儲芯片研發、設計和銷售的中國企業,在半導體領域擁有豐富的經驗和資源。雙方的合作不僅為FIDELIX帶來了更多的發展機會,同時也加速了FIDELIX在國際市場上的擴張步伐。
在上述兩個故事的基礎上,可以根據FIDELIX公司的具體發展歷程、重要事件、技術創新、市場策略等方面進行進一步的拓展和補充,以形成完整、詳細的故事內容。
1)高頻三極管V1和電容C3、C5、C6組成一個電容三點式的振蕩器 2)C4、L組成一個諧振器:諧振頻率就是調頻話筒的發射頻率,根據圖中元件的參數發射頻率可以在88~108MHZ之間,正好覆蓋調頻收音機的接收頻率,通過調整L的數值(拉伸或者壓縮線 ...… 查看全部問答∨ |
|
是x900的芯片,外圍設備有gprs,RFID,tv輸出,遙控輸入,256M內存,上面跑wince,要播放h264格式的視頻。用C#開發應用好還是用c/c++,大俠們給提個建議… 查看全部問答∨ |
這個通過串口自升級應用程序的問題我弄了好久,還是不能往flash里面寫入數據。求各位大蝦幫忙!assembly.h文件: void write_page (unsigned int adr, unsigned char function); void fill_temp_buffer (unsigned int data,unsigned int adr); u ...… 查看全部問答∨ |
大家好: eeworld論壇里默認的頭像太難看了,我想修改,在博客里修改了也顯示了保存成功但是在論壇里和在博客里顯示的還是原來那個頭像,怎么辦?大家幫忙看下,謝謝了!… 查看全部問答∨ |
原來做的項目用的圖是bmp的,圖多比較大,想換成png格式的. 所以下了個CCePngButtonST控件. 但是調用SetImage()時,卻總是失敗.因為CoCreateInstance()不成功. CoInitializeEx(NULL,COINIT_MULTITHREADED); //initialize com ,就是下面這句不成 ...… 查看全部問答∨ |
9G-CM0 新唐CM0+EWARM入門開發過程簡介 一,準備EWARM + 新唐CM0軟件包 1,在http://www.mcu123.net/bbs/viewthread.php?tid=16064&highlight=CD-EWARM-5501-1908 上 下載 IAR Embedded Workbench for ARM version 5.50 軟件 CD-EWAR ...… 查看全部問答∨ |
|