nRF52805 时钟配置功能详细介绍

张开发
2026/4/5 12:31:07 15 分钟阅读

分享文章

nRF52805 时钟配置功能详细介绍
概述nRF52805 是 Nordic 推出的低功耗蓝牙 SoC其时钟系统设计为满足低功耗和高性能的平衡需求。以下是详细的时钟配置功能介绍1. 时钟系统架构nRF52805 包含以下主要时钟源1.1 高频时钟 (HFCLK)时钟源内部 64 MHz RC 振荡器 (HFRC)外部 32 MHz 晶振 (HFXO)用途CPU 运行高速外设如 SPI、UART 等蓝牙射频1.2 低频时钟 (LFCLK)时钟源内部 32.768 kHz RC 振荡器 (LFRC)外部 32.768 kHz 晶振 (LFXO)由 HFCLK 合成的 32.768 kHz 时钟 (SYNTH)用途低功耗模式下的定时器和计数器RTC实时时钟蓝牙协议栈定时2. 时钟配置寄存器2.1 高频时钟配置NRF_CLOCK-TASKS_HFCLKSTART启动 HFCLKNRF_CLOCK-TASKS_HFCLKSTOP停止 HFCLKNRF_CLOCK-EVENTS_HFCLKSTARTEDHFCLK 启动完成事件NRF_CLOCK-HFCLKSRC选择 HFCLK 源内部 RC 或外部晶振2.2 低频时钟配置NRF_CLOCK-TASKS_LFCLKSTART启动 LFCLKNRF_CLOCK-TASKS_LFCLKSTOP停止 LFCLKNRF_CLOCK-EVENTS_LFCLKSTARTEDLFCLK 启动完成事件NRF_CLOCK-LFCLKSRC选择 LFCLK 源RC、Xtal 或 Synth3. 时钟源选择依据3.1 高频时钟源选择时钟源精度功耗启动时间适用场景内部 RC (HFRC)±1%低快~10μs快速启动、低功耗应用外部晶振 (HFXO)±20ppm高慢~1ms高精度要求、蓝牙通信3.2 低频时钟源选择时钟源精度功耗启动时间适用场景内部 RC (LFRC)±500ppm最低快超低功耗应用外部晶振 (LFXO)±20ppm中慢~300ms高精度定时、蓝牙协议栈合成时钟 (SYNTH)与 HFCLK 相同高快HFCLK 已运行时4. 代码配置示例4.1 启动高频时钟使用内部 RC// 启动 HFCLK 并等待启动完成NRF_CLOCK-EVENTS_HFCLKSTARTED0;NRF_CLOCK-TASKS_HFCLKSTART1;while(NRF_CLOCK-EVENTS_HFCLKSTARTED0);4.2 配置低频时钟使用内部 RC// 选择 LFCLK 源为内部 RCNRF_CLOCK-LFCLKSRC(CLOCK_LFCLKSRC_SRC_RCCLOCK_LFCLKSRC_SRC_Pos);// 启动 LFCLKNRF_CLOCK-TASKS_LFCLKSTART1;4.3 进入低功耗模式时的时钟配置voidpower_control(void){// 启用 DC/DC 转换器降低功耗NRF_POWER-DCDCEN1;// 配置电源监测NRF_POWER-INTENSETPOWER_INTENSET_POFWARN_Msk;NRF_POWER-POFCON(POWER_POFCON_THRESHOLD_V27POWER_POFCON_THRESHOLD_Pos);// 停止不需要的 HFCLKNRF_CLOCK-TASKS_HFCLKSTOP1;// 启动 LFCLK使用内部 RC 以降低功耗NRF_CLOCK-LFCLKSRC(CLOCK_LFCLKSRC_SRC_RCCLOCK_LFCLKSRC_SRC_Pos);NRF_CLOCK-TASKS_LFCLKSTART1;// 进入低功耗模式NRF_POWER-TASKS_LOWPWR1;}5. Zephyr RTOS 中的时钟配置在 Zephyr RTOS 中可以通过以下方式配置时钟5.1 设备树配置在boards目录下的设备树文件中配置时钟源clock { compatible nordic,nrf-clock; status okay; /* 配置 LFCLK 源为外部晶振 */ lfclk-source NRF_CLOCK_LFCLK_XTAL; };5.2 Kconfig 配置在prj.conf文件中添加配置# 启用外部 32.768 kHz 晶振 CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTALy # 启用外部 32 MHz 晶振 CONFIG_CLOCK_CONTROL_NRF_HFXOy5.3 低功耗优化建议根据应用场景选择合适的时钟源蓝牙通信时使用外部晶振LFXO保证精度非通信期间使用内部 RCLFRC降低功耗动态时钟管理仅在需要时启动 HFCLK完成任务后及时停止 HFCLK合理配置时钟启动时间预留足够的启动时间特别是外部晶振使用 DC/DC 转换器启用 DC/DC 转换器可显著降低功耗7. 注意事项蓝牙协议要求蓝牙通信需要高精度时钟通常建议使用外部晶振LFXO温度影响内部 RC 振荡器受温度影响较大温度变化时精度会降低启动时间外部晶振启动时间较长需要在代码中预留足够的等待时间功耗平衡高精度时钟通常意味着更高的功耗需要在精度和功耗之间找到平衡点通过合理配置 nRF52805 的时钟系统可以在保证应用性能的同时实现最低功耗延长设备电池寿命。7 退出低功耗模式时的时钟配置当从低功耗模式恢复时需要重新配置时钟系统以确保所有外设正常工作。以下是nRF52805退出低功耗模式时的时钟配置步骤7.1.基本配置步骤7.1.1 启动高频时钟 (HFCLK)// 启动 HFCLK 并等待启动完成NRF_CLOCK-EVENTS_HFCLKSTARTED0;NRF_CLOCK-TASKS_HFCLKSTART1;while(NRF_CLOCK-EVENTS_HFCLKSTARTED0);7.1.2 重新初始化外设时钟// 重新初始化 I2Cdrv_i2c_init();// 重新初始化 ADCdrv_adc_init();// 重新初始化 UART如果使用// uart_init();7.1.3 恢复电源配置// 确保 DC/DC 转换器保持开启NRF_POWER-DCDCEN1;// 清除电源监测标志NRF_POWER-EVENTS_POFWARN0;7.2 完整的退出低功耗模式函数示例voidlowpower_out_extent(void){// 1. 启动 HFCLKNRF_CLOCK-EVENTS_HFCLKSTARTED0;NRF_CLOCK-TASKS_HFCLKSTART1;while(NRF_CLOCK-EVENTS_HFCLKSTARTED0);// 2. 重新初始化外设// 重新初始化 SAADCNRF_SAADC-ENABLESAADC_ENABLE_ENABLE_Enabled;// 重新初始化 NTC 电源app_adc_set_ntc_pwr_en(true);// 重新初始化 I2Cdrv_i2c_init();// 重新初始化 ADCdrv_adc_init();// 3. 恢复 GPIO 配置// 重新配置必要的 GPIO 引脚// 例如配置 UART 引脚// nrf_gpio_cfg_output(_UART_TX_PIN);// nrf_gpio_cfg_input(_UART_RX_PIN, NRF_GPIO_PIN_PULLUP);}7.3 时钟配置的注意事项7.3.1 时钟启动顺序先启动 HFCLK然后重新初始化外设最后恢复 GPIO 配置7.3.2 外设初始化顺序按照依赖关系初始化基础外设I2C、SPI 等传感器通过 I2C/SPI 连接的设备应用层外设UART、ADC 等7.3.3 错误处理添加时钟启动超时检测防止系统卡死检查外设初始化状态确保正确恢复7.4 优化建议7.4.1 快速恢复对于需要快速响应的应用考虑使用内部 RC 振荡器启动 HFCLK预留足够的启动时间特别是外部晶振7.4.2 功耗平衡仅在需要时启动 HFCLK完成任务后及时返回低功耗模式7.4.3 状态保存在进入低功耗模式前保存必要的状态退出低功耗模式后恢复这些状态7.5 实际应用示例// 从低功耗模式唤醒后执行voidwakeup_from_lowpower(void){// 1. 退出低功耗模式lowpower_out_extent();// 2. 执行必要的任务// 例如读取传感器数据read_sensor_data();// 3. 处理数据process_data();// 4. 重新进入低功耗模式lowpower_in_extent();}通过正确配置退出低功耗模式时的时钟系统可以确保设备快速恢复正常运行状态同时保持良好的功耗表现。

更多文章