我想设计以下项目。我有设备(比如说鼠标),我连接到STM32的USB主机,另一方面,我把STM32的USB设备连接到PC (主机)。其想法是使用STM32F723,类似于USB缓冲器。我的想法是,当我将设备(鼠标)与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-迪斯科
发布于 2022-07-11 11:16:04
STM32就像主机一样正常工作,我可以通过UART串行监视器看到它。下一步是将HID报告传输到PC,这应该发生在设备模式下。任何如何转移的想法。
下面是连接到主机的设备的结构(STM32)。现在我要把它转到电脑上。
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、按钮的数据不能正确传输,因为鼠标现在不能正常工作。
https://stackoverflow.com/questions/72907808
复制相似问题