打印
[STM32F1]

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

[复制链接]
2640|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的连接功能,不知道没有外部晶振,只用内部时钟,可不可以

使用特权

评论回复
5
jlyuan| | 2017-9-23 23:42 | 只看该作者

应该不行,全速USB对时钟的要求记得是0.2%,STM32F103内部RC时钟精度大致能到1%。

使用特权

评论回复
6
jiahy| | 2017-9-23 23:44 | 只看该作者

印象里绝大多数MCU的内部RC时钟精度好的能到1%左右。

使用特权

评论回复
7
lizye| | 2017-9-23 23:46 | 只看该作者

应该可以的。
    我的USB转RS-485,用的就内部晶振。((8/2)*12)=48MHz.

使用特权

评论回复
8
jiajs|  楼主 | 2017-9-23 23:49 | 只看该作者
追问一下,可以实现USB进行程序升级吗

使用特权

评论回复
9
shimx| | 2017-9-23 23:50 | 只看该作者

要注意,暂时可以用不代表长久可以用。如果这么做产品,那么做出来低劣的东西,最后可能害人、害自己。

使用特权

评论回复
10
jiaxw| | 2017-9-23 23:51 | 只看该作者
估计通不过USB的CERTIFICATION

使用特权

评论回复
11
jiajs|  楼主 | 2017-9-23 23:53 | 只看该作者
CP2102也是没有外部晶振的,那就是说它肯定用的是内部晶振,难道它的内部晶振的精度很高?!

使用特权

评论回复
12
spark周| | 2017-9-23 23:54 | 只看该作者

有人试过了?感觉不行,CP2012内部会用USB的动态输入调整内部频率。

使用特权

评论回复
13
liliang9554| | 2017-9-23 23:56 | 只看该作者
内部精度应该不够的,除非datasheet专门提到精度足够

使用特权

评论回复
14
jiajs|  楼主 | 2017-9-23 23:58 | 只看该作者
哦,那我就知道怎么回事了,多谢大家,结贴了哈

使用特权

评论回复
15
大学爱你| | 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%误差问题,有待我后续测试补充吧,目前没问题

使用特权

评论回复
16
shang21ic| | 2019-11-8 23:35 | 只看该作者
稳定性如何呢?有出现问题吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

940

主题

11975

帖子

6

粉丝