在单片机中是否应该取消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时钟源
-
使用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
-
使用LSI(内部低速RC振荡器):
RCC_LSICmd(ENABLE); // 启用LSI while (!RCC_GetFlagStatus(RCC_FLAG_LSIRDY)); // 等待LSI就绪 RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); // 选择LSI作为RTC时钟源 RCC_RTCCLKCmd(ENABLE); // 启用RTC
-
使用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或对时间精度要求不高,可省略该晶振以简化设计。