在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 (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
&n

在使用STM32F10X的RCC配置时,发现RCC->CFGR的第17位和RCC->CFGR2的第0位读取值不一致,导致时钟频率计算错误,进而影响串口波特率。手册指出这两个位是同一位,控制PREDIV1分频。为解决此问题,将预分频因子加2,暂时修复了波特率差异。但这种做法可能不理想,建议深入研究并优化。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



