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

[复制链接]
2423|26
 楼主| jiajs 发表于 2021-10-9 21:23 | 显示全部楼层 |阅读模式
STM32F103使用内部晶振可以实现USB连接吗
heweibig 发表于 2021-10-9 21:25 | 显示全部楼层
什么意思?不是很明白你说的什么
 楼主| jiajs 发表于 2021-10-9 21:28 | 显示全部楼层
做个很简单的东西,需要用的管脚比较多,把接晶振的管脚都用了
 楼主| jiajs 发表于 2021-10-9 21:30 | 显示全部楼层
现在想在产品上增加USB的连接功能,不知道没有外部晶振,只用内部时钟,可不可以
yszong 发表于 2021-10-9 21:32 | 显示全部楼层
应该不行,全速USB对时钟的要求记得是0.2%,STM32F103内部RC时钟精度大致能到1%。
jiahy 发表于 2021-10-9 21:34 | 显示全部楼层
印象里绝大多数MCU的内部RC时钟精度好的能到1%左右。
lizye 发表于 2021-10-9 21:35 | 显示全部楼层

应该可以的。
    我的USB转RS-485,用的就内部晶振。((8/2)*12)=48MHz.
 楼主| jiajs 发表于 2021-10-9 21:38 | 显示全部楼层
追问一下,可以实现USB进行程序升级吗
shimx 发表于 2021-10-9 21:44 | 显示全部楼层
要注意,暂时可以用不代表长久可以用。如果这么做产品,那么做出来低劣的东西,最后可能害人、害自己。
supernan 发表于 2021-10-9 21:47 | 显示全部楼层
估计通不过USB的CERTIFICATION
 楼主| jiajs 发表于 2021-10-9 21:48 | 显示全部楼层
CP2102也是没有外部晶振的,那就是说它肯定用的是内部晶振,难道它的内部晶振的精度很高?!
liliang9554 发表于 2021-10-9 21:51 | 显示全部楼层
有人试过了?感觉不行,CP2012内部会用USB的动态输入调整内部频率。
zhenykun 发表于 2021-10-9 21:52 | 显示全部楼层
内部精度应该不够的,除非datasheet专门提到精度足够
zwll 发表于 2021-10-9 21:55 | 显示全部楼层
STM32F103C8T6已经测试成功了内部晶振48MHz的USB完全ok
llljh 发表于 2021-10-9 21:58 | 显示全部楼层
修改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);

结束
shimx 发表于 2021-10-9 22:00 | 显示全部楼层
关于使用内部晶振时候STM32F103最大能运行频率问题;由于8Mhz的HSI必须除以2到PLL倍频器,PLL倍频系数=(x2,3,4...16),PLL倍频系数最大为16,所以使用内部晶振时候最大可以8/2*16=64MHz
jiaxw 发表于 2021-10-9 22:03 | 显示全部楼层
但是USB的话只能选择48Mhz了
zhaoxqi 发表于 2021-10-9 22:05 | 显示全部楼层
还有HSI有1%误差问题,有待我后续测试补充吧,目前没问题
wangzsa 发表于 2021-10-9 22:07 | 显示全部楼层
稳定性如何呢?有出现问题吗?
 楼主| jiajs 发表于 2021-10-9 22:09 | 显示全部楼层

嗯,我再好好缕一缕吧,有了好消息及时通知大家
您需要登录后才可以回帖 登录 | 注册

本版积分规则

940

主题

11975

帖子

6

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