zoukankan      html  css  js  c++  java
  • STM32例程之USB HID双向数据传输(源码下载)【转】

    程序功能


    • 将STM32的USB枚举为HID设备。
    • STM32使用3个端点,端点0用于枚举用,端点1和2用于数据的发送和接收。
    • 端点长度为64,也就是单次最多可以传输64个字节数据。
    • STM32获取上位机下发的数据并将该数据通过USB原样返回,同时将数据打印输出。
    • 上位机程序通过调用windows的API实现对HID设备的读写控制。

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

    <ignore_js_op>1.jpg 
    图一 上位机程序运行图
    <ignore_js_op>2.jpg 
    图二  STM32串口打印输出
    <ignore_js_op>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 ");
    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("开始写数据到设备... ");
    21.         // 写入数据到设备,注意,第三个参数值必须为REPORT_COUNT+1,否则会返回1784错误
    22.         if (!WriteFile(hDev, reportBuf, REPORT_COUNT+1, &bytes, NULL)){           
    23.                 printf("write data error! %d ",GetLastError());
    24.                 return;    
    25.         }else{
    26.                 printf("成功向设备写出%d个数据... ",bytes);
    27.         }
    28.         printf("开始从设备读取数据... ");
    29.         // 从设备读取数据,注意,第三个参数值必须大于等于REPORT_COUNT+1,否则会返回1784错误
    30.         if(!ReadFile(hDev, recvDataBuf, REPORT_COUNT+1, &bytes, NULL)){ // 读取设备发给主机的数据  
    31.                 printf("read data error! %d ",GetLastError());
    32.                 return;    
    33.         }else{
    34.                 printf("成功向设备读出%d个数据... ",bytes);
    35.         }
    36.         printf("设备返回的数据为: ");
    37.         //显示读取回来的数据
    38.         for(int i=0;i<REPORT_COUNT;i++){
    39.                 printf("0x%02X ",recvDataBuf[i+1]);
    40.         }
    41.         printf(" ");
    42. }  
    复制代码

    源码下载
    STM32程序下载: <ignore_js_op> stm32_usb_hid.zip 
    STM32F105/107版本源码下载: <ignore_js_op> usb_hid.rar 
    HID上位机程序下载(VS2010): <ignore_js_op> STM32_HID_PC_Driver.zip
    HID上位机程序下载(VS2008): <ignore_js_op> PC_HID.zip ) 

    USB开发相关资料下载
    <ignore_js_op> USB2.0技术规范(中文).pdf
    <ignore_js_op> Windows主机端与自定义USB_HID设备通信详解.pdf 
    <ignore_js_op> STM32F10xxx USB-FS-Device firmware library.pdf 
    <ignore_js_op> STM32F10xxx USB开发工具包.pdf 
    <ignore_js_op> STM32_USB-FS-Device_Lib_V3.0.1.zip 
    <ignore_js_op> STM32_usb固件库.pdf 
    <ignore_js_op> 基于STM32的USB程序开发笔记.pdf 
    <ignore_js_op> 深入解析STM32_USB-FS-Device_Lib库.pdf 

    出处:http://www.viewtool.com/bbs/forum.php?mod=viewthread&tid=199&extra=&page=1

  • 相关阅读:
    win10下安装基于caffe的 Faster-Rcnn
    Caffe学习系列
    Caffe 分类问题 Check failed: error == cudaSuccess (2 vs. 0) out of memory
    Windows 10下安装配置Caffe并支持GPU加速(修改版)
    Python 基础语法
    Halcon 彩色图片通道分割处理
    halcon 特征测量
    川崎机器人c#通讯(转)
    Halcon 2D测量
    Halcon 1D测量
  • 原文地址:https://www.cnblogs.com/flyheart33/p/3610866.html
Copyright © 2011-2022 走看看