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

DS18B20温度读取在Arduino Giga崩溃,Yun/Mega正常,求原因及解决方法

Arduino Giga上DS18B20导致MbedOS崩溃的原因及解决方案

问题原因

  • 库架构不兼容:你使用的传统OneWire库是针对AVR架构(Mega/Yun)开发的,而Arduino Giga基于Mbed OS核心,库的底层引脚操作逻辑与Mbed的硬件抽象层不匹配,初始化或通信时触发系统断言崩溃。
  • 引脚配置差异:Giga的数字引脚默认电气模式与AVR板不同,OneWire通信需要引脚支持开漏输出+上拉电阻,传统库未对Giga做针对性配置,导致通信信号异常,进而引发MbedOS崩溃。

解决方案

方案1:适配Mbed核心的库替换

  1. 在Arduino IDE中卸载原有的OneWire库,安装官方维护的OneWire库(版本≥2.3.7),该版本已适配Mbed架构开发板。
  2. 更新DallasTemperature库至最新版,确保与新版OneWire兼容。
  3. 保留原有代码逻辑,直接上传即可正常运行。

方案2:手动配置引脚(无需换库)

在setup()中添加引脚初始化代码,强制设置为OneWire所需的电气模式:

#include <OneWire.h>
#include <DallasTemperature.h>

OneWire bus(7);
DallasTemperature sensors(&bus);

void setup() {
  Serial.begin(9600);
  // 配置D7引脚为开漏输出并启用内部上拉
  pinMode(7, OUTPUT_OPEN_DRAIN);
  digitalWrite(7, HIGH);
}

void loop() {
  sensors.requestTemperatures();
  String dataString = "";

  int index = 0;
  DeviceAddress addr;

  while(sensors.getAddress(addr, index)) {
    dataString += String(index);
    dataString += " = ";  
    dataString += String(sensors.getTempC(addr));
    dataString += " ";  
    index++;
  }

  Serial.println(dataString);
  delay(1000);
}

方案3:添加外部上拉电阻

3个DS18B20同时工作时,建议在D7引脚与+5V之间串联一个4.7kΩ的外部上拉电阻,增强信号稳定性,避免因信号波动触发系统崩溃。

验证步骤

  1. 按两次Arduino Giga的RST按钮进入引导模式,确保代码正确上传。
  2. 打开串口监视器(波特率9600),确认温度数据正常输出,红灯停止闪烁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:58:16