用内部8M晶振时钟电路做系统时钟怎么配置

查看: 694|回复: 16
怎么实现MK22不用外部晶振,用内部32K时钟或4M时钟切换到IR...
本帖最后由 bailao99 于
08:34 编辑
MK22内部有USB 48MHz时钟源,怎样配置才能实现无外部晶振情况下,使用内部USB 48MHz时钟,确保芯片正常运行?
这个要看你的具体需求了,你是想复用内部IRC48M来作为系统的时钟源还是作为USB时钟源?
这个要看你的具体需求了,你是想复用内部IRC48M来作为系统的时钟源还是作为USB时钟源? ...
复用内部IRC48M来作为系统的时钟源
8M外部晶振已跑到120M了,没外部的没有试过!
不焊的时候不是默认用内部的么
不焊的时候不是默认用内部的么
修改了帖子标题
请参考此图片
本帖子中包含更多资源
才可以下载或查看,没有帐号?
已测试不行的代码如下:
/* Configuration for HSRUN mode. Core clock = 80MHz. Clock source = 48 MHz IRC Oscillator */clock_manager_user_config_t MyClockConfigurations[] =
& & .mcgConfig =
& && &.mcg_mode& && && &&&= kMcgModeFEE,& &// Work in FEE mode.
& && &.irclkEnable& && &&&= true,&&// MCGIRCLK enable.
& && &.irclkEnableInStop&&= false, // MCGIRCLK disable in STOP mode.
& && &.ircs& && && && && &= kMcgInternalRefClkSelSlow, // Select IRC32k.
& && &.fcrdiv& && && && & = 0U,& & // FCRDIV is 0.
& && &.frdiv& &= 7U,
& && &.drs& &&&= kMcgDcoRangeSelHigh, // High frequency range
& && &.dmx32& &= kMcgDmx32Default,& & // DCO has a default range of 25%
& && &.oscsel&&= kMcgOscselIrc& && &&&/* Selects 48 MHz IRC Oscillator */
& & .simConfig =
& && &.PllFllSel = kClockPllFllSelIrc48M,& &&&/*!& IRC48MCLK&&*/
& && &.er32kSrc&&= kClockEr32kSrcLpo,& &&&// ERCLK32K selection, use LPO.
& && &.outdiv1& &= 0U,
& && &.outdiv2& &= 1U,
& && &.outdiv4& &= 3U,
& & .oscerConfig =
& && &.Enable& && & = false,&&// OSCERCLK disable.
& && &.EnableInStop = false, // OSCERCLK disable in STOP mode.
&&(void)CLOCK_SYS_Init(MyClockConfigurations,0,NULL,0);
&&(void)CLOCK_SYS_UpdateConfiguration(0,kClockManagerPolicyAgreement);
以上代码有外部晶振可实现CoreClock=80MHz,无晶振系统不运行
本帖最后由 unknown 于
19:54 编辑
给你发一段配置到FEE mode, Core clock = 96MHz 的代码作参考吧
& &/* Update clock divider, make sure core clock,
& && & bus clock, flexbus clock and flash closk
& && & is less than maximum support frequency
& &&&SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIV1(0x00) |
& && && && && && &SIM_CLKDIV1_OUTDIV2(0x03) |
& && && && && && &SIM_CLKDIV1_OUTDIV4(0x03); /* Update system prescalers */
& &&&/* MCG_C2: RANGE = 3 */
& &&&MCG_BWR_C2_RANGE(MCG, 0x03);
& &&&MCG_BWR_DMX32(MCG, 1);
& && && && &Switch to FEE mode
& && && && &
& &&&// FRDIV=6, RANGE=3, divide IRC48M with 1280
& &&&MCG_BWR_C1_FRDIV(MCG, 0x06);
& && && && &
& &&&// Switch to external reference clock
& &&&MCG_BWR_C6_PLLS(MCG, 0);
& &&&MCG_BWR_C7_OSCSEL(MCG, 2);&&// Enable IRC48M OSC
& &&&MCG_BWR_C1_IREFS(MCG, 0);
& &&&while(MCG_BRD_S_IREFST(MCG));
& &&&MCG_BWR_DMX32(MCG, 0);
& &&&MCG_BWR_DRST_DRS(MCG, 3);
给你发一段配置到FEE mode, Core clock = 96MHz 的代码作参考吧
感谢楼上的热心指导!
感谢楼上的热心指导!
期待你能成功的用上这个内部的IRC48M
期待你能成功的用上这个内部的IRC48M
只用IRC48M,不用外部晶振,测试通过。
以下代码基于KSDK V1.1.0,MDK V5.13
注释来源于楼上,根据注释用寄存器操作实现
&&Update clock divider, make sure core clock,
&&bus clock, flexbus clock and flash closk
&&is less than maximum support frequency
&&SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIV1(0x00) |
& && && && && & SIM_CLKDIV1_OUTDIV2(0x01) |
& && && && && & SIM_CLKDIV1_OUTDIV4(0x03); /* Update system prescalers */
&&/* MCG_C2: RANGE = 3 */
&&/*Very high frequency range selected for the crystal oscillator*/
//&&MCG_BWR_C2_RANGE(MCG, 0x03);
&&MCG_C2 |= 0x30;
&&/*DRST_DRS default value 0x00,Reference Range: 32.768 kHz,DCO Range 24MHz*/
//&&MCG_BWR_DMX32(MCG, 1);
&&MCG_C4 |= 0x80;
& & Switch to FEE mode
&&/* FRDIV=6, RANGE=3, divide IRC48M with 1280 */
&&/* if FRDIV=7, RANGE=3, divide IRC48M with 1536,Final Core Freq 80MHz*/
//&&MCG_BWR_C1_FRDIV(MCG, 0x06);
//&&MCG_BWR_C1_FRDIV(MCG, 0x07);
&&MCG_C1 |= 0x38;
&&/* Switch to external reference clock*/
//&&MCG_BWR_C6_PLLS(MCG, 0);/*FLL is selected*/
&&MCG_C6 |= 0x40;
//&&MCG_BWR_C7_OSCSEL(MCG, 2);&&/* Enable IRC48M OSC*/
&&MCG_C7 |= 0x02;
//&&MCG_BWR_C1_IREFS(MCG, 0);/*External reference clock is selected*/
&&MCG_C1 &= ~0x04;
&&/*IREFST=1,Source of FLL reference clock is the internal reference clock*/
//&&while(MCG_BRD_S_IREFST(MCG));
&&while(MCG_S&0x10);&&
//&&MCG_BWR_DMX32(MCG, 0);/*Reference Range: 31.25–39.0625 kHz*/
&&MCG_C4 &= ~0x80;
//&&MCG_BWR_DRST_DRS(MCG, 3);/*DRST_DRS=0x03,DCO Range 96MHz*/
&&MCG_C4 |= 0x60;
有一个特殊之处是:将上面的代码替换system_MK22F51212.c中以下代码
原因是:MK22默认使用外部晶振,检测不到外部晶振,代码将在以下代码的第一个while死循环
&&MCG-&SC = SYSTEM_MCG_SC_VALUE;& && & /* Set SC (fast clock internal reference divider) */
&&MCG-&C2 = (MCG-&C2 & (uint8_t)(~(MCG_C2_FCFTRIM_MASK))) | (SYSTEM_MCG_C2_VALUE & (uint8_t)(~(MCG_C2_LP_MASK))); /* Set C2 (freq. range, ext. and int. reference selection etc. low power bit is set later) */
&&OSC-&CR = SYSTEM_OSC_CR_VALUE;& && & /* Set OSC_CR (OSCERCLK enable, oscillator capacitor load) */
&&MCG-&C7 = SYSTEM_MCG_C7_VALUE;& && & /* Set C7 (OSC Clock Select) */
&&#if (MCG_MODE == MCG_MODE_PEE)
&&MCG-&C1 = (SYSTEM_MCG_C1_VALUE) | MCG_C1_CLKS(0x02); /* Set C1 (clock source selection, FLL ext. reference divider, int. reference enable etc.) - PBE mode*/
&&MCG-&C1 = SYSTEM_MCG_C1_VALUE;& && & /* Set C1 (clock source selection, FLL ext. reference divider, int. reference enable etc.) */
&&if ((((SYSTEM_MCG_C2_VALUE) & MCG_C2_EREFS_MASK) != 0x00U) && (((SYSTEM_MCG_C7_VALUE) & MCG_C7_OSCSEL_MASK) == 0x00U)) {
& & while((MCG-&S & MCG_S_OSCINIT0_MASK) == 0x00U) { /* Check that the oscillator is running */
&&/* Check that the source of the FLL reference clock is the requested one. */
&&if (((SYSTEM_MCG_C1_VALUE) & MCG_C1_IREFS_MASK) != 0x00U) {
& & while((MCG-&S & MCG_S_IREFST_MASK) == 0x00U) {
&&} else {
& & while((MCG-&S & MCG_S_IREFST_MASK) != 0x00U) {
&&MCG-&C4 = ((SYSTEM_MCG_C4_VALUE)&&& (uint8_t)(~(MCG_C4_FCTRIM_MASK | MCG_C4_SCFTRIM_MASK))) | (MCG-&C4 & (MCG_C4_FCTRIM_MASK | MCG_C4_SCFTRIM_MASK)); /* Set C4 (FLL trim values not changed) */
只用IRC48M,不用外部晶振,测试通过。
以下代码基于KSDK V1.1.0,MDK V5.13
谢谢分享,SDK里貌似是可以通过定义 CLOCK_SETUP来选择是默认FEI模式还是切换到PEE模式
谢谢分享,SDK里貌似是可以通过定义 CLOCK_SETUP来选择是默认FEI模式还是切换到PEE模式 ...
如果有外部晶振,可以切换到FEE,但是system_MK22F51212.h中所有CLOCK_SETUP值,都如下:
#define SYSTEM_MCG_C7_VALUE& && && & 0x00U
上述定义表明:默认外部晶振存在
因此system_MK22F51212.c也是检测外部外部晶振,指令如下:
if ((((SYSTEM_MCG_C2_VALUE) & MCG_C2_EREFS_MASK) != 0x00U) && (((SYSTEM_MCG_C7_VALUE) & MCG_C7_OSCSEL_MASK) == 0x00U))
& &while((MCG-&S & MCG_S_OSCINIT0_MASK) == 0x00U)
&&{ /* Check that the oscillator is running */
以上表明只定义 CLOCK_SETUP,无法实现无晶振运行,未做验证,以后有时间再做
考虑到#define SYSTEM_MCG_C7_VALUE& && && & 0x00U,也许可认为这是KSDK的一个Bug
如果有外部晶振,可以切换到FEE,但是system_MK22F51212.h中所有CLOCK_SETUP值,都如下:
#define SYSTEM ...
哈哈,有可能,我一般不用SDK提供的这些clock 初始化,都是自己写
哈哈,有可能,我一般不用SDK提供的这些clock 初始化,都是自己写
我一般能用SDK尽量用SDK。自己写效率高,只是要花时间调试和维护,文档编写也很耗时间。SDK厂商维护,省事。
非常感谢你关于Kinetis的技术问题。如果你没有其他问题,我们将此帖默认为已解决.
阿莫电子论坛, 原"中国电子开发网"用内部8M晶振做系统时钟怎么配置_百度知道
用内部8M晶振做系统时钟怎么配置
我有更好的答案
内部8M的不是晶振是阻容振荡器!
其特点是不精确,震荡频率会随着温度的变化而变化!
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。(求助)MKE06Z128时钟问题 - ARM Cortex-M系列产品 - 恩智浦技术社区
后使用快捷导航没有帐号?
查看: 2481|回复: 11
(求助)MKE06Z128时钟问题
TA的每日心情慵懒 11:25签到天数: 1 天[LV.1]初来乍到主题帖子积分
本帖最后由 webber-318116 于
14:37 编辑
最近第一次使用MKE06的芯片以及CW10.6的编译环境。一开始使用PE配置了外设以后,连接PCB板子马上可以工作,就没有太注意它的时钟问题。后来在调试CAN通讯的时候,发现一个现象。我的CAN通讯只有在Debug时候才能够正常发送和接收,当脱机后上电,CAN通讯就over了。检查后发现是时钟不对,随即去查询时钟的问题。发现晶振上没有量测到波形,但是查询PE的配置,使用的是内部时钟,ICS模式是FEI。
1.当我把模式调整成FEE或者FBE的时候,debug时就发现停在OSC初始化上,即外部晶振没有起振。但是我发现我几块PCB均是同样的现象,我的电路应该是普通的晶振电路,晶振频率是16M的起振电容是22pF,晶振的两个引脚间有并联一个1M的电阻。
2.我看CAN模块的PE配置中的时钟源有两个:MSCANBusClk和MSCANExtClk。我选择后者的时候,CAN模块在初始化的时候停在时钟的上面,这与晶振的问题时吻合的。现在在我还没解决晶振问题的时候,我将时钟源选择为前者MSCANBusClk。而现象则如上所说,只是在debug的时候正常,一旦脱机运行,CAN通讯就不行。但是我在使用其他模块如ADC等的时候,我只要将时钟源选择成当前的内部时钟的话,工作还是没问题的。所以现在就卡在这里了,不知道论坛里各位大大有没有什么好的建议来解决这个问题,小弟在这里多谢了!!!!
该用户从未签到主题帖子积分
能否截个PE对于时钟配置的图呢?以便大家更容易参与此问题的讨论。
TA的每日心情慵懒 11:25签到天数: 1 天[LV.1]初来乍到主题帖子积分
我的两种时钟配置是这样的:
1.外部晶振时:
1.png (29.76 KB, 下载次数: 0)
16:25 上传
2.png (7.18 KB, 下载次数: 0)
16:26 上传
2.内部时钟时:
3.png (30.84 KB, 下载次数: 0)
16:26 上传
6.png (7.18 KB, 下载次数: 0)
16:26 上传
TA的每日心情慵懒 11:25签到天数: 1 天[LV.1]初来乍到主题帖子积分
刚才发帖的时候就想附图的,一直没搞定
该用户从未签到主题帖子积分
在使用内部时钟情况下,Debug时正常脱机不正常应该是由于内部时钟频率设置不对以及被仿真器trim导致的。
该用户从未签到主题帖子积分
在使用内部时钟情况下,Debug时正常脱机不正常应该是由于内部时钟频率设置不对以及被仿真器trim导 ...
从KE06数据手册MKE06P80M48SF0上来看,内部时钟出厂被trim到了37.5KHz。建议你把PE内部时钟频率也改成此值,否则PE工具计算时会按照你输入的31.25KHz计算CAN的波特率。
关于trim内部时钟建议你参考 :
该用户从未签到主题帖子积分
但是内部RC时钟精度不适合你的CAN网通信,所以建议你还是改成FEE使用外部晶振的时钟源供给系统时钟。
如果此时无法完成时钟初始化,那么建议你检查晶振电路:
首先用示波器测量是否有波形
其次测量晶振引脚是否与芯片XTAL\EXTAL引脚相连
实在不行换个晶振和芯片试一下
很多客户晶振不起振就是因为芯片引脚虚焊导致的。
TA的每日心情慵懒 11:25签到天数: 1 天[LV.1]初来乍到主题帖子积分
但是内部RC时钟精度不适合你的CAN网通信,所以建议你还是改成FEE使用外部晶振的时钟源供给系统时钟。
您好!前面一段时间被调配去其他项目,这个项目的问题就一直用内部晶振不带CAN通讯在跑。这两天开始搞回这个问题,我用了新班子跟新芯片,只焊接了最小电路,配置FEE模式烧录仍然有问题。我后来在网上找了KE06的demo板的程序,选择了其中的使用外部8M晶振并包含CAN通讯功能的工程烧录,结果成功了,晶振的波形也正常。这样应该我的硬件没有问题,但是我使用PE来配置得到的就一直有问题。帖子里也贴过我的配置,还请您帮忙看看,谢谢!!
TA的每日心情慵懒 11:25签到天数: 1 天[LV.1]初来乍到主题帖子积分
但是内部RC时钟精度不适合你的CAN网通信,所以建议你还是改成FEE使用外部晶振的时钟源供给系统时钟。
我还是再贴一下我的配置吧
10-55-57.jpg (322.97 KB, 下载次数: 1)
10:59 上传
TA的每日心情慵懒 11:25签到天数: 1 天[LV.1]初来乍到主题帖子积分
顶一下,继续求助
Tel: 3-8069
版权所有@苏州灵动帧格网络科技有限公司
Powered by推荐这篇日记的豆列
&&&&&&&&&&&& 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
stm32f105更换晶振及时钟配置
下载积分:2000
内容提示:stm32f105更换晶振及时钟配置
文档格式:DOCX|
浏览次数:254|
上传日期: 19:03:40|
文档星级:
全文阅读已结束,如果下载本文需要使用
 2000 积分
下载此文档
该用户还上传了这些文档
stm32f105更换晶振及时钟配置
关注微信公众号

我要回帖

更多关于 时钟频率和晶振频率 的文章

 

随机推荐