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 导入或打开项目的知识。
在 board.h 上声明一个 void 函数文件如下所示。此功能将用于将 RTC 时钟复用到 PTB3 并能够测量频率。
/* Function to mux PTB3 to RTC_CLKOUT */
void BOARD_EnableRtcClkOut (void);开发board.c里面的BOARD_EnableRtcClkOut函数文件如下。
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);
}#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 */#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 |