[STM32F1] STM32F103使用内部晶振可以实现USB连接吗

[复制链接]
2957|15
 楼主| jiajs 发表于 2017-9-23 23:34 | 显示全部楼层 |阅读模式
STM32F103使用内部晶振可以实现USB连接吗
heweibig 发表于 2017-9-23 23:38 | 显示全部楼层

什么意思?不是很明白你说的什么
 楼主| jiajs 发表于 2017-9-23 23:39 | 显示全部楼层
做个很简单的东西,需要用的管脚比较多,把接晶振的管脚都用了
 楼主| jiajs 发表于 2017-9-23 23:40 | 显示全部楼层

现在想在产品上增加USB的连接功能,不知道没有外部晶振,只用内部时钟,可不可以
jlyuan 发表于 2017-9-23 23:42 | 显示全部楼层

应该不行,全速USB对时钟的要求记得是0.2%,STM32F103内部RC时钟精度大致能到1%。
jiahy 发表于 2017-9-23 23:44 | 显示全部楼层

印象里绝大多数MCU的内部RC时钟精度好的能到1%左右。
lizye 发表于 2017-9-23 23:46 | 显示全部楼层

应该可以的。
    我的USB转RS-485,用的就内部晶振。((8/2)*12)=48MHz.
 楼主| jiajs 发表于 2017-9-23 23:49 | 显示全部楼层
追问一下,可以实现USB进行程序升级吗
shimx 发表于 2017-9-23 23:50 | 显示全部楼层

要注意,暂时可以用不代表长久可以用。如果这么做产品,那么做出来低劣的东西,最后可能害人、害自己。
jiaxw 发表于 2017-9-23 23:51 | 显示全部楼层
估计通不过USB的CERTIFICATION
 楼主| jiajs 发表于 2017-9-23 23:53 | 显示全部楼层
CP2102也是没有外部晶振的,那就是说它肯定用的是内部晶振,难道它的内部晶振的精度很高?!
spark周 发表于 2017-9-23 23:54 | 显示全部楼层

有人试过了?感觉不行,CP2012内部会用USB的动态输入调整内部频率。
liliang9554 发表于 2017-9-23 23:56 | 显示全部楼层
内部精度应该不够的,除非datasheet专门提到精度足够
 楼主| jiajs 发表于 2017-9-23 23:58 | 显示全部楼层
哦,那我就知道怎么回事了,多谢大家,结贴了哈
大学爱你 发表于 2018-10-18 20:59 | 显示全部楼层
本帖最后由 大学爱你 于 2018-10-18 02:12 编辑

2018-10-18
STM32F103C8T6已经测试成功了内部晶振48MHz的USB完全ok
3.5的库函数版本在修改system_stm32f10x.c中的SystemInit()改为如下代码(寄存器版本也差不多)

void SystemInit (void)
{

                /* Set HSION bit */
                RCC->CR |= (uint32_t)0x00000001;
               
                // select HSI as PLL source
                RCC->CFGR |= (uint32_t)RCC_CFGR_PLLSRC_HSI_Div2;        
               
                //PLLCLK=8/2*12=48M
                RCC->CFGR |= (uint32_t)RCC_CFGR_PLLMULL12;
               
                 /* HCLK = SYSCLK/1      */
            RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
                 
                /* Enable PLL */
            RCC->CR |= RCC_CR_PLLON;
               
            /* Wait till PLL is ready */
            while((RCC->CR & RCC_CR_PLLRDY) == 0)
            {
            }
            /* Select PLL as system clock source */
            RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
            RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;   
                        
                /* Wait till PLL is used as system clock source */
            while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
            {
            }

         SetSysClock();
}
然后在USB时钟配置中设置不分频,即Div1
        /* Select USBCLK source */
        RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_Div1);

结束

关于使用内部晶振时候STM32F103最大能运行频率问题;由于8Mhz的HSI必须除以2到PLL倍频器,PLL倍频系数=(x2,3,4...16),PLL倍频系数最大为16,所以使用内部晶振时候最大可以8/2*16=64MHz
但是USB的话只能选择48Mhz了
还有HSI有1%误差问题,有待我后续测试补充吧,目前没问题

shang21ic 发表于 2019-11-8 23:35 | 显示全部楼层
稳定性如何呢?有出现问题吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

940

主题

11975

帖子

6

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