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
相关产品推荐
相关产品推荐

