stm32 之 标准库中时钟的问题

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

在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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值