问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

STM32F103C8T6单片机中32.768kHz外部晶振的必要性分析

创作时间:
作者:
@小白创作中心

STM32F103C8T6单片机中32.768kHz外部晶振的必要性分析

引用
CSDN
1.
https://blog.csdn.net/m0_52011717/article/details/145739786

在STM32F103C8T6单片机开发中,32.768kHz外部晶振(LSE)是否必需是一个常见问题。本文将从多个角度分析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
  1. 使用LSI(内部低速RC振荡器)
RCC_LSICmd(ENABLE); // 启用LSI
while (!RCC_GetFlagStatus(RCC_FLAG_LSIRDY)); // 等待LSI就绪
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); // 选择LSI作为RTC时钟源
RCC_RTCCLKCmd(ENABLE); // 启用RTC
  1. 使用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或对时间精度要求不高,可省略该晶振以简化设计。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号