STM32F4 HID demo + 基于libusb-win32的上位机程序

2019-12-11 18:19发布

本帖最后由 6091820503 于 2014-7-29 13:58 编辑

最近在学习libusb-win32,因此拿STM32F4写了个下位机,然后和上位机一起进行测试
这个是HID的测试程序,上位机和下位机都测试通过
通信测试.png (22.98 KB, 下载次数: 0) 下载附件 通信测试通过 2014-7-29 13:55 上传

libusb-win32的安装调试过程,后面会补充


HID_pc_demo.rar (5.01 MB, 下载次数: 388) 2014-7-29 13:54 上传 点击文件名下载附件
HID_PC_DEMO


HID_demo.rar (46.25 KB, 下载次数: 291) 2014-7-29 13:54 上传 点击文件名下载附件
HID_STM32_DEMO


//STM32主程序,非常的简答

  1. int main(void)
  2. {
  3.   uint8_t  buf[16] = {0,1,2,3};
  4.   RCC_ClocksTypeDef RCC_Clocks;
  5.   
  6.   /* SysTick end of count event each 10ms */
  7.   RCC_GetClocksFreq(&RCC_Clocks);
  8.   SysTick_Config(RCC_Clocks.HCLK_Frequency / 100);


  9.   //ÅäÖÃUSB HID
  10.   USBD_Init(&USB_OTG_dev,
  11.             USB_OTG_FS_CORE_ID,
  12.             &USR_desc,
  13.             &USBD_HID_cb,
  14.             &USR_cb);
  15.                        
  16.    while(1)
  17.    {
  18.                 Delay(1);
  19.                 buf[0]++;
  20.                 USBD_HID_SendReport (&USB_OTG_dev, buf, 4);
  21.    }
  22.   
  23. }
复制代码

//PC端程序 也是非常的简单

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <iostream>
  4. #include "conio.h"
  5. #include "lusb0_usb.h"

  6. #define m_dev_VENDOR    0x0483        /* Vendor ID of the m_dev         */
  7. #define m_dev_PRODUCT   0x5710        /* Product ID of the m_dev        */
  8. #define m_dev_DATA_SIZE 4       /* Number of bytes to get at once */

  9. int main(int argc, char *argv[])
  10. {
  11.         int ret, i;
  12.         char data[m_dev_DATA_SIZE] = {0};
  13.         struct usb_bus *bus;
  14.         struct usb_device * m_dev = NULL;
  15.         struct usb_dev_handle *m_dev_handle;
  16.         char str[64];
  17.         usb_init();
  18.         ret = usb_find_busses();
  19.         if(ret<0)
  20.         {
  21.                 printf("usb_find_busses failed - returned: %i ", ret);
  22.                 return ret;
  23.         }
  24.         ret = usb_find_devices();
  25.         if(ret<0)
  26.         {
  27.                 printf("usb_find_devices failed - returned: %i ", ret);
  28.                 return ret;
  29.         }
  30.   
  31.         for(bus = usb_get_busses(); bus; bus = bus->next)
  32.         {
  33.                 struct usb_device *dev;
  34.                 for(dev = bus->devices; dev; dev = dev->next)
  35.                 {
  36.                         if(dev->descriptor.idVendor == m_dev_VENDOR && dev->descriptor.idProduct == m_dev_PRODUCT)
  37.                         m_dev=dev;
  38.                 }
  39.         }
  40.         if(!m_dev)
  41.         {
  42.                 printf("m_dev not found ");
  43.                 return 1;
  44.         }
  45.   
  46.         m_dev_handle = usb_open(m_dev);
  47.         if(!m_dev_handle)
  48.         {
  49.         printf("Could not open m_dev ");
  50.         return 1;
  51.         }
  52.   
  53.         printf("m_dev opened: %s ", m_dev->filename);
  54.         printf("Device Protocol : %d ",m_dev->descriptor.bDeviceProtocol);
  55.         printf("Report Length : %d ",m_dev->descriptor.bLength);
  56.         printf("Decriptor Type : %d ",m_dev->descriptor.bDescriptorType);
  57.         printf("End Points : %d ",m_dev->config->interface->altsetting->bNumEndpoints);
  58.         printf("Interface Class : %d ",m_dev->config->interface->altsetting->bInterfaceClass);
  59.         printf("Protocol : %d ",m_dev->config->interface->altsetting->bInterfaceProtocol);
  60.         printf("Interface Number: %d ",m_dev->config->interface->altsetting->bInterfaceNumber);
  61.         printf("Device Filename : %s ",m_dev->filename);
  62.       
  63.         usb_get_string_simple(m_dev_handle, m_dev->descriptor.iManufacturer, str, sizeof(str));
  64.         printf("Device Manfucaturer : %s ",str);
  65.         usb_get_string_simple(m_dev_handle,m_dev->descriptor.iProduct,str,sizeof(str));
  66.         printf("Product Name : %s ",str);
  67.         usb_get_string_simple(m_dev_handle,m_dev->descriptor.iSerialNumber,str,sizeof(str));
  68.         printf("Device Serial Number: %s ",str);
  69.         printf("End point addresses : 0x%x ",m_dev->config->interface->altsetting->endpoint->bEndpointAddress);

  70.                 //return 0;
  71.         if(usb_set_configuration(m_dev_handle, 1) < 0)
  72.         {
  73.                 printf("Could not set configuration ");
  74.                 usb_close(m_dev_handle);
  75.                 return 1;
  76.         }

  77.         if(usb_claim_interface(m_dev_handle, 0) < 0) //claim_interface 0指向第一个设备
  78.         {
  79.                 printf("Could not claim interface ");
  80.                 usb_close(m_dev_handle);
  81.                 return 1;
  82.         }
  83.        

  84.         while(1)
  85.         {
  86.                 ret = usb_interrupt_read(m_dev_handle, 0x81, data, m_dev_DATA_SIZE, 0);
  87.                 //ret = usb_bulk_read(m_dev_handle, 0x81, data, m_dev_DATA_SIZE, 0);
  88.                 printf("ret: %i: ", ret);
  89.                 for(i = 0; i< ret; i++)
  90.                 {
  91.                         printf("%hhd ", (unsigned char)(data[i]));
  92.                 }
  93.                 printf(" ");
  94.         }
  95.   
  96.         usb_release_interface(m_dev_handle, 0);
  97.         usb_close(m_dev_handle);
  98.         printf("m_dev closed ");
  99.   
  100.         return 0;
  101. }
复制代码

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
32条回答
beijisnow
1楼-- · 2019-12-13 14:13
mark 以后再学习
jiangkehong
2楼-- · 2019-12-13 19:12
最近要搞上位机烧录器,谢谢分享好资料
huangqi412
3楼-- · 2019-12-14 00:14
LIBUSB,是不是没法用同步端点,
myhonour
4楼-- · 2019-12-14 03:45
 精彩回答 2  元偷偷看……
hanhuliang
5楼-- · 2019-12-14 07:12
收藏备用
Dongshan888
6楼-- · 2019-12-14 11:10
谢谢楼主!

一周热门 更多>