发布时间:2026/8/16 22:12:49
1-Wire协议详解:用DS18B20温度传感器讲透单总线 假设你在做一个温室温度监控系统需要测3个点的温度土壤、空气、水温。3个传感器用I2C的话要3组线或带地址切换用SPI要12根线。DS18B20用1-Wire协议3个传感器共用1根数据线就够了接线极其简单。这篇从单总线时序讲到DS18B20完整驱动代码可以直接用。一、1-Wire是什么1-Wire是Dallas现Maxim开发的单总线通信协议只用一根数据线GND就能通信和供电。特点只需1根数据线GND支持寄生供电数据线兼电源下面解释每个器件有唯一64位ROM编码下面解释一根总线可挂多个器件速率较低标准15.4kbps寄生供电是什么正常用法是VCC和GND两根线供电。寄生供电模式下DS18B20不接VCC只接数据线和GND从数据线上偷电数据线高电平时给内部电容充电低电平时靠电容维持。好处是少接一根线坏处是温度转换时电流不够需要主设备强行拉高数据线供电。新手建议先接VCC正常供电稳定后再试寄生供电。64位ROM编码是什么每个DS18B20出厂时都烧录了一个全球唯一的64位编码包含8位家族码DS18B20是0x28 48位序列号 8位CRC校验。这就像每个传感器的身份证号一根线上挂多个DS18B20时靠这个编码区分我在跟谁说话。对比协议线数速率供电I2C2线100k-3.4M独立供电SPI4线几十M独立供电1-Wire1线15.4k可寄生供电二、DS18B20简介参数值测温范围-55~125°C精度±0.5°C-10~85°C分辨率9-12位可配接口1-Wire供电3.0-5.5V或寄生供电封装TO-92像三极管DS18B20便宜2元左右、防水型号多是测温首选。三、1-Wire时序1-Wire通信的关键是严格的时间控制所有操作都是主设备拉低总线等待采样。前置准备底层宏和微秒延时新手必看下面的代码用到了ONEWIRE_LOW()、ONEWIRE_HIGH()、ONEWIRE_READ()和delay_us()这些底层操作这里先给出它们的实现/* 假设DS18B20接在PA0引脚需要在CubeMX里把PA0配成GPIO_Output开漏模式 */#defineONEWIRE_PINGPIO_PIN_0#defineONEWIRE_PORTGPIOA/* 拉低数据线 */#defineONEWIRE_LOW()HAL_GPIO_WritePin(ONEWIRE_PORT,ONEWIRE_PIN,GPIO_PIN_RESET)/* 释放数据线拉高实际上是设为输入模式让上拉电阻拉高 */#defineONEWIRE_HIGH()HAL_GPIO_WritePin(ONEWIRE_PORT,ONEWIRE_PIN,GPIO_PIN_SET)/* 读取数据线电平 */#defineONEWIRE_READ()HAL_GPIO_ReadPin(ONEWIRE_PORT,ONEWIRE_PIN)/* 微秒延时——用DWT计数器实现最精确 *//* DWTData Watchpoint and Trace是Cortex-M3/M4内核的调试单元 * 里面有一个32位循环计数器CYCCNT每个时钟周期1可以用来精确计时 */#defineDWT_INIT()do{\CoreDebug-DEMCR|(124);\DWT-CYCCNT0;\DWT-CTRL|1;\}while(0)#definedelay_us(us)do{\uint32_tstartDWT-CYCCNT;\uint32_tticks(SystemCoreClock/1000000)*(us);\while((DWT-CYCCNT-start)ticks);\}while(0)DWT是什么DWTData Watchpoint and Trace数据监视和跟踪是ARM Cortex-M3/M4内核里的一个硬件调试模块里面有个CYCCNT计数器每过一个时钟周期就1。我们用它来精确计时精度达到1个时钟周期72MHz下约14纳秒。比用定时器更方便不占用定时器资源。硬件接线VCC接3.3VGND接GND数据线(DQ)接PA0数据线和VCC之间必须接一个4.7kΩ上拉电阻。因为1-Wire是开漏输出芯片只能把线拉低拉高靠外部上拉电阻。3.1 复位脉冲初始化主设备拉低总线 ≥480μs ↓ 释放总线拉高 ↓ 等待15-60μs ↓ DS18B20拉低总线60-240μs存在脉冲 ↓ 主设备检测到低电平 → 说明器件存在uint8_tds18b20_reset(void){uint8_tpresence0;/* 拉低480μs */ONEWIRE_LOW();delay_us(480);/* 释放总线等待 */ONEWIRE_HIGH();delay_us(70);/* 检测存在脉冲低存在 */if(ONEWIRE_READ()0)presence1;delay_us(410);/* 等待结束 */returnpresence;/* 1检测到器件 */}3.2 写0和写1写0拉低60-120μs释放 写1拉低1-15μs释放保持高电平到60μs结束 主设备在写时隙的前15μs内决定是0还是1。voidds18b20_write_bit(uint8_tbit){if(bit){/* 写1拉低1μs释放69μs */ONEWIRE_LOW();delay_us(2);ONEWIRE_HIGH();delay_us(68);}else{/* 写0拉低60μs释放8μs */ONEWIRE_LOW();delay_us(60);ONEWIRE_HIGH();delay_us(8);}}voidds18b20_write_byte(uint8_tdata){for(uint8_ti0;i8;i){ds18b20_write_bit(data0x01);/* 低位先行 */data1;}}3.3 读0和读1主设备拉低1μs → 释放 → 在15μs内采样 采样到低 读到0DS18B20保持拉低 采样到高 读到1DS18B20释放总线uint8_tds18b20_read_bit(void){uint8_tbit;/* 拉低1μs */ONEWIRE_LOW();delay_us(2);/* 释放 */ONEWIRE_HIGH();/* 等待后采样 */delay_us(10);bitONEWIRE_READ();/* 等待时隙结束 */delay_us(50);returnbit;}uint8_tds18b20_read_byte(void){uint8_tdata0;for(uint8_ti0;i8;i){data1;if(ds18b20_read_bit())data|0x80;}returndata;}四、DS18B20常用命令命令代码功能Skip ROM0xCC跳过ROM寻址单器件Convert T0x44启动温度转换Read Scratchpad0xBE读暂存器含温度数据Match ROM0x55指定ROM地址多器件Read ROM0x33读ROM编码单器件五、完整温度读取流程floatds18b20_read_temp(void){uint8_ttemp_l,temp_h;int16_ttemp_raw;/* 1. 复位 */if(!ds18b20_reset())return-999.0f;/* 2. 跳过ROM 启动转换 */ds18b20_write_byte(0xCC);/* Skip ROM */ds18b20_write_byte(0x44);/* Convert T *//* 3. 等待转换12位约750ms */HAL_Delay(750);/* 4. 复位 */ds18b20_reset();/* 5. 跳过ROM 读暂存器 */ds18b20_write_byte(0xCC);/* Skip ROM */ds18b20_write_byte(0xBE);/* Read Scratchpad *//* 6. 读温度低字节先读 */temp_lds18b20_read_byte();temp_hds18b20_read_byte();/* 7. 转换12位分辨率0.0625°C/LSB */temp_raw(temp_h8)|temp_l;returntemp_raw*0.0625f;}六、多器件挂载ROM搜索一根总线挂多个DS18B20时需要用ROM地址区分/* 读取单个器件ROM */ds18b20_reset();ds18b20_write_byte(0x33);/* Read ROM */for(inti0;i8;i){rom[i]ds18b20_read_byte();}/* 指定器件操作 */ds18b20_reset();ds18b20_write_byte(0x55);/* Match ROM */for(inti0;i8;i){ds18b20_write_byte(rom[i]);/* 发送64位ROM地址 */}ds18b20_write_byte(0x44);/* 启动该器件转换 */七、常见踩坑坑1时序不准通信失败1-Wire对时间要求严格delay_us必须精准。HAL_Delay精度毫秒级不够用定时器或DWT计数器实现微秒延时。坑2上拉电阻数据线必须接4.7kΩ上拉电阻到VCC。1-Wire是开漏输出没上拉拉不高。坑3多器件读取到相同温度忘了用Match ROM指定器件所有器件同时响应导致冲突。必须先读ROM再指定。坑4寄生供电转换失败寄生供电模式下温度转换需要较强电流。转换时主设备要拉高总线提供电力强上拉。八、总结要点内容1-Wire单总线寄生供电复位拉低480μs存在脉冲写时序写0拉低60μs写1拉低2μs读时序拉低2μs15μs内采样DS18B20流程复位→0xCC→0x44→等750ms→读温度转换raw × 0.0625一句话总结1-Wire的核心是复位脉冲检测器件严格时隙控制读写ROM地址区分多器件。下一篇预告《Git版本管理嵌入式工程师必备技能》作者嵌入式阿蔡

