[技术问答] 时钟问题

[复制链接]
960|16
 楼主| xuanhuanzi 发表于 2020-6-7 16:34 | 显示全部楼层 |阅读模式
看到新唐很多例子都有使能内部RC高频时钟和外部高频时钟。
然后一半都是设置内核时钟PLL,,,,
然后就是使能模块的时钟,
然而我没看到内部RC时钟和外部高频晶振时钟用哪儿了?
 楼主| xuanhuanzi 发表于 2020-6-7 16:35 | 显示全部楼层
有人认真推敲过这个问题吗
antusheng 发表于 2020-6-7 20:12 | 显示全部楼层
推敲的话,你要看这手册一步一步看了
135095edcd9b115af5.png
看这两个原型。
antusheng 发表于 2020-6-7 20:15 | 显示全部楼层
121875edcd9cee8ea4.png
注意这个函数
    CLK_EnableXtalRC(CLK_PWRCON_OSC22M_EN_Msk);
相当于
CLK->PWRCON |=CLK_PWRCON_OSC22M_EN_Msk;
而设置HCLK的函数
CLK_SetCoreClock(PLL_CLOCK);
986815edcda3beb782.png
你看这里面就重复了,所以其实前面没有那两个好像也是可以的,不过又想想,会不会导致时钟没启动呢?不敢多想啊。哈哈

antusheng 发表于 2020-6-7 20:20 | 显示全部楼层
    CLK->CLKSEL0 |= CLK_CLKSEL0_HCLK_S_HIRC;
    CLK->CLKDIV &= (~CLK_CLKDIV_HCLK_N_Msk);
而紧跟着的这两句是选择HIRC作为HCLK,且不分频。
437235edcdb8245e58.png
antusheng 发表于 2020-6-7 20:27 | 显示全部楼层
例子中就是设施50Mhz
紧接着就是判断外部晶振稳定没,稳定后就使能PLL,PLL的时钟源选择外部高频晶振,并将PLL设置到50Mhz
如果外部晶振不能稳定或者不可用,就设置PLL的时钟源为HIRC,内部高频振荡器。
然后就是设置PLL到HCLK
这样HCLK就设置到了50MHz

antusheng 发表于 2020-6-7 20:30 | 显示全部楼层
可以看出来这个设置有点迂回,为了稳妥
先将HCLK设置到HIRC,确保百分百能运行,这个时候HCLK还是22MHz
然后确认外部晶振是否正常运行,如果正常运行设置到外部晶振,然后设置PLL为50MHz,
如果晶振没有正常运行设置PLL时钟源为HIRC,同样设置PLL到50MHz
然后再将HCLK设置到PLL上去。
dongnanxibei 发表于 2020-6-7 20:40 | 显示全部楼层
大佬提问的不错,问题刁钻
jasontu 发表于 2020-6-8 09:45 | 显示全部楼层
上电预设就是内rc。
新唐有个clock config的工具,专门来设定ip及系统的时脉。
huahuagg 发表于 2020-6-8 21:58 | 显示全部楼层
haha,官方库函数被楼主看穿了。
huahuagg 发表于 2020-6-8 22:07 | 显示全部楼层
jasontu 发表于 2020-6-8 09:45
上电预设就是内rc。
新唐有个clock config的工具,专门来设定ip及系统的时脉。 ...

是的,那个工具越来越好用了。
xinxianshi 发表于 2020-6-8 22:16 | 显示全部楼层
非常不错,分析的挺对,学习了不少啊。
wiba 发表于 2020-7-6 16:44 | 显示全部楼层
还真是没有注意过
zljiu 发表于 2020-7-6 16:47 | 显示全部楼层
哦 原来是这样
coshi 发表于 2020-7-6 16:47 | 显示全部楼层
长知识了 呵呵
aoyi 发表于 2020-7-6 16:48 | 显示全部楼层
看的真细致啊
drer 发表于 2020-7-6 16:48 | 显示全部楼层
分析的很到位啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

183

主题

2331

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部