STM32H750 USB HiD 枚举不成功

STM32H750 USD HID 枚举失败, 发送字节发送不完整,只能发送一半。

基于new bing部分指引作答:
出现STM32H750 USB HID枚举失败或发送字节发送不完整的问题可能由多种原因引起。以下是一些可能的解决方法:

  1. 检查硬件连接:确保USB接口正确连接到STM32H750微控制器,并且电源供应正常。检查线路、焊接和连接是否正确,避免松动或短路。

  2. 确认配置设置:检查你的代码中USB HID的配置设置是否正确。确认使用的端点、传输类型、最大数据包大小等参数与设备的要求相匹配。

  3. 检查时钟设置:USB需要准确的时钟源以满足通信要求。确保时钟配置正确,并检查PLL设置和时钟频率是否符合USB标准要求。

  4. 更新固件库和驱动程序:确保你使用的是最新版本的STM32 Cube库或者HAL驱动程序。如果存在已知的问题或错误修复,通过更新库和驱动程序来解决可能会有帮助。

  5. 调试和日志记录:启用调试功能并添加适当的日志记录,以便更好地了解发生故障的原因。根据日志信息,可以确定发送字节发送不完整的具体情况和位置,从而找到解决方法。

  6. 考虑电源问题:一些USB相关问题可能与电源供应稳定性有关。确保电压稳定,电流足够,并检查电源线路是否有噪声或干扰。

请注意,这里提供的解决方法是一般性建议。具体问题的解决可能需要更详细的分析和调试,根据实际情况进行调整。如果问题仍然存在,请参考STM32H750的官方文档、论坛或与相关技术支持团队联系以获取进一步的帮助。

朋友你好,看一下以下几个解决方案是否可行:

1.确保正确配置USB HID相关的引脚和寄存器。在使用USB HID之前,你需要正确配置相关的引脚和寄存器。确保你已经根据芯片手册或开发板的引导进行了正确的引脚配置,并且已经正确初始化了USB HID相关的寄存器。

2.检查USB HID的端点设置。USB HID使用端点来发送和接收数据。确保你正确设置了输入和输出端点,并在发送数据之前正确初始化了端点缓冲区。

3.检查发送数据的代码。确保你的发送数据代码正确地将要发送的数据写入到发送缓冲区中,并且正确设置了发送的数据长度。如果你发现只有一半数据被发送,可能是由于发送缓冲区的大小不够,或者发送长度设置不正确导致的。

4.考虑使用DMA来发送数据。对于大量数据的发送,使用DMA(直接内存访问)可以提高效率。你可以尝试配置和使用DMA来发送数据,以确保发送的完整性和性能。

5.检查USB中断处理程序。USB HID枚举和数据传输过程中会触发一些USB相关的中断。确保你正确处理这些中断,并在中断处理程序中执行适当的操作,如处理数据的发送和接收。

如果觉得回答对你有帮助,帮忙点个采纳哦,谢谢啦!

只能发送一半,你是多少字节

  • 这篇文章:STM32设置USB HID模式 也许能够解决你的问题,你可以看下
  • 除此之外, 这篇博客: STM32CubeMX学习(一) USB HID 双向通信中的 设置USB HID 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 利用HID descriptor Tool软件生成发送接收64byte的报文描述符数据,添加到usbd_custom_hid_if.c文件的CUSTOM_HID_ReportDesc_FS函数中

    
    /** Usb HID report descriptor. */
    __ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
    {
      /* USER CODE BEGIN 0 */    
        0x05, 0x8c, // USAGE_PAGE (ST Page) /
        0x09, 0x01, // USAGE (Demo Kit) /
        0xa1, 0x01, // COLLECTION (Application) /
        /* 6 */
        // The Input report
        0x09,0x03, // USAGE ID - Vendor defined
        0x15,0x00, // LOGICAL_MINIMUM (0)
        0x26,0x00, 0xFF, // LOGICAL_MAXIMUM (255)
        0x75,0x08, // REPORT_SIZE (8)
        0x95,CUSTOM_HID_EPIN_SIZE, //0x95,0x16, REPORT_COUNT (20)
        0x81,0x02, // INPUT (Data,Var,Abs)
        //19
        // The Output report
        0x09,0x04, // USAGE ID - Vendor defined
        0x15,0x00, // LOGICAL_MINIMUM (0)
        0x26,0x00,0xFF, // LOGICAL_MAXIMUM (255)
        0x75,0x08, // REPORT_SIZE (8)
        0x95,CUSTOM_HID_EPOUT_SIZE, //0x95,0x16, REPORT_COUNT (20)
        0x91,0x02, // OUTPUT (Data,Var,Abs)
        //32
      /* USER CODE END 0 */
      0xC0    /*     END_COLLECTION	             */
    };
    

    usbd_desc.c中修改USB HID参数

    ** @defgroup USBD_DESC_Private_Defines USBD_DESC_Private_Defines
      * @brief Private defines.
      * @{
      */
    
    #define USBD_VID     1155
    #define USBD_LANGID_STRING     1033
    #define USBD_MANUFACTURER_STRING     "STMicroelectronics"
    #define USBD_PID_FS     22352
    #define USBD_PRODUCT_STRING_FS     "STM32 Custom Human interface"
    #define USBD_CONFIGURATION_STRING_FS     "Custom HID Config"
    #define USBD_INTERFACE_STRING_FS     "Custom HID Interface"
    
    
    #define USB_SIZ_BOS_DESC            0x0C
    

    usbd_conf.h中修改发送数据长度和报文长度
    在这里插入图片描述

    usbd_customhid.h:中修改收发数据长度和时间间隔
    在这里插入图片描述
    其中,CUSTOM_HID_HS_BINTERVALCUSTOM_HID_FS_BINTERVAL的值也可以在CubeMX中设置。CUSTOM_HID_FS_BINTERVAL的定义在文件usbd_conf.h中,见前一个图。