GD32F105 USB 问题

[复制链接]
6685|15
Transformers 发表于 2025-10-18 13:01 | 显示全部楼层 |阅读模式
HID, , USB, , , gd32f105
我用GD32F105RCT6 跑官方的HID例程的时候,是能正常工作的。
但是,一旦将端点时间间隔从0x20改成0x1的时候,端点1的OUT中断就无法触发了。改成0xa就看运气有时候能工作,有时候不能工作
感觉像是初始化的时候出现了问题。
用例程中的 HID IAP例程,默认就是0x1的,直接就无法工作。端点1的IN完全没问题。
我唯一改的地方就是,官方的板子用的25Mhz的晶振,我的板子用的是8Mhz的晶振,我把时钟改了一下。枚举都是正常的。
又试了一下GD32F303 GD32F103 GD32F205 GD32F407,都是没有这个问题的。
有没有大哥知道是什么问题吗

jcky001 发表于 2025-10-20 17:02 | 显示全部楼层
时钟配置与USB时序不匹配?
classroom 发表于 2025-10-20 18:02 | 显示全部楼层
GD32F105的USB外设对时间间隔参数有隐含限制,或参数修改未正确生效。
cr315 发表于 2025-10-20 19:03 | 显示全部楼层
可能是中断优先级或NVIC配置冲突
duo点 发表于 2025-10-20 20:04 | 显示全部楼层
可能是晶振频率差异导致时序偏差
elephant00 发表于 2025-10-20 17:05 | 显示全部楼层
重新配置时钟树
flycamelaaa 发表于 2025-10-20 21:05 | 显示全部楼层
查阅数据手册调整端点时间间隔参数
jcky001 发表于 2025-10-20 22:06 | 显示全部楼层
时间间隔参数可能触发硬件响应阈值问题。GD32F105的USB外设可能对过短的时间间隔无法及时处理OUT事务,导致中断丢失。
 楼主| Transformers 发表于 2025-10-22 13:55 | 显示全部楼层
jcky001 发表于 2025-10-20 17:02
时钟配置与USB时序不匹配?

    /* CK_PLL = CK_HXTAL * 12 = 8MHz * 12 = 96MHz */
    RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4);
    RCU_CFG0 |= (RCU_PLLSRC_HXTAL | RCU_PLL_MUL12);
   
    /* Simple configuration: use HXTAL directly for PLL */
    RCU_CFG1 &= ~RCU_CFG1_PREDV0SEL;
用的8Mhz的晶振,这样配置usb就可以正常枚举了,端点1的IN是正常的。就是OUT不正常
 楼主| Transformers 发表于 2025-10-22 13:58 | 显示全部楼层
classroom 发表于 2025-10-20 18:02
GD32F105的USB外设对时间间隔参数有隐含限制,或参数修改未正确生效。

我翻了手册,没有找到这方面的资料
 楼主| Transformers 发表于 2025-10-22 14:01 | 显示全部楼层
jcky001 发表于 2025-10-20 22:06
时间间隔参数可能触发硬件响应阈值问题。GD32F105的USB外设可能对过短的时间间隔无法及时处理OUT事务,导致 ...

我也怀疑是这样,但是官方的例程有个hid iap的。我改了时钟之后,直接就不工作了。我打算找个25mhz的晶振试试
 楼主| Transformers 发表于 2025-10-22 14:12 | 显示全部楼层
cr315 发表于 2025-10-20 19:03
可能是中断优先级或NVIC配置冲突

主要的问题是改了时间间隔后就不触发OUT1的中断,优先级默认的应该没问题
 楼主| Transformers 发表于 2025-10-23 09:57 | 显示全部楼层
我把晶振换成25Mhz的,使用的官方的例程,完全没改动。
烧入的是官方的HID IAP程序,通过HID调试助手向端点1发送数据,然后直接就卡死了。
端点1的OUT中断还是没触发
sunjd 发表于 2025-10-24 10:35 | 显示全部楼层

GD32F105 USB 问题

