查看: 4691|回复: 14

[求助] KL03使用32K低频晶振问题请教?内附详细描述及代码

[复制链接]

该用户从未签到

7

主题

25

帖子

0

注册会员

Rank: 2

积分
110
最后登录
1970-1-1
发表于 2015-12-28 16:28:05 | 显示全部楼层 |阅读模式
本帖最后由 FSL_TICS_ZJJ 于 2015-12-28 16:35 编辑

您好!

问题:1) KL03外接32.768K晶振时,是否需要负载电容Cx,Cy和Rf反馈电阻?如果需要,参数一般是多少?
            我在KL03的使用手册上看到如下:
               25.6 External Crystal / Resonator Connections
The connections for a crystal/resonator frequency reference are shown in the figures
found here.
When using low-frequency, low-power mode, the only external component is the crystal
or ceramic resonator itself. In the other oscillator modes, load capacitors (Cx, Cy) and
feedback resistor (RF) are required. The following table shows all possible connections.
[size=18.6667px]   这里的意思是否说:如果连接32.768K低频晶振,就不需要负载电容和反馈电阻??


问题: 2) 我的项目对时钟的分配如下:
             运行使用内部48MHz来运行,睡眠时使用32.768K作为TPM0时钟源定时唤醒。
             我现在的初始化代码如下,但是发现没有等待32.768K启振稳定的过程,就直接运行代码后续代码了。
            请问如何配置才是正确的??
  1. //------------------------------------------------------------------------------
  2. void BOARD_ClockInit(void)
  3. {
  4.     /* Set allowed power mode, allow all. */
  5.     SMC_HAL_SetProtection(SMC, kAllowPowerModeAll);
  6.       
  7.         DbgPinCpl();
  8.         DbgPinCpl();
  9.       
  10.     /* Setup board clock source. */
  11.     // Setup OSC0 if used.
  12.     // Configure OSC0 pin mux.
  13.     PORT_HAL_SetMuxMode(EXTAL0_PORT, EXTAL0_PIN, EXTAL0_PINMUX);
  14.     PORT_HAL_SetMuxMode(XTAL0_PORT, XTAL0_PIN, XTAL0_PINMUX);
  15.     BOARD_InitOsc0();

  16.         DbgPinCpl();
  17.         DbgPinCpl();

  18.     // Setup RTC external clock if used.
  19.     BOARD_InitRtcOsc();

  20.         DbgPinCpl();
  21.         DbgPinCpl();
  22.     /* Set system clock configuration. */

  23.     CLOCK_SYS_SetConfiguration(&g_defaultClockConfigRun);
  24. }
  25. //------------------------------------------------------------------------------
  26. /* OSC0 configuration. */
  27. #define OSC0_XTAL_FREQ 32768U
  28. #define OSC0_SC2P_ENABLE_CONFIG  false
  29. #define OSC0_SC4P_ENABLE_CONFIG  false
  30. #define OSC0_SC8P_ENABLE_CONFIG  false
  31. #define OSC0_SC16P_ENABLE_CONFIG false
  32. #define MCG_EREFS0 kOscSrcOsc
  33. void BOARD_InitOsc0(void)
  34. {
  35.     // OSC0 configuration.
  36.     osc_user_config_t osc0Config =
  37.     {
  38.         .freq                = OSC0_XTAL_FREQ,
  39.         .erefs               = MCG_EREFS0,
  40.         .enableCapacitor2p   = OSC0_SC2P_ENABLE_CONFIG,
  41.         .enableCapacitor4p   = OSC0_SC4P_ENABLE_CONFIG,
  42.         .enableCapacitor8p   = OSC0_SC8P_ENABLE_CONFIG,
  43.         .enableCapacitor16p  = OSC0_SC16P_ENABLE_CONFIG,
  44.     };

  45.     CLOCK_SYS_OscInit(0U, &osc0Config);
  46. }
  47. //------------------------------------------------------------------------------
  48. /* RTC external clock configuration. */
  49. #define RTC_XTAL_FREQ   0U
  50. #define RTC_SC2P_ENABLE_CONFIG       false
  51. #define RTC_SC4P_ENABLE_CONFIG       false
  52. #define RTC_SC8P_ENABLE_CONFIG       false
  53. #define RTC_SC16P_ENABLE_CONFIG      false
  54. #define RTC_OSC_ENABLE_CONFIG        false
  55. #define RTC_CLK_OUTPUT_ENABLE_CONFIG false
  56. /* Function to initialize RTC external clock base on board configuration. */
  57. void BOARD_InitRtcOsc(void)
  58. {
  59. #if ((OSC0_XTAL_FREQ != 32768U) && (RTC_OSC_ENABLE_CONFIG))
  60. #error Set RTC_OSC_ENABLE_CONFIG will override OSC0 configuration and OSC0 must be 32k.
  61. #endif
  62.     rtc_osc_user_config_t rtcOscConfig =
  63.     {
  64.         .freq                = RTC_XTAL_FREQ,
  65.         .enableCapacitor2p   = RTC_SC2P_ENABLE_CONFIG,
  66.         .enableCapacitor4p   = RTC_SC4P_ENABLE_CONFIG,
  67.         .enableCapacitor8p   = RTC_SC8P_ENABLE_CONFIG,
  68.         .enableCapacitor16p  = RTC_SC16P_ENABLE_CONFIG,
  69.         .enableOsc           = RTC_OSC_ENABLE_CONFIG,
  70.         .enableClockOutput   = RTC_CLK_OUTPUT_ENABLE_CONFIG,
  71.     };

  72.     CLOCK_SYS_RtcOscInit(0U, &rtcOscConfig);
  73. }


  74. /*******************************************************************************
  75. RTCInit()
  76. *******************************************************************************/
  77. #define RTC                                      ((RTC_Type *)RTC_BASE)
  78. #define RTC_BASE_PTR                             (RTC)

  79. void RTCInit(void)
  80. {
  81.         #if FSL_FEATURE_SIM_OPT_HAS_RTC_CLOCK_OUT_SELECTION
  82.         rtc_datetime_t date =
  83.     {
  84.         .year = 2015U,
  85.         .month = 9U,
  86.         .day = 4U,
  87.         .hour = 12U,
  88.         .minute = 0U,
  89.         .second = 0U,
  90.     };
  91.     /* Enable clock gate to RTC module */
  92.     CLOCK_SYS_EnableRtcClock( 0U);

  93.         if (RCM_HAL_GetSrcStatus(RCM, kRcmPowerOn))                // 判断是否上电复位
  94.         {
  95.                 RTC_HAL_Init(RTC_BASE_PTR);
  96.                 RTC_HAL_SetDatetime(RTC_BASE_PTR, &date);
  97.         }
  98.         RTC_HAL_Enable(RTC_BASE_PTR);
  99.         #endif
  100. }   
