当前位置: 首页 > article >正文

在单片机中是否应该取消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或对时间精度要求不高,可省略该晶振以简化设计。


http://www.kler.cn/a/559568.html

相关文章:

  • FPGA开发要学些什么?如何快速入门?
  • RK3568开发板/电脑/ubuntu处于同一网段互通
  • UE_C++ —— Gameplay Tags
  • PyTorch torch.logsumexp 详解:数学原理、应用场景与性能优化(中英双语)
  • Docker 镜像操作笔记
  • Python--函数进阶(上)
  • Python 依赖包管理工具:uv
  • AI(14)-prompt
  • scrapy pipelines过滤重复数据
  • FPGA中利用fifo时钟域转换---慢时钟域转快时钟域
  • 三级分类bug解决
  • YOLOv11-ultralytics-8.3.67部分代码阅读笔记-loaders.py
  • nextjs项目搭建——头部导航
  • 如何使用Python快速开发一个带管理系统界面的网站-解析方案
  • 【DeepSeek-R1背后的技术】系列十一:RAG原理介绍和本地部署(DeepSeek+RAGFlow构建个人知识库)
  • 游戏开发 游戏项目介绍
  • 深入解析浏览器渲染全流程:从URL输入到页面渲染的底层原理与性能优化(附实战代码)
  • seacms V9 SQL报错注入
  • Obsidian·Copilot 插件配置(让AI根据Obsidian笔记内容进行对话)
  • 【GPU驱动】OpenGLES图形管线渲染机制