凌不野 发表于 2022-10-9 08:44

GD32F105RB 使用官方USB例程,运行至枚举状态机时进入死循环

将外部晶振修改为8M之后,打印主频96M,一切正常,但是USB的时钟源是未进行修改,应为我主频没变,时钟配置如下void usb_rcu_config(void)
{
        uint32_t system_clock = rcu_clock_freq_get(CK_SYS);
        printf("系统时钟为:%d\n", system_clock);
    if (48000000U == system_clock) {
      usbfs_prescaler = RCU_CKUSB_CKPLL_DIV1;
      timer_prescaler = 3U;
    } else if (72000000U == system_clock) {
      usbfs_prescaler = RCU_CKUSB_CKPLL_DIV1_5;
      timer_prescaler = 5U;
                printf("系统时钟为:%d\n", system_clock);
    } else if (96000000U == system_clock) {
      usbfs_prescaler = RCU_CKUSB_CKPLL_DIV2;
      timer_prescaler = 7U;
    }else {
      /*reserved*/
    }


    rcu_usb_clock_config(usbfs_prescaler);
    rcu_periph_clock_enable(RCU_USBFS);
}
但是运行至枚举状态机时就卡死在死循环不出来,这是为什么呢

进入case HOST_DEV_ENUM:之后:调用usbh_devdesc_get (uhost, 8U)) -----》》》usbh_ctl_handler (uhost);------》》》
if (URB_DONE == usbh_urb_wait (uhost, uhost->control.pipe_in_num, DATA_STAGE_TIMEOUT)) {
      uhost->control.ctl_state = CTL_STATUS_OUT;


    }

就卡死在这个等待

凌不野 发表于 2022-10-9 12:57

dsyq 发表于 2022-10-9 21:41

用GD32F305试试,稳定性好一些

HPQhpqhpq 发表于 2024-11-12 10:13

请问楼主如何解决的,我的是305的也卡在这里

HPQhpqhpq 发表于 2024-11-12 10:14

dsyq 发表于 2022-10-9 21:41
用GD32F305试试,稳定性好一些

请问楼主如何解决的,我的是305的也卡在这里

高级安全大使 发表于 2025-1-31 18:39

如果时钟配置不正确,USB 外设无法稳定运行,可能导致枚举过程中的死循环。

duo点 发表于 2025-3-12 11:12

可能是时钟配置问题

海滨消消 发表于 2025-3-12 16:56

检查DATA_STAGE_TIMEOUT的值是否合适。如果超时时间太短,可能导致等待不成功。

onlycook 发表于 2025-3-12 19:23

系统时钟不稳定导致的?

七毛钱 发表于 2025-3-12 22:00

USBH库版本与GD32F105RB的硬件和固件不兼容。

豌豆爹 发表于 2025-3-13 11:00

USB接口连接是否正常

麻花油条 发表于 2025-3-14 11:00

用USB分析仪来捕获USB通信数据,分析枚举过程中的数据包是否正常。

abotomson 发表于 2025-4-8 11:36

GD32F105RB的USB模块需要特定的时钟配置,通常是48MHz。如果时钟没有正确设置,USB模块可能无法正常工作,导致枚举失败。

bartonalfred 发表于 2025-4-8 13:58

检查USB设备描述符(如设备描述符、配置描述符、接口描述符等)是否正确配置。如果描述符配置错误或不符合USB规范,可能会导致主机无法正确识别设备。

xiaoyaodz 发表于 2025-4-8 15:33

USB中断未正确配置或处理,导致无法响应主机的请求,状态机无法继续。

albertaabbot 发表于 2025-4-9 19:35

检查USB端点配置是否正确。每个端点都有其特定的用途和配置要求,如果端点配置错误或不符合USB规范,可能会导致通信失败。

phoenixwhite 发表于 2025-4-9 22:40

仔细检查描述符内容和中断处理逻辑。

geraldbetty 发表于 2025-4-10 01:42

USB设备正确响应主机的枚举请求,包括设备描述符、配置描述符等。

bestwell 发表于 2025-4-10 15:33

尝试连接不同的USB主机,检查是否为主机兼容性问题。

modesty3jonah 发表于 2025-4-10 16:01

USB中断的优先级设置正确。如果中断优先级设置不当,可能会导致中断处理不及时或丢失中断请求。
页: [1] 2 3 4
查看完整版本: GD32F105RB 使用官方USB例程,运行至枚举状态机时进入死循环