stm32 之 标准库中时钟的问题
来源:互联网 发布:tsc ttp 244 pro 软件 编辑:程序博客网 时间:2024/05/17 08:34
在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)
prediv1factor = (RCC->CFGR2 & CFGR2_PREDIV1) + 2;
/* HSE oscillator clock selected as PREDIV1 clock entry */
RCC_Clocks->SYSCLK_Frequency = (HSE_VALUE / prediv1factor) * pllmull;
#else
虽然这样不太合适,先这样吧。
- stm32 之 标准库中时钟的问题
- stm32之时钟的理解
- stm32开发之标准库的介绍
- STM32使用C标准库time.h里面的时间时钟函数
- STM32滴答时钟源的问题
- STM32之系统时钟的建立
- 关于STM32的学习 之时钟
- 【转】 STM32中定时器的时钟源
- STM32中定时器的时钟源
- STM32中定时器的时钟源
- STM32 SPI时钟问题
- STM32之系统时钟
- STM32之系统时钟
- STM32之时钟
- stm32学习之时钟
- STM32时钟之2
- STM32时钟之3
- (1)stm32开发之标准库的介绍
- UML设计9种设计图
- 安卓高效代码编写
- 我的JavaforAndroid学习之路-水仙花数
- 【java】正则表达式集锦
- 我们应当怎样做需求确认:快速原型法(22)
- stm32 之 标准库中时钟的问题
- 用VC打造Ftp暴力破解器
- Android---浮动搜索框(SearchManager)
- 技术人员的未来:做技术还是做管理?
- 老问题新解法——经典的大兔子生小兔子问题(斐波那契数列)
- postgres字符串常用函数整理
- accept非阻塞方式
- MySQL学习总结
- 裘宗燕:C/C++ 语言中的表达式求值