复制代码

         




我知道答案 目前已有14人回答
回复

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-12-28 16:35:04 | 显示全部楼层
本帖最后由 FSL_TICS_ZJJ 于 2015-12-28 16:36 编辑

楼主你好!
回答你的两个问题:
1) 晶振电容添加问题
其实关于负载电容以及反馈电阻,具体是取决于你的晶振的。
不过你可以直接参考官方的FRDM-KL03开发板:
http://cache.nxp.com/files/soft_ ... nloads&fileExt=.zip
电容添加的是12pF,反馈电阻是10M
对于低功耗模式,就不需要反馈电阻。
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-12-28 16:36:04 | 显示全部楼层
下次楼主添加代码,请点击<>这个添加,否则看起来眼花。
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-12-28 16:39:56 | 显示全部楼层
关于第二个问题,楼主是想进入哪个低功耗模式?
你如果要使用外部晶振,那么还要在进入到低功耗之前,做一个时钟模式转换,要等待时钟模式转换成功之后,才能进入到低功耗模式中。
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

25

帖子

0

注册会员

Rank: 2

积分
110
最后登录
1970-1-1
 楼主| 发表于 2015-12-28 17:11:02 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-12-28 16:39
关于第二个问题,楼主是想进入哪个低功耗模式?
你如果要使用外部晶振,那么还要在进入到低功耗之前,做一 ...

低功耗模式是进入VLPS
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

25

帖子

0

注册会员

Rank: 2

积分
110
最后登录
1970-1-1
 楼主| 发表于 2015-12-28 17:13:54 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-12-28 16:35
楼主你好!
回答你的两个问题:
1) 晶振电容添加问题

请问你所说的低功耗模式具体如何理解?例如,如我的项目,唤醒时运行在48M下(这时肯定不是低功耗模式吧),低功耗时运行VLPS(这时是低功耗模式,但靠32.768K作为TPM0时钟源来定时唤醒)。像这种情况,需要接吗?
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

25

帖子

0

注册会员

Rank: 2

积分
110
最后登录
1970-1-1
 楼主| 发表于 2015-12-28 17:16:26 | 显示全部楼层
搞不清楚的是调用CLOCK_SYS_OscInit(0U, &osc0Config)此函数,没有等待晶振稳定才出来。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2019-3-22 20:15
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    23

    主题

    341

    帖子

    1

    高级会员

    Rank: 4

    积分
    909
    最后登录
    2019-4-7
    发表于 2015-12-28 17:17:01 | 显示全部楼层
    晶振两端可以不添加电容的
    成功的小小喜悦里,大脑自身可以产生兴奋剂哦!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-7-31 10:09
  • 签到天数: 392 天

    连续签到: 1 天

    [LV.9]以坛为家II

    45

    主题

    1338

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3163
    最后登录
    2024-12-27
    发表于 2015-12-28 17:17:41 | 显示全部楼层
    你可以直接用内部的1Khz的LPO做LPtmr的时钟源,来做定时器定时。这样功耗比较低,也比较稳定。
    今天天气不错!签到!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-7-31 10:09
  • 签到天数: 392 天

    连续签到: 1 天

    [LV.9]以坛为家II

    45

    主题

    1338

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3163
    最后登录
    2024-12-27
    发表于 2015-12-28 17:18:51 | 显示全部楼层
    VLPS主频要小于1M(片子不一样,这个频率可能不一样),你用48M进不了VLPS的
    今天天气不错!签到!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-23 12:24 , Processed in 0.104044 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表