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核心的库替换
- 在Arduino IDE中卸载原有的
OneWire库,安装官方维护的OneWire库(版本≥2.3.7),该版本已适配Mbed架构开发板。 - 更新
DallasTemperature库至最新版,确保与新版OneWire兼容。 - 保留原有代码逻辑,直接上传即可正常运行。
方案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Ω的外部上拉电阻,增强信号稳定性,避免因信号波动触发系统崩溃。
验证步骤
- 按两次Arduino Giga的RST按钮进入引导模式,确保代码正确上传。
- 打开串口监视器(波特率9600),确认温度数据正常输出,红灯停止闪烁。
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

