在stm32f10x_rcc.c中
#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
prediv1factor = (RCC->CFGR2 & CFGR2_PREDIV1) + 1;
/* HSE oscillator clock selected as PREDIV1 clock entry */
RCC_Clocks->SYSCLK_Frequency = (HSE_VALUE / prediv1factor) * pllmull;
#else
其中RCC->CFGR的第17位和RCC-CFGR2中的第0位是同一位
但是RCC->CFGR的第17位的值读出来是1, 而RCC->CRGR2中的第0位读出来的值是0
在手册中关于RCC->CFGR的第17位有这样一句话:
位17 PLLXTPRE:PREDIV1分频因子的低位
由软件置1或清0来选择PREDIV1分频因子的最低位。这一位与RCC_CFGR2寄存器的位0是同一位,因此修改RCC_CFGR2寄存器的位0同时会改变这一位。
如果RCC_CFGR2寄存器的位[3:1]为000,则改为控制PREDIV1对输入时钟进行2分频(PLLXPRE=1),或不对输入时钟分频(PLLXPRE=0).
只能在关闭PLL时才能写入此位。
为什么这两个位会不同???
从程序结果来看,串口的波特率也差了2倍,也许就是这个原因,因此,修改程序如下:
#if defined (STM32F10X_LD_VL) || defined (STM32F