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

Arduino Nano 33 IoT拔插或复位后无法运行程序问题咨询

故障原因

Arduino Nano 33 IoT 采用SAMD21架构,其USB串口实现逻辑和传统AVR架构的Arduino板存在差异:代码中while (!Serial);语句会无限阻塞程序运行,直到检测到主机端(电脑)主动打开串口端口建立连接,才会继续向下执行。
开发板拔插重插后,如果没有手动打开串口监视器建立串口连接,程序会一直卡在setup的这行阻塞逻辑里,永远不会进入loop函数,表现为开发板无运行响应、无串口输出。按压复位键后如果没有打开串口连接,也会触发同样的阻塞问题。

解决方案
  • 方案1:给串口等待增加超时限制,避免无限阻塞
    保留等待串口连接的逻辑,但设置最长等待时长,超时后无论串口是否连接都继续运行程序,修改后的参考代码如下:
    void setup() {
      Serial.begin(9600);
      pinMode(LED_BUILTIN, OUTPUT);
      // 最长等待2秒串口连接,超时自动跳过阻塞
      unsigned long serialWaitTimer = millis();
      while (!Serial && millis() - serialWaitTimer < 2000);
    }
    
    void loop() {
      digitalWrite(LED_BUILTIN, HIGH);
      delay(1000);
      digitalWrite(LED_BUILTIN, LOW);
      delay(1000);
      Serial.println("hello");
    }
    
    该修改不会影响原有串口打印功能:打开串口监视器时仍能正常接收输出,未打开串口时程序也能正常运行loop逻辑,不会卡住。
  • 方案2:直接删除阻塞语句
    如果不需要抓取开机阶段的串口打印日志,可以直接删掉while (!Serial);这行代码,开发板上电后会直接走完setup进入loop循环,拔插后无需额外操作即可正常运行。
  • 方案3:保持串口连接
    如果不想修改代码,拔插开发板后手动打开Arduino IDE的串口监视器,开发板检测到串口连接建立后会自动跳出阻塞,恢复正常运行。

提示:该现象不属于硬件故障,也不是程序烧录异常丢失,是SAMD架构板卡USB串口的固有逻辑,从AVR架构板卡迁移代码时容易触发该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:54:21