这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » STM32例程之USB HID双向数据传输(源码下载)

共7条 1/1 1 跳转至

STM32例程之USB HID双向数据传输(源码下载)

菜鸟
2019-06-14 16:07:24     打赏

程序功能



  • 将STM32的USB枚举为HID设备。

  • STM32使用3个端点,端点0用于枚举用,端点1和2用于数据的发送和接收。

  • 端点长度为64,也就是单次最多可以传输64个字节数据。

  • STM32获取上位机下发的数据并将该数据通过USB原样返回,同时将数据打印输出。

  • 上位机程序通过调用windows的API实现对HID设备的读写控制。

USB接口原理图:
USB.jpg 
HID枚举成功:
1.jpg 
程序效果图

1.jpg 
图一 上位机程序运行图
2.jpg 
图二  STM32串口打印输出
3.jpg 
图三 Bus Hound抓取的数据
程序部分代码
STM32的报告描述符:

  1. const uint8_t CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] = 


  2.         0x05, 0x8c, /* USAGE_PAGE (ST Page) */ 

  3.         0x09, 0x01, /* USAGE (Demo Kit) */ 

  4.         0xa1, 0x01, /* COLLECTION (Application) */ 

  5.         

  6.         // The Input report 

  7.         0x09,0x03, // USAGE ID - Vendor defined 

  8.         0x15,0x00, // LOGICAL_MINIMUM (0) 

  9.         0x26,0x00, 0xFF, // LOGICAL_MAXIMUM (255) 

  10.         0x75,0x08, // REPORT_SIZE (8bit) 

  11.         0x95,0x40, // REPORT_COUNT (64Byte) 

  12.         0x81,0x02, // INPUT (Data,Var,Abs) 


  13.         // The Output report 

  14.         0x09,0x04, // USAGE ID - Vendor defined 

  15.         0x15,0x00, // LOGICAL_MINIMUM (0) 

  16.         0x26,0x00,0xFF, // LOGICAL_MAXIMUM (255) 

  17.         0x75,0x08, // REPORT_SIZE (8bit) 

  18.         0x95,0x40, // REPORT_COUNT (64Byte) 

  19.         0x91,0x02, // OUTPUT (Data,Var,Abs) 


  20.         0xc0 /* END_COLLECTION */ 

  21. }; /* CustomHID_ReportDescriptor */

复制代码

上位机测试程序

  1. /**

  2.   * @brief  发送数据后读取数据 

  3.   * @param  None

  4.   * @retval None

  5.   */

  6. void HIDSampleFunc(void)   

  7. {       

  8.         HANDLE       hDev;       

  9.         BYTE         recvDataBuf[1024],reportBuf[1024];;                   

  10.         DWORD        bytes;       

  11.         hDev = OpenMyHIDDevice(0); // 打开设备,不使用重叠(异步)方式 ;      

  12.         if (hDev == INVALID_HANDLE_VALUE){           

  13.                 printf("INVALID_HANDLE_VALUE\n");

  14.                 return;  

  15.         }

  16.         reportBuf[0] = 0; // 输出报告的报告 ID 是 0      

  17.         for(int i=0;i<REPORT_COUNT;i++){

  18.                 reportBuf[i+1]=i+1;//将数据存放在数据缓冲区

  19.         }

  20.         printf("开始写数据到设备...\n");

  21.         // 写入数据到设备,注意,第三个参数值必须为REPORT_COUNT+1,否则会返回1784错误

  22.         if (!WriteFile(hDev, reportBuf, REPORT_COUNT+1, &bytes, NULL)){           

  23.                 printf("write data error! %d\n",GetLastError());

  24.                 return;    

  25.         }else{

  26.                 printf("成功向设备写出%d个数据... \n",bytes);

  27.         }

  28.         printf("开始从设备读取数据...\n");

  29.         // 从设备读取数据,注意,第三个参数值必须大于等于REPORT_COUNT+1,否则会返回1784错误

  30.         if(!ReadFile(hDev, recvDataBuf, REPORT_COUNT+1, &bytes, NULL)){ // 读取设备发给主机的数据  

  31.                 printf("read data error! %d\n",GetLastError());

  32.                 return;    

  33.         }else{

  34.                 printf("成功向设备读出%d个数据... \n",bytes);

  35.         }

  36.         printf("设备返回的数据为:\n");

  37.         //显示读取回来的数据

  38.         for(int i=0;i<REPORT_COUNT;i++){

  39.                 printf("0x%02X ",recvDataBuf[i+1]);

  40.         }

  41.         printf("\n\r");

  42. }  

复制代码

源码下载
STM32程序下载:  stm32_usb_hid.zip  
STM32F105/107版本源码下载:  usb_hid.rar  
HID上位机程序下载(VS2010):  STM32_HID_PC_Driver.zip 
HID上位机程序下载(VS2008):  PC_HID.zip 
USB开发相关资料下载
 USB2.0技术规范(中文).pdf 
 Windows主机端与自定义USB_HID设备通信详解.pdf  
 STM32F10xxx USB-FS-Device firmware library.pdf 
 STM32F10xxx USB开发工具包.pdf  
 STM32_USB-FS-Device_Lib_V3.0.1.zip  
 STM32_usb固件库.pdf 
 基于STM32的USB程序开发笔记.pdf 
 深入解析STM32_USB-FS-Device_Lib库.pdf





关键词: STM32     源码下载    

专家
2019-06-20 23:19:23     打赏
2楼

赞赏楼主的开源精神。


工程师
2019-06-21 17:55:21     打赏
3楼

不错的资料!谢谢分享!

不过现在,好像开始流行 WinUSB驱动了,该模式比用HID具有更高的通信速率!而且也是免驱的哦~



菜鸟
2019-11-28 15:46:07     打赏
4楼

谢谢,一直连不上usb


工程师
2019-11-28 23:18:33     打赏
5楼

STM32 确实很强,但做USB不知道稳定性如何? 毕竟主要取决与软件代码编写得如何了!


管理员
2019-11-29 17:08:39     打赏
6楼

讲解清楚明了,赞


助工
2019-12-08 17:16:59     打赏
7楼

不错的资料和分享


共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]