打印

【已解决】使用HSI-PLL方式提供系统时钟发现的问题

[复制链接]
1874|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zitral|  楼主 | 2015-1-30 17:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zitral 于 2015-2-4 09:55 编辑

使用HSI-PLL方式提供系统时钟,PLL倍频系数大于16(我用的30),我用这种方式倍到120MHZ(4*30),板子正常运行,测试发现系统时钟确实是这个频率!但是,我跑的操作系统,运行RCC_GetClocksFreq这个函数得到的各频率值是不对的!跟踪发现是在RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_30)的时候(RCC_PLLMul_30是我自己定义的#define RCC_PLLMul_30     ((uint32_t)0x08340000)),如下图,红圈部分的赋值操作很诡异!tmpreg的值是0x08340600正确,调试的时候过这一步,RCC->CFGR的值却是0x20340600,我就纳闷了!RCC_GetClocksFreq函数中要用到RCC->CFGR寄存器的值!

沙发
zitral|  楼主 | 2015-1-30 17:36 | 只看该作者
本帖最后由 zitral 于 2015-1-30 20:23 编辑

写进去是一个值,读出来是另一个值,我也是醉了!现在可以确定写进去的是正确的,至于读出来的值,我就不知道该怎么解释了,下面的图片是keil调试中memory查看的CFGR的值!

我用的单片机是GD32F103RG,在KEIL5下调试,有人遇到过这种情况么?是不是跟寄存器的读写状态有关呢?

使用特权

评论回复
板凳
sunmeat| | 2015-1-31 10:55 | 只看该作者
zitral 发表于 2015-1-30 17:36
写进去是一个值,读出来是另一个值,我也是醉了!现在可以确定写进去的是正确的,至于读出来的值,我就不知 ...

写的是正确的,读的时候,是按STM32的寄存器读的,GD32比STM32多了一个29位,你自己看看GD32的寄存器说明就知道了。

使用特权

评论回复
地板
sunmeat| | 2015-1-31 10:55 | 只看该作者
https://bbs.21ic.com/icview-874575-1-1.html
你看看这个帖子,就明白了

使用特权

评论回复
5
zitral|  楼主 | 2015-1-31 11:29 | 只看该作者
sunmeat 发表于 2015-1-31 10:55
https://bbs.21ic.com/icview-874575-1-1.html
你看看这个帖子,就明白了

嗯,我看过了,GD的特殊定义是在27位,为PLL倍频系数的第五位(高位),我配置的时候也是按这一位配置的,芯片正常工作,系统时钟就是我设置值,但是读到的RCC->CFGR值却是29位为1,理解不能的是这个!

使用特权

评论回复
6
gg270| | 2015-2-3 17:33 | 只看该作者
zitral 发表于 2015-1-30 17:36
写进去是一个值,读出来是另一个值,我也是醉了!现在可以确定写进去的是正确的,至于读出来的值,我就不知 ...

请问你的样片是什么时候拿到的?能否提供芯片上的全部标签?

使用特权

评论回复
7
zitral|  楼主 | 2015-2-3 18:49 | 只看该作者
gg270 发表于 2015-2-3 17:33
请问你的样片是什么时候拿到的?能否提供芯片上的全部标签?

应该是去年比较早些的时候,GD32F103RGT6,AEP1991,AM1346

使用特权

评论回复
8
gg270| | 2015-2-3 21:26 | 只看该作者
zitral 发表于 2015-2-3 18:49
应该是去年比较早些的时候,GD32F103RGT6,AEP1991,AM1346

样片比较老,关于倍频增加的那个位,早期确实存在写27位读29位的情况,你这边可以重新申请样片。申请样片发送邮件给lg@realsense.com.cn即可

使用特权

评论回复
9
zitral|  楼主 | 2015-2-4 09:53 | 只看该作者
gg270 发表于 2015-2-3 21:26
样片比较老,关于倍频增加的那个位,早期确实存在写27位读29位的情况,你这边可以重新申请样片。申请样片 ...

好的,多谢!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

66

帖子

0

粉丝