繁体   English   中英

STM32 USB转USB

[英]STM32 USB to USB

我想设计以下项目。 我有设备(比如说鼠标),我连接到 STM32 的 USB 主机,另一方面,我将 STM32 的 USB 设备连接到 PC(主机)。 这个想法是使用 STM32F723 之类的 USB HID BUFFER。 这个想法是当我从 STM32 断开设备(鼠标)时,PC 仍然识别出 HID 已连接到它,这应该通过 STM32 发生。 我设计了第一部分:

#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-DISCO

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

下面是连接到主机(STM32)的设备的结构。 现在我必须将其传输到 PC。

typedef struct _HID_MOUSE_Info
{
  uint8_t              x;
  uint8_t              y;
  uint8_t              buttons[3];
}
HID_MOUSE_Info_TypeDef; 

我正在使用该功能:

USBD_HID_SendReport(&hUsbDeviceFS,Mouse_Info,sizeof(Mouse_Info ));

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM