本帖最后由 大学爱你 于 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%误差问题,有待我后续测试补充吧,目前没问题
|