首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STM32 USB到USB

STM32 USB到USB
EN

Stack Overflow用户
提问于 2022-07-08 07:04:08
回答 1查看 219关注 0票数 1

我想设计以下项目。我有设备(比如说鼠标),我连接到STM32的USB主机,另一方面,我把STM32的USB设备连接到PC (主机)。其想法是使用STM32F723,类似于USB缓冲器。我的想法是,当我将设备(鼠标)与STM32断开时,PC仍能识别HID与其连接,这应该通过STM32来实现。我设计了第一部分:

代码语言:javascript
复制
#include "main.h"
#include "usb_device.h"
#include "usb_host.h"


#include "usbh_hid.h"
//#include "usbd_hid.h"  // error occurs: HID already been declared. 
#include "stdio.h"

    int main(void)
    {
      HAL_Init();
      SystemClock_Config();
      MX_GPIO_Init();
      MX_UART7_Init();
      MX_USB_HOST_Init();
      MX_USB_DEVICE_Init();
        HAL_GPIO_WritePin(GPIOH,GPIO_PIN_12,GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOH,GPIO_PIN_15,GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOI,GPIO_PIN_10,GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOG,GPIO_PIN_8,GPIO_PIN_RESET);
      while (1)
      {
        MX_USB_HOST_Process();
    
      }
     
    }
    
        void USBH_HID_EventCallback(USBH_HandleTypeDef *phost)
        {
        if ( USBH_HID_GetDeviceType(phost) == HID_MOUSE)
            {   
                HID_MOUSE_Info_TypeDef *Mouse_Info;
                Mouse_Info = USBH_HID_GetMouseInfo(phost);
                int X_VAL = Mouse_Info -> x;
                int Y_VAL = Mouse_Info -> y;
                if (X_VAL > 127) X_VAL -= 255;
                if (Y_VAL > 127) Y_VAL -= 255;
                
                HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);
                //USBD_HID_SendReport(&hUsbDeviceFS,Mouse_Info,sizeof(Mouse_Info));
                int len = sprintf (TxBuff, "X=%d ,Y=%d, Button1=%d, Button2=%d, Button3=%d\n", X_VAL,Y_VAL, Mouse_Info -> buttons[0],Mouse_Info ->buttons[1], Mouse_Info -> buttons[2]);
                HAL_UART_Transmit(&huart7,(uint8_t*)TxBuff,len,1000)
                
            }

现在,我想设计第二部分,我应该将鼠标的描述符复制到STM32_USB_DEVICE_HID,并将其发送到PC。但我不能这样做,也是当我包括usbd_hid.h错误发生时。知道该怎么做吗?

板为STM32F723E-迪斯科

EN

回答 1

Stack Overflow用户

发布于 2022-07-11 11:16:04

STM32就像主机一样正常工作,我可以通过UART串行监视器看到它。下一步是将HID报告传输到PC,这应该发生在设备模式下。任何如何转移的想法。

下面是连接到主机的设备的结构(STM32)。现在我要把它转到电脑上。

代码语言:javascript
复制
typedef struct _HID_MOUSE_Info
{
  uint8_t              x;
  uint8_t              y;
  uint8_t              buttons[3];
}
HID_MOUSE_Info_TypeDef; 

我正在使用这个功能:

代码语言:javascript
复制
USBD_HID_SendReport(&hUsbDeviceFS,Mouse_Info,sizeof(Mouse_Info ));

PC将STM32识别为HID,但鼠标x、y、按钮的数据不能正确传输,因为鼠标现在不能正常工作。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72907808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档