相关新闻

2026/8/16 22:12:49

Git版本管理:从零开始,用学生项目讲透每个命令

学校不教Git,但实习面试天天问"你用过Git吗"。 网上的Git教程要么讲一堆原理,要么假设你在公司团队里工作——可我还是学生,没参加过工作,那些场景我根本没概念。 这篇就用你真正会遇到的项目场景(课程设计、…

2026/8/16 22:07:48

银河麒麟V10服务器安装与初始化实战指南:从分区到Docker部署

1. 项目概述:为什么需要一份详尽的银河麒麟V10安装手册? 如果你是一名系统管理员、运维工程师,或者正在为国产化项目进行技术选型,那么“银河麒麟高级服务器操作系统 V10”这个名字你一定不陌生。作为一款在关键领域广泛部署的国产…

2026/8/16 22:07:48

Windows本地部署OpenClaw:手把手搭建AI智能体框架

1. 项目概述:为什么要在Windows上部署OpenClaw? 如果你最近在关注AI智能体领域,大概率已经听过OpenClaw这个名字。它不是一个独立的大模型,而是一个功能强大的“智能体框架”,你可以把它理解为一个AI的“大脑操作系统”…

2026/8/17 2:43:04

python列表学习笔记

目录简述添加元素删除元素排序反转列表推导式遍历简述 是一个容器 是一个可变的集合,是一个元素有序、可重复的序列 添加元素 append在末尾添加新元素 lst [1,2,3] lst.append(4)insert 在指定索引处添加数据 lst [1,2,3] lst.insert(0,0)删除元素…

2026/8/17 2:43:04

Python面向对象编程:从封装、继承到多态的实战进阶指南

1. 项目概述:为什么面向对象是Python进阶的必经之路如果你已经能熟练地用Python写一些脚本,处理数据,或者用几个循环和判断语句完成一些小任务,那么恭喜你,你已经迈出了第一步。但很快你会发现,当项目稍微复…

2026/8/17 2:43:04

Python环境配置全攻略:从安装到虚拟环境与IDE设置

1. 为什么你的Python安装总是不顺?从源头说起 每次看到“Python安装教程”这几个字,你是不是觉得这有什么好讲的,不就是点下一步吗?但现实是,我见过太多新手,甚至是工作了一两年的朋友,因为最初…

2026/8/17 2:43:04

H3C S5024PV6-EI二层核心交换机实战配置与部署指南

最近在帮朋友公司做网络升级方案时,发现很多中小企业在选择核心交换机时非常纠结。预算有限,但又需要稳定、功能全、能支撑未来几年发展的设备。反复对比了几款主流品牌后,华三通信(H3C)的S5024PV6-EI这款全千兆二层网…

2026/8/16 0:00:35

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:36

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/17 0:02:57

LabVIEW异步调用实战:解决界面卡顿与并行处理难题

1. 项目概述:为什么异步调用是LabVIEW进阶的必经之路如果你在LabVIEW里写过稍微复杂点的程序,尤其是涉及到界面响应、多任务并行或者硬件IO等待,大概率会遇到一个头疼的问题:程序“卡”住了。前面板点不动,进度条不更新…

2026/8/17 0:02:57

飞书局域网文件传输实战:3种方案实现高速点对点传输

1. 项目概述:为什么要在局域网内用飞书传文件? 飞书作为一款主流的协同办公套件,其核心功能是围绕云端协作设计的。无论是文档、表格还是文件,通常的分享逻辑都是“上传到云端 -> 生成链接 -> 分享给同事”。这个流程在互联…

2026/8/15 9:46:39

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/16 16:53:03

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/15 9:46:30

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…