1099520_zh-CN

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

1099520_zh-CN

1099520_zh-CN

KW36 - 32kHz RTC 外部振荡器的微调

简介

FRDM-KW36 包含一个带有 32 kHz 晶振的 RTC 模块。该模块可在超低功耗模式下为 MCU 生成 32 kHz 时钟源。该振荡器包含一组用作 C LOAD的可编程电容器。改变这些电容器的值可以改变振荡器提供的频率。

该可配置电容值范围为 0 pF(电容器组禁用)至 30 pF,步长为 2 pF 。这些值是通过组合已启用的电容器获得的。可用值为 2 pF 、4 pF 、8 pF和 16 pF  这四个电容可以任意组合。建议如果外部电容可用,则禁用这些内部电容(清除 RTC 控制寄存器 SFR 中的 SC2P、SC4P、SCS8 和 SC16 位)。

要调整振荡器提供的频率,首先必须能够测量频率。使用频率计数器是理想选择,因为它比示波器提供更精确的测量。您还需要输出振荡器频率。要输出振荡器频率,以任意蓝牙演示应用程序为例,您应该执行以下操作:

调整频率示例

此示例将利用连接软件堆栈中的心率传感器演示(freertos 版本),并假设开发人员具备从 SDK 到 IDE 导入或打开项目的知识。

  1. 从您的 SDK 打开或克隆心率传感器项目。
  2. 在工作区的 board 文件夹中找到 board.c 和 board.h 文件。 pastedImage_13.png
  3. 在 board.h 上声明一个 void 函数文件如下所示。此功能将用于将 RTC 时钟复用到 PTB3 并能够测量频率。

    /* Function to mux PTB3 to RTC_CLKOUT */
    void BOARD_EnableRtcClkOut (void);‍‍
  4. 开发board.c里面的BOARD_EnableRtcClkOut函数文件如下。

  5. void BOARD_EnableRtcClkOut(void)
    {
    /* Enable PORTB clock gating */
    CLOCK_EnableClock(kCLOCK_PortB);
    /* Mux the RTC_CLKOUT to PTB3 */
    PORT_SetPinMux(PORTB, 3u, kPORT_MuxAlt7);
    /* Select the 32kHz reference for RTC_CLKOUT signal */ 
    SIM->SOPT1 |= SIM_SOPT1_OSC32KOUT(1); 
    }
  6. 在 BOARD_BootClockRUN(board.c 文件)之后,在 hardware_init 函数中调用 BOARD_EnableRtcClkOut 函数。 pastedImage_18.png
  7. 找到clock_config.c工作区板文件夹中的文件。
  8. 在文件顶部添加以下定义。
    #define RTC_OSC_CAP_LOAD_0 0x0U /*!< RTC oscillator, capacitance 0pF */
    #define RTC_OSC_CAP_LOAD_2 0x2000U /*!< RTC oscillator, capacitance 2pF */
    #define RTC_OSC_CAP_LOAD_4 0x1000U /*!< RTC oscillator, capacitance 4pF */
    #define RTC_OSC_CAP_LOAD_6 0x3000U /*!< RTC oscillator, capacitance 6pF */
    #define RTC_OSC_CAP_LOAD_8 0x800U /*!< RTC oscillator, capacitance 8pF */
    #define RTC_OSC_CAP_LOAD_10 0x2800U /*!< RTC oscillator, capacitance 10pF */
    #define RTC_OSC_CAP_LOAD_12 0x1800U /*!< RTC oscillator, capacitance 12pF */
    #define RTC_OSC_CAP_LOAD_14 0x3800U /*!< RTC oscillator, capacitance 14pF */
    #define RTC_OSC_CAP_LOAD_16 0x400U /*!< RTC oscillator, capacitance 16pF */
    #define RTC_OSC_CAP_LOAD_18 0x2400U /*!< RTC oscillator, capacitance 18pF */
    #define RTC_OSC_CAP_LOAD_20 0x1400U /*!< RTC oscillator, capacitance 20pF */
    #define RTC_OSC_CAP_LOAD_22 0x3400U /*!< RTC oscillator, capacitance 22pF */
    #define RTC_OSC_CAP_LOAD_24 0xC00U /*!< RTC oscillator, capacitance 24pF */
    #define RTC_OSC_CAP_LOAD_26 0x2C00U /*!< RTC oscillator, capacitance 26pF */
    #define RTC_OSC_CAP_LOAD_28 0x1C00U /*!< RTC oscillator, capacitance 28pF */
    #define RTC_OSC_CAP_LOAD_30 0x3C00U /*!< RTC oscillator, capacitance 30pF */
  9. 在 BOARD_BootClockRUN 函数中搜索 CLOCK_CONFIG_EnableRtcOsc 调用函数(也在 clock_config.c 中)文件),并通过上述任何定义来编辑参数。
  10. 最后,在“preinclude.h”中禁用低功耗选项和 LED 支持位于项目源文件夹中的文件:
    #define cPWR_UsePowerDownMode 0
    #define gLEDSupported_d 0

此时,您可以在 PTB3 中测量并使用频率计数器进行频率调整。每次对电路板进行编程时,都需要执行 POR 以获得正确的测量结果。下表是从 FRDM-KW36 板 rev B 获得的,可以用作调整频率的参考。请注意,电容不仅由启用的内部电容组成,还包括封装、键合线、键合焊盘和 PCB 走线中的寄生电容。因此,虽然下面给出的参考测量值应该接近实际值,但您也应该使用电路板进行测量,以确保频率根据您的电路板和布局进行调整。


启用电容器 负载 电容定义 频率
- 0pF RTC_OSC_CAP_LOAD_0(银行禁用) 32772.980Hz
SC2P 2pF RTC_OSC_CAP_LOAD_2 32771.330Hz
SC4P 4pF RTC_OSC_CAP_LOAD_4 32770.050Hz
SC2P, SC4P 6pF RTC_OSC_CAP_LOAD_6 32769.122Hz
SC8P 8pF RTC_OSC_CAP_LOAD_8 32768.289Hz
SC2P, SC8P 10 pF RTC_OSC_CAP_LOAD_10 32767.701Hz
SC4P, SC8P 12pF RTC_OSC_CAP_LOAD_12 32767.182Hz
SC2P, SC4P, SC8P 14pF RTC_OSC_CAP_LOAD_14 32766.766Hz
SC16P 16pF RTC_OSC_CAP_LOAD_16 32766.338Hz
SC2P, SC16P 18pF RTC_OSC_CAP_LOAD_18 32766.038Hz
SC4P, SC16P 20pF RTC_OSC_CAP_LOAD_20 32765.762Hz
SC2P, SC4P, SC16P 22pF RTC_OSC_CAP_LOAD_22 32765.532Hz
SC8P, SC16P 24pF RTC_OSC_CAP_LOAD_24 32765.297Hz
SC2P, SC8P, SC16P 26pF RTC_OSC_CAP_LOAD_26 32765.117Hz
SC4P, SC8P, SC16P 28pF RTC_OSC_CAP_LOAD_28 32764.940Hz
SC2P, SC4P, SC8P, SC16P 30 pF RTC_OSC_CAP_LOAD_30 32764.764Hz
BLE软件千瓦KW35 | 36
标记 (1)
无评分
版本历史
最后更新:
‎01-05-2026 11:21 AM
更新人: