打印
[STM32F4]

STM32Cube_FW_F4_V1.5.0 时钟计算bug

[复制链接]
2348|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wowow|  楼主 | 2015-3-24 15:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wowow 于 2015-4-23 13:08 编辑

stm32f4xx_hal_rcc.c中 HAL_RCC_GetSysClockFreq(),
例如:HSE_VALUE = 24000000, pllm=196,plln=14,pllp=2, 原算法结果sysclockfreq=167,999,930,正确结果是168,000,000
原因在如下行:
pllvco = ((HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> POSITION_VAL(RCC_PLLCFGR_PLLN)));
当HSE_VALUE / pllm结果不是整数时,pllvco结果有误

改成:pllvco = ((uint64_t)HSE_VALUE * plln / pllm);

像这样的bug该向谁报告啊?

2015-04-23:
开源链接:https://git.oschina.net/dingtu/STM32Cube_FW_F4_BugFix
接交点:https://git.oschina.net/dingtu/S ... 34a289be7dfeba36ddb
沙发
amanda_s| | 2015-3-24 23:04 | 只看该作者
单从计算来说,先乘再除是可以避免不能整除带来的计算误差。但问题是,没有人会这么配PLL的参数吧。
24M的外部晶振,想倍频到168M,PLLM=24,PLLN=360,PLLP=2,就可以了。
楼主可以去看一下,参考手册里的时钟系统图的PLL部分。
HSE先除以M,再乘以N得到fvco,再除以P得到PLLCLK。

Capture.PNG (15.48 KB )

Capture.PNG

使用特权

评论回复
板凳
amanda_s| | 2015-3-24 23:10 | 只看该作者
amanda_s 发表于 2015-3-24 23:04
单从计算来说,先乘再除是可以避免不能整除带来的计算误差。但问题是,没有人会这么配PLL的参数吧。
24M的 ...

不好意思,PLLN 是336. :P

使用特权

评论回复
地板
icecut| | 2015-3-24 23:27 | 只看该作者
我也不知道怎么报 bug.开源的东西.遇到 bug 自己搞定就行了

使用特权

评论回复
5
wangzhihai1986| | 2015-3-25 08:29 | 只看该作者
有BUG自己修改,然后发贴,利人利己:lol

使用特权

评论回复
6
SLHSu37| | 2015-3-25 08:36 | 只看该作者
wangzhihai1986 发表于 2015-3-25 08:29
有BUG自己修改,然后发贴,利人利己

靠谱

使用特权

评论回复
7
wowow|  楼主 | 2015-3-25 11:04 | 只看该作者
amanda_s 发表于 2015-3-24 23:04
单从计算来说,先乘再除是可以避免不能整除带来的计算误差。但问题是,没有人会这么配PLL的参数吧。
24M的 ...

晕,没说到一块去。PLL我已经配好了,但库函数有些地方要获取当前时钟频率,比如配置SysTick等,好计算分频系数。这些地方最终要调用HAL_RCC_GetSysClockFreq()。如果这个函数返回的结果不准,算出来的分频系数也是不准的。

使用特权

评论回复
8
amanda_s| | 2015-3-25 13:07 | 只看该作者
明白你的意思啊。
不过我想说的是,为什么不在选择M的时候选一个可以整除的呢?这样就不会有这个问题。
实际使用中,有必须选择一个不能整除的系数的情况吗?如果没有,我觉得这应该不能算一个BUG。
(楼主大人,以上为讨论性发言。:)对clock这块比较感兴趣,但实际经验不多)

使用特权

评论回复
9
wowow|  楼主 | 2015-3-25 14:15 | 只看该作者
amanda_s 发表于 2015-3-25 13:07
明白你的意思啊。
不过我想说的是,为什么不在选择M的时候选一个可以整除的呢?这样就不会有这个问题。
实 ...

我的参数选择方法见:https://bbs.21ic.com/icview-901088-1-1.html
可以看到很多情况下M不能整除的。

使用特权

评论回复
10
wowow|  楼主 | 2015-4-23 13:07 | 只看该作者
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

59

主题

649

帖子

3

粉丝