我们公司现在的新产品要求精确的系统时钟,但系统时钟不是多少Mhz的整数,所以需要知道计算方法的精确换算。
在数据手册中,PLL的输出频率计算方式如下
f(VCO clock) = f(PLL clock input) × (PLLN / PLLM)
f(PLL general clock output) = f(VCO clock) / PLLP
比如:
f(PLL clock input) = 16Mhz, PLLN = 234, PLLM = 18, PLLP = 6
因为计算过程中可能会产生小数,计算方法的顺序和小数精确位数的选取都会对最终的计算结果产生影响。
现在有如下的疑问:
1.计算的严格顺序是f(PLL general clock output) = f(PLL clock input) × (PLLN / PLLM) / PLLP 吗?
2.计算过程中的
a.f(VCO clock) = f(PLL clock input) × (PLLN / PLLM) = 16Mhz * (254 / 18) (在这里(254 / 18)是按类型float还是double来保留小数的位数呢?)
b.f(PLL general clock output) = f(VCO clock) / PLLP
在计算过程中出现除法的地方,对小数的位数是如何进行取舍保留的?
因为公司的新产品还有使用STM32F0X的?所以也帮忙确认一下M0的吧。
数据手册中没有详细的计算方法,我直接上clock tree贴图了。
因为比较着急,所以请香水城版主尽快帮忙确认一下。
在此先感谢香水城版主对ST技术支持的贡献了!
|