帖子在:ch320v307代码有bug吗,高速给的是全速的描述符? - 沁恒微电子社区 (wch.cn)
目前bulk传输的例子,3 5 是 out,4 6 是in,1是in 和 out。
现在用bus hound可以测到 1 3 的out都没问题。然后再点1 in 或者 4 in就挂住了!
请问这样测试有没问题,为啥会挂住呢?
GIF:
https://www.wch.cn/uploads/file/20230331/1680235437155104.rar
帖子在:ch320v307代码有bug吗,高速给的是全速的描述符? - 沁恒微电子社区 (wch.cn)
目前bulk传输的例子,3 5 是 out,4 6 是in,1是in 和 out。
现在用bus hound可以测到 1 3 的out都没问题。然后再点1 in 或者 4 in就挂住了!
请问这样测试有没问题,为啥会挂住呢?
GIF:
https://www.wch.cn/uploads/file/20230331/1680235437155104.rar
我找到原因了,用的是HSI,并且初始化时:
void USBHS_RCC_Init( void ) { // 选择48m时钟来源,用的是 PHY, bit31 = USBHS SRC RCC_USBCLK48MConfig( RCC_USBCLK48MCLKSource_USBPHY ); // bit27 PLL SRC = PLL参考源为 HSI RCC_USBHSPLLCLKConfig( RCC_HSBHSPLLCLKSource_HSE /* 改为hsi 就不行,为什么? */ ); // bit24 HSDIV, PLL参考源分频,因为参考源是 HSI=8MHz,所以 PLL = 8/2=4MHz RCC_USBHSConfig( RCC_USBPLL_Div2 ); // bit28~29 那么参考源时钟就是 4MHz RCC_USBHSPLLCKREFCLKConfig( RCC_USBHSPLLCKREFCLK_4M ); RCC_USBHSPHYPLLALIVEcmd( ENABLE ); RCC_AHBPeriphClockCmd( RCC_AHBPeriph_USBHS, ENABLE ); }
把 RCC_HSBHSPLLCLKSource_HSE 改成 RCC_HSBHSPLLCLKSource_HSI 就不行,为什么?
我时钟已经是HSI 144MHz,而且都能out,为啥in不行???
没人回复,是否可以确认,HSI不能用于USB通信了?
你好,随着数据长度的增加,对时钟精度的要求越高,正常条件下,64字节的长度用HSI是可以的,修改HSI校准值等操作,可以提高到两三百字节,但是USB建议使用HSE做参考源,更稳定
使用USB高速时,USB时钟只能用HSE。
附CH32V307寄存器手册:https://www.wch.cn/downloads/CH32FV2x_V3xRM_PDF.html