在单片机中是否应该取消32.768kHz外部晶振

在STM32F103C8T6中,32.768kHz外部晶振(LSE)并非必须,其必要性取决于具体应用需求。以下是详细分析:


1. 是否需要32.768kHz晶振?

需要LSE晶振的场景
  • 实时时钟(RTC)
    若需RTC功能(如日历、精确计时),且要求高精度时间基准,必须使用32.768kHz晶振(LSE)。
    原因:内部低速RC振荡器(LSI,约40kHz)精度较低(±1%),可能导致时间累积误差(每天约1分钟),而LSE的精度可达±20ppm(每天误差约1.7秒)。

  • 低功耗模式
    在低功耗模式(如Stop/Standby模式)下,若需RTC唤醒或保持计时,必须使用LSE。

  • 可省略LSE晶振的场景
  • 无需RTC功能
    若项目不依赖精确计时或日历功能,可完全省略LSE晶振。

  • 使用内部时钟替代
    STM32F103C8T6支持通过以下时钟源驱动RTC:

  • LSI(内部低速RC振荡器,约40kHz):精度低,但能满足基本计时需求。
  • HSE分频(外部高速晶振分频后的信号):例如使用8MHz外部晶振,分频至1MHz后作为RTC时钟源。

  • 2. 时钟源配置选项

    RTC时钟源选择
    时钟源 典型频率 精度 适用场景
    LSE(外部晶振) 32.768kHz ±20ppm 高精度RTC、低功耗模式
    LSI(内部RC) ~40kHz ±1% 基本计时、无需高精度
    HSE分频 可配置(如1MHz) 依赖HSE精度 需外部高速晶振,灵活性较高
    如何配置RTC时钟源
    1. 使用LSE(外部32.768kHz晶振)

      RCC_LSEConfig(RCC_LSE_ON);  // 启用LSE
      while (!RCC_GetFlagStatus(RCC_FLAG_LSERDY)); // 等待LSE就绪
      RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); // 选择LSE作为RTC时钟源
      RCC_RTCCLKCmd(ENABLE); // 启用RTC
      
    2. 使用LSI(内部低速RC振荡器)

      RCC_LSICmd(ENABLE); // 启用LSI
      while (!RCC_GetFlagStatus(RCC_FLAG_LSIRDY)); // 等待LSI就绪
      RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); // 选择LSI作为RTC时钟源
      RCC_RTCCLKCmd(ENABLE); // 启用RTC
      
    3. 使用HSE分频(需外部高速晶振)

      RCC_HSEConfig(RCC_HSE_ON); // 启用HSE(如8MHz)
      while (!RCC_GetFlagStatus(RCC_FLAG_HSERDY)); // 等待HSE就绪
      RCC_RTCCLKConfig(RCC_RTCCLKSource_HSE_Div128); // 分频后作为RTC时钟源(例如8MHz/128=62.5kHz)
      RCC_RTCCLKCmd(ENABLE); // 启用RTC
      

    3. 硬件设计建议

    若使用LSE晶振
  • 电路连接
    将32.768kHz晶振连接至STM32的**OSC32_IN(PC14)OSC32_OUT(PC15)**引脚,并添加匹配电容(通常为6~22pF)。
    OSC32_IN  ----||--- GND (电容C1)
                  ||--- 晶振
    OSC32_OUT ----||--- GND (电容C2)
    
  • 注意事项
  • 晶振尽量靠近MCU,减少走线长度。
  • 避免高频信号干扰(如远离电源线)。
  • 若省略LSE晶振
  • 释放引脚:PC14和PC15可作为普通GPIO使用。
  • 代码配置:确保RTC时钟源选择LSI或HSE分频,并在初始化代码中跳过LSE相关配置。

  • 4. 替代方案示例

    使用LSI驱动RTC
    // 初始化LSI作为RTC时钟源
    void RTC_Init(void) {
        // 启用LSI
        RCC_LSICmd(ENABLE);
        while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);
    
        // 配置RTC时钟源为LSI
        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
        RCC_RTCCLKCmd(ENABLE);
    
        // 等待RTC同步
        RTC_WaitForSynchro();
    }
    

    5. 总结

    场景 是否需要32.768kHz晶振 推荐方案
    需要高精度RTC或低功耗 必须 使用LSE(32.768kHz晶振)
    基本计时,无需高精度 不需要 使用LSI或HSE分频
    无需RTC功能 不需要 省略LSE,释放PC14/PC15

    结论:STM32F103C8T6的32.768kHz晶振是否必需完全取决于具体需求。若无RTC或对时间精度要求不高,可省略该晶振以简化设计。

    作者:鹿屿二向箔

    物联沃分享整理
    物联沃-IOTWORD物联网 » 在单片机中是否应该取消32.768kHz外部晶振

    发表回复