Arduino UNO传感器站代码反复执行setup函数问题求助
解决Arduino UNO反复执行setup函数并重启的问题
这种反复触发setup、执行完就重启的情况在涉及SD卡的Arduino项目里非常典型,我帮你梳理几个核心排查方向和解决方案:
1. 优先排查电源供电不足问题
SD卡模块在读写时需要的电流比普通传感器大很多,如果用Arduino UNO的USB口或者板载5V引脚供电,很可能因为负载过载导致主板电压骤降,触发内置的复位保护机制。
- 排查方案:
- 更换为外部电源供电(比如9V电池、5V/2A以上的适配器)给UNO主板供电;
- 尝试给SD卡模块单独供电(注意必须和UNO共地,避免电平冲突)。
2. 检查SD卡模块的接线与接触问题
SD卡模块的接线错误(尤其是CS片选引脚)或者接触不良,会导致程序初始化SD卡时出现异常,进而引发系统复位。
- 排查方案:
- 核对标准接线:VCC接5V、GND接GND、MISO接UNO的12脚、MOSI接11脚、SCK接13脚、CS接你代码中指定的引脚(比如4脚);
- 重新插拔所有接线,确保引脚接触牢固,或者更换一个CS引脚测试。
3. 修复SD卡初始化的错误处理逻辑
如果你的代码里没有对SD卡初始化失败做容错处理,当SD卡损坏、格式不兼容时,程序会直接进入崩溃状态,触发系统重启。
- 排查方案:
在SD卡初始化代码中添加错误判断,让程序在初始化失败时停止运行,便于定位问题:
同时可以尝试:#include <SD.h> const int csPin = 4; void setup() { Serial.begin(9600); while (!Serial); // 等待串口连接 // 添加SD卡初始化错误判断 if (!SD.begin(csPin)) { Serial.println("SD卡初始化失败!请检查卡或接线"); while (1); // 卡住程序,避免重启 } Serial.println("setup done"); } void loop() { // 你的数据采集逻辑 }- 更换一张确认可用的SD卡;
- 将SD卡格式化为FAT32格式(簇大小建议选4096)。
4. 排查看门狗定时器的意外触发
如果代码中不小心启用了看门狗定时器(WDT),而setup或loop中的执行时间超过了看门狗的超时阈值,就会触发自动复位。
- 排查方案:
- 检查代码中是否存在
wdt_enable()相关函数,如果有,要么移除该代码,要么在合适的位置添加wdt_reset()喂狗操作; - 若你没有主动启用看门狗,也可以尝试在setup开头添加
wdt_disable()关闭看门狗测试。
- 检查代码中是否存在
5. 排除硬件故障可能性
如果以上排查都无效,可能是硬件本身的问题:
- 移除SD卡模块,只保留串口输出的基础代码,测试setup执行后是否还重启。如果正常,说明问题出在SD卡模块;
- 更换另一块Arduino UNO主板测试,排查是否为主板主控芯片或复位电路故障。
你可以按照从易到难的顺序逐一排查,电源和接线问题是最常见的诱因,优先处理这两项大概率能解决问题。
内容的提问来源于stack exchange,提问作者Nebula
相关产品推荐
相关产品推荐