GD32F105 USB端点OUT中断问题,核心原因很可能是将外部晶振从25MHz改为8MHz后,USB时钟没有精确配置到48MHz,这与GD32F105系列特殊的时钟树结构有关。
你提到的GD32F303/103/205/407等其他型号正常,而唯独GD32F105出问题,这指向了GD32F105系列在时钟树,特别是USB时钟生成路径上的特殊性。
USB模块对时钟精度要求很高,必须稳定在48MHz。当时钟配置不准时,会导致USB通信时序错乱。你提到的端点时间间隔(bInterval)改小后问题加剧或变得不稳定,正是因为更短的时间间隔对时钟精度要求更高。
GD32F105(属于GD32F10X_CL系列)的时钟树,特别是PLL部分,与其他型号相比更为复杂。它需要配置PLL1和一系列分频器(如PREDV0、PREDV1)来协同工作,才能为USB提供准确的时钟。如果只修改了`HXTAL_VALUE`(外部晶振值),而没有相应调整PLL1的倍频和分频参数,USB时钟就无法达到所需的48MHz。
可以按以下步骤检查和修改你的时钟配置代码试试:
1.  确认并修改晶振定义
    在代码中找到定义外部高速晶振(HXTAL)值的地方,确保它被设置为8MHz(8000000)。
      #if !defined HXTAL_VALUE
    #ifdef GD32F10X_CL
    #define HXTAL_VALUE ((uint32_t)8000000) // 确保这里是8000000
    #else
    #define HXTAL_VALUE ((uint32_t)8000000)
    #endif
    #endif
2.  调整PLL配置参数
    这是最关键的一步。你需要修改PLL的倍频和分频参数,确保整个时钟树,特别是通向USB的时钟,最终能产生精确的48MHz。由于官方库通常默认使用25MHz晶振的配置,你需要手动调整。
   对于8MHz晶振,你需要重点关注并修改 system_clock_xxx_hxtal() 这类函数中关于PLL1的配置部分。具体的配置参数(倍频系数、分频值)需要根据你所期望的系统主频来计算。
3.  检查并计算USB时钟路径
    使用GD32F105的参考手册和数据手册中的时钟树图,仔细检查从HXTAL -> PLL1 -> PREDV分频器 -> 主PLL -> USB时钟的整条路径。确保所有倍频和分频参数的组合,最终能让USB时钟准确地锁定在48MHz。
sunjd 发表于 2025-10-24 10:37 | 显示全部楼层

GD32F105 USB 问题

GD32F105 USB端点OUT中断问题,核心原因很可能是将外部晶振从25MHz改为8MHz后,USB时钟没有精确配置到48MHz,这与GD32F105系列特殊的时钟树结构有关。
你提到的GD32F303/103/205/407等其他型号正常,而唯独GD32F105出问题,这指向了GD32F105系列在时钟树,特别是USB时钟生成路径上的特殊性。
USB模块对时钟精度要求很高,必须稳定在48MHz。当时钟配置不准时,会导致USB通信时序错乱。你提到的端点时间间隔(bInterval)改小后问题加剧或变得不稳定,正是因为更短的时间间隔对时钟精度要求更高。
GD32F105(属于GD32F10X_CL系列)的时钟树,特别是PLL部分,与其他型号相比更为复杂。它需要配置PLL1和一系列分频器(如PREDV0、PREDV1)来协同工作,才能为USB提供准确的时钟。如果只修改了`HXTAL_VALUE`(外部晶振值),而没有相应调整PLL1的倍频和分频参数,USB时钟就无法达到所需的48MHz。
可以按以下步骤检查和修改你的时钟配置代码:

1.  确认并修改晶振定义
    在代码中找到定义外部高速晶振(HXTAL)值的地方,确保它被设置为8MHz(8000000)。
  
    #if !defined HXTAL_VALUE
    #ifdef GD32F10X_CL
    #define HXTAL_VALUE ((uint32_t)8000000) // 确保这里是8000000
    #else
    #define HXTAL_VALUE ((uint32_t)8000000)
    #endif
    #endif
2.  调整PLL配置参数
    这是最关键的一步。你需要修改PLL的倍频和分频参数,确保整个时钟树,特别是通向USB的时钟,最终能产生精确的48MHz。由于官方库通常默认使用25MHz晶振的配置,你需要手动调整。
   对于8MHz晶振,你需要重点关注并修改system_clock_xxx_hxtal() 这类函数中关于PLL1的配置部分。具体的配置参数(倍频系数、分频值)需要根据你所期望的系统主频来计算。
3.  检查并计算USB时钟路径
    使用GD32F105的参考手册和数据手册中的时钟树图,仔细检查从HXTAL -> PLL1 -> PREDV分频器 -> 主PLL -> USB时钟的整条路径。确保所有倍频和分频参数的组合,最终能让USB时钟准确地锁定在48MHz。
gejigeji521 发表于 2025-11-9 09:28 | 显示全部楼层
硬件配置、固件驱动、通信稳定性、兼容性
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

103

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部