打印

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

[复制链接]
1668|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
凌不野|  楼主 | 2022-10-9 08:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
将外部晶振修改为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的也卡在这里

使用特权

评论回复
5
HPQhpqhpq| | 2024-11-12 10:14 | 只看该作者
dsyq 发表于 2022-10-9 21:41
用GD32F305试试,稳定性好一些

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