You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DS1302 RTC模块连接Arduino Uno后串口输出异常并停止打印求助

问题分析与解决办法

首先一眼就能揪出最核心的问题:你的代码里RTC模块的引脚初始化和实际接线完全不匹配,这就是导致乱码、输出中断的根本原因!

关键错误点

VirtuabotixRTC库的构造函数参数顺序是 virtuabotixRTC(CE引脚, SCLK引脚, I/O引脚),而你实际的接线是:

  • CE(CS)→ 引脚10
  • SCLK → 引脚13
  • I/O → 引脚12

但代码里却写了:

virtuabotixRTC myRTC(7,8,9);

Arduino一直在和错误的引脚通信,自然会输出乱码,甚至因为通信异常导致程序卡住停止输出。

修正后的代码

把引脚初始化改成和实际接线一致,同时建议你先取消注释setDS1302Time这行,给RTC设置一次初始时间(设置完成后可以再注释掉,避免每次上电都重置时间):

#include <virtuabotixRTC.h>
// 按照实际接线的CE(10), SCLK(13), I/O(12)顺序初始化
virtuabotixRTC myRTC(10,13,12);

void setup() {
  Serial.begin(9600);
  // 格式:秒,分,时,日,月,星期,年,设置一次后可以注释掉
  myRTC.setDS1302Time(0,30,15,5,10,4,2024);
}

void loop() {
  myRTC.updateTime();
  // 补零处理让时间格式更规范(比如把5分变成05分)
  Serial.print(myRTC.hours < 10 ? "0" : "");
  Serial.print(myRTC.hours);
  Serial.print(":");
  Serial.print(myRTC.minutes < 10 ? "0" : "");
  Serial.print(myRTC.minutes);
  Serial.print(":");
  Serial.print(myRTC.seconds < 10 ? "0" : "");
  Serial.println(myRTC.seconds);
  // 加延迟避免串口输出过快
  delay(1000);
}

额外注意事项

  • 如果你给RTC模块装了备用电池,设置完初始时间后一定要把setDS1302Time那行注释掉,不然每次上电都会重置时间。
  • 确认模块的备用电池接触良好,这直接影响掉电后时间的保存效果。
  • 可以再检查一次接线,确保每个引脚都插紧,没有虚接情况。

内容的提问来源于stack exchange,提问作者BrainTrance

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 13:17:46