求教STM32F103 16MH晶振如何配置USB虚拟串口

2019-12-27 18:58发布

前几天看见有大神用USB虚拟3COM,我用8M晶振的开发板可以通过,但是用16MHZ的晶振就不行,
用3.5的库,修改了2个地方,把外部晶振频率8M改16M,

1.  #define HSE_VALUE    ((uint32_t)16000000) /*!< Value of the External oscillator in Hz */
2. /*  PLL configuration: PLLCLK = HSE * 9 = 72 MHz */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
                                        RCC_CFGR_PLLMULL));
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
在8M晶振配置上(以上代码) 增加以下代码
    if(HSE_VALUE==16000000UL)
    {   RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_HSE_Div2);   // 16M2分频即8M,PLL=8M*9=72M
        RCC->CFGR&= ~RCC_CFGR_USBPRE;                //  USB时钟72M/1.5=48M       
    }

这样修改后USB虚拟COM还是失败,但是用USART1串口打印的数据都正确,波特率也一样没错,那就证明PLL=72M是没错了,可是就是不明白USB识别不了
用回8M的开发板只修改#define HSE_VALUE    ((uint32_t)8000000) 就正常,证明枚举过程的程序没有错,我估计是USB时钟配置存在问题,但是看手册该改的地方都改了,
实在想不明白还有什么地方遗漏,特来请教各位大神,我这程序到底是漏什么地方没修改
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。