打印
[STM32F1]

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

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

使用特权

评论回复
5
yszong| | 2021-10-9 21:32 | 只看该作者
应该不行,全速USB对时钟的要求记得是0.2%,STM32F103内部RC时钟精度大致能到1%。

使用特权

评论回复
6
jiahy| | 2021-10-9 21:34 | 只看该作者
印象里绝大多数MCU的内部RC时钟精度好的能到1%左右。

使用特权

评论回复
7
lizye| | 2021-10-9 21:35 | 只看该作者

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

使用特权

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

使用特权

评论回复
9
shimx| | 2021-10-9 21:44 | 只看该作者
要注意,暂时可以用不代表长久可以用。如果这么做产品,那么做出来低劣的东西,最后可能害人、害自己。

使用特权

评论回复
10
supernan| | 2021-10-9 21:47 | 只看该作者
估计通不过USB的CERTIFICATION

使用特权

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

使用特权

评论回复
12
liliang9554| | 2021-10-9 21:51 | 只看该作者
有人试过了?感觉不行,CP2012内部会用USB的动态输入调整内部频率。

使用特权

评论回复
13
zhenykun| | 2021-10-9 21:52 | 只看该作者
内部精度应该不够的,除非datasheet专门提到精度足够

使用特权

评论回复
14
zwll| | 2021-10-9 21:55 | 只看该作者
STM32F103C8T6已经测试成功了内部晶振48MHz的USB完全ok

使用特权

评论回复
15
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);

结束

使用特权

评论回复
16
shimx| | 2021-10-9 22:00 | 只看该作者
关于使用内部晶振时候STM32F103最大能运行频率问题;由于8Mhz的HSI必须除以2到PLL倍频器,PLL倍频系数=(x2,3,4...16),PLL倍频系数最大为16,所以使用内部晶振时候最大可以8/2*16=64MHz

使用特权

评论回复
17
jiaxw| | 2021-10-9 22:03 | 只看该作者
但是USB的话只能选择48Mhz了

使用特权

评论回复
18
zhaoxqi| | 2021-10-9 22:05 | 只看该作者
还有HSI有1%误差问题,有待我后续测试补充吧,目前没问题

使用特权

评论回复
19
wangzsa| | 2021-10-9 22:07 | 只看该作者
稳定性如何呢?有出现问题吗?

使用特权

评论回复
20
jiajs|  楼主 | 2021-10-9 22:09 | 只看该作者

嗯,我再好好缕一缕吧,有了好消息及时通知大家

使用特权

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

本版积分规则

940

主题

11975

帖子

6

粉丝