STM32_DS18B20_1_芯片简介及初始化配置
DS18B20介绍
DS18B20数字温度计提供9位到12位摄氏度的温度测量,并具有非易失性,用户可编程的上下触发点的报警功能。DS18B20通过1线总线进行通信,根据定义,该总线只需要一条数据线,即可与中央微处理器进行通信。它的工作温度范围为-55°C到+125°C,在-10°C到+85°C的范围内精确到±0.5°C。此外,DS18B20可以直接从数据线获得电力,消除了对外部电源的需要。
每个DS18B20都有一个唯一的64位串行码,它允许多个DS18B20在同一个1线总线上工作。因此,使用一个微处理器来控制分布在大面积区域内的许多ds18b20是很简单的。可以受益于此特性的应用程序包括暖通空调环境控制、建筑物内部的温度监测系统、设备或机械内部的温度监测系统,以及过程监控和控制系统。
引脚说明
| 8引脚SOIC封装 | T0-9封装 | 符号 | 说明 |
| 5 | 1 | GND | 接地 |
| 4 | 2 | DQ | 数据输入/输出引脚。对于单线操作:漏极开漏。当工作在寄生电源模式时用来提供电源(建“寄生电源”节) |
| 3 | 3 | VDD | 可选的VDD引脚。工作与寄生电源模式时VDD必须接地。 |
Tips:上表没说的引脚不需要连接。
DS18B20的另一个功能是可以在没有外部电源供电的情况下工作。当总线处于高电平状态,DQ与上拉电阻连接通过单总线对器件供电。同时处于高电平状态的总线信号对内部电容(Cpp)充电,在总线处于低电平状态时,该电容提供能量给器件。这种提供能量的形式被称为“寄生电源”。作为替代选择,DS18B20同样可以通过VDD引脚连接外部电源供电。
配置寄存器
| bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 |
| 0 | R1 | R0 | 1 | 1 | 1 | 1 | 1 |
可通过按R1和R0来设置DS18B20的精度。上电默认设置:R0=1,R1=1(12位精度)。
Tips:精度和转换时间之间一般成反比。
温度计精确度配置表
| R1 | R0 | 精度 | 最大转换时间 | |
| 0 | 0 | 9-bit | 93.75ms | (Tconv/8) |
| 0 | 1 | 10-bit | 187.5ms | (Tconv/4) |
| 1 | 0 | 11-bit | 375ms | (Tconv/2) |
| 1 | 1 | 12-bit | 750ms | (Tconv) |
温度转换期间(tconv)
执行序列
通过单线总线端口访问DS18B20的协议如下:
- 初始化
- ROM操作指令
- DS18B20功能指令
每次执行DS18B20都需要满足以上步骤,若是步骤缺少或混乱,DS18B20都将不会返回值。
初始化
通过单总线的所有执行操作都从一个初始化序列开始。初始化序列包括一个由总线控制器发出的复位脉冲和其后由从机发出的存在脉冲。从机的存在脉冲告知总线控制器DS18B20已就绪。
初始化序列
在初始化序列期间,总线控制器拉低总线并保持480us发出(TX)一个复位脉冲,然后释放总线,进入接受状态(RX)。单总线由5K上拉电阻拉到高电平。当DS18B20探测到I/O引脚上的上升沿后,等待15-60us,然后发出一个由60-240us低电平信号构成的存在脉冲。
简而言之,Vpu单总线刚开始为输出模式,输出480us低电平,然后输出高电平(15-60us)后,转换为上拉输入模式,总线接收到DS18B20的60-240us的低电平存在脉冲。

ROM操作指令
一旦总线控制器探测到一个存在脉冲,他就发出一条ROM指令。如果总线上挂有多个DS18B20,这些指令将通过器件独有的64位ROM片序列码使得总线控制器选出特定的需要控制的器件进行操作。
33h(读取ROM指令)
在总线只有单只DS18B20的时候才能使用这条命令。该命令允许总线控制器在不适用搜索ROM指令的情况下读取从机的64位片序列码;
CCh(忽略ROM指令)
这条指令允许总线控制器不用提供64位ROM编码使用功能指令。
其他ROM指令可以去看DS18B20的手册。
DS18B20控制指令
在总线控制器发给准备连接的DS18B20一条ROM命令后,随之发送一条DS18B20功能指令。这些命令可以让总线控制器读写DS18B20的暂存器,发起一些功能。
44h(温度转换指令)
使用这条指令可以启动一次温度转换。温度转换执行后,产生的温度转换结果数据以2个字节的形式被存储在高速暂存器中,而后DS18B20保持等待状态。如果在寄生电源模式下发出该指令后,在温度转换期间(tconv),在10us之内,给单总线一个强上拉。
B4h(读电源模式指令)
发出指令后,若是寄生电源模式,DS1820将拉低总线,若是外部电源模式,DS18B20将把总线拉高。
供电
DS18B20可以通过从VDD引脚接入一个外部电源供电,或者可以工作与寄生电源模式(通过数据线贡献),该模式允许DS18B20工作于无外部电源供电的状态。寄生电源在远距离测温时非常有用。
Tips:寄生电源模式时,VDD必须接地。
测温操作
DS18B20能够直接读取数字。DS18B20启动后保持低消耗状态;当需要执行温度测量和AD转换时,总线控制必须发出0x44的命令。之后,产生的温度数据以两个字节的形式被存储到高速暂存的温度寄存器中,然后DS18B20继续保持等待状态。
当DS18B20由外部电源供电时,总线控制器在温度转换指令之后发起“读时序”。


读时序
总线控制器发起读时序时,DS18B20 仅被用来传输数据给控制器。因此,总线控制器在发出读暂存器指令[BEh]或读电源模式指令[B4H]后必须立刻开始读时序,DS18B20可以提供请求信息。除此之外,总线控制器在发出发送温度转换指令[44h]或召回 EEPROM 指令[B8h]之后读时序。所有读时序必须最少 60us,包括两个读周期间至少 1us 的恢复时间。当总线控制器把数据线从高电平拉到低电平时,读时序开始,数据线必须至少保持 1us,然后总线被释放。在总线控制器发出读时序后,DS18B20 通过拉高或拉低总线上来传输 1 或 0。当传输逻辑 0 结束后,总线将被释放,通过上拉电阻回到上升沿状态。从 DS18B20 输出的数据在读时序的下降沿出现后 15us 内有效。因此,总线控制器在读时序开始后必须停止把 I/O 脚驱动为低电平 15us,以读取I/O 脚状态。


代码
bsp_ds18b20.c
#include "bsp_ds18b20.h"
void DS18B20_Mode_Out_PP(void)
{GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB, &GPIO_InitStructure);
}void DS18B20_Mode_IPU(void)
{GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void DS18B20_GPIO_Configuration(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void DS18B20_Init(void)
{DS18B20_Mode_Out_PP();DS18B20_DATA_OUT(0);Delay_us(750);DS18B20_DATA_OUT(1);Delay_us(15);DS18B20_Mode_IPU();while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_6) != 0);while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_6) == 0);
}
bsp_ds18b20.h
#ifndef __BSP_DS18B20_H__
#define __BSP_DS18B20_H__#include <stm32f10x.h>
#include "bsp_SysTick.h"#define DS18B20_DATA_OUT(a) GPIO_WriteBit(GPIOB, GPIO_Pin_6, (BitAction)(a))void DS18B20_GPIO_Configuration(void);
void DS18B20_Init(void);#endif
bsp_SysTick.c
#include "bsp_SysTick.h"unsigned int TimingDelay;void SysTick_Configuration(void)
{while(SysTick_Config(72));SysTick->CTRL &= ~(1<<0); //暂时初始化后先关闭定时器,使用前开启
}
void Delay_us(unsigned int n)
{TimingDelay = n;SysTick->CTRL |= (1<<0); //开启Sys_Tickwhile(TimingDelay);SysTick->CTRL &= ~(1<<0);
}
bsp_Systick.h
#ifndef __BSP_SYSTICK_H__
#define __BSP_SYSTICK_H__#include <stm32f10x.h>extern unsigned int TimingDelay;void SysTick_Configuration(void);
void Delay_us(unsigned int n);#endif
相关文章:
STM32_DS18B20_1_芯片简介及初始化配置
DS18B20介绍 DS18B20数字温度计提供9位到12位摄氏度的温度测量,并具有非易失性,用户可编程的上下触发点的报警功能。DS18B20通过1线总线进行通信,根据定义,该总线只需要一条数据线,即可与中央微处理器进行通信…...
每天一个数据分析题(一百六十四)
关于OLAP系统,下列选项不正确的是() A. 是基于数据仓库的信息进行分析处理过程 B. 用户数量相对较少,其用户主要是业务决策人员与管理人员 C. 对响应时间要求非常高。 D. 基础数据来源于生产系统的操作数据,也就是…...
单词倒排——c语言解法
以下是题目: 这个题中有三个点, 一个是将非字母的字符转换为空格, 第二是如果有两个连续的空格, 那么就可以将这两个连续的空格变成一个空格。 第三个点就是让单词倒排。 那么我们就可以将这三个点分别封装成三个函数。 还有就是…...
Python + Selenium —— 网页元素定位之class name定位!
class 属性可以为元素应用一个或者多个 CSS 样式类。 利用此属性可以与指定的 CSS 样式类关联起来,以此达到设置元素样式的功能。 可以这样理解,比如一个页面上的所有按钮,都想做成同样的样式,那么是不是要在每个按钮上写同样的 c…...
matlab simulink变压器温度仿真
1、内容简介 略 48-可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 matlab simulink变压器温度仿真_哔哩哔哩_bilibili 4、参考论文 略 大型油浸风冷变压器绕组温度场分析_高原 基于顶层油温的变压器绕组热点温度计算改进模型_陈伟根 基于热电类比理论的油浸式电…...
设计模式七:责任链模式
文章目录 1、责任链模式2、spring中的责任链模式Spring InterceptorServlet FilterNetty 1、责任链模式 责任链模式为请求创建了一个接收者对象的链,在这种模式下,通常每个节点都包含对另一个节点者的引用。每个节点针对请求,处理自己感兴趣…...
Git,GitHub与GitLab分别是什么?有什么关系和区别?
Git 定义:Git 是一个分布式版本控制系统,用于跟踪文件的变化,并协助多人协作开发软件项目。作用:Git 可以在本地存储完整的项目历史记录,并允许开发者在不同的分支上进行独立的开发,最后将它们合并到主干分…...
【Spring连载】使用Spring Data访问 MongoDB----Template API 查询Documents
【Spring连载】使用Spring Data访问 MongoDB----Template API 查询Documents 一、 查询集合中的Documents二 选择字段三、 其他查询选项3.1 Hints3.2 游标批大小Cursor Batch Size3.3 Collations3.4 读取首选项Read Preference3.5 Comments 四、查询Distinct值五、GeoSpatial Q…...
git describe
git describe一般用于查看当前提交距离上次最近的tag是什么,并且还可以知道差了多少个commit,在工程实践当中是个非常好用的命令 如果git describe后面什么都不加的话,默认找的是最近的有注释的tag 如何打有注释的tag打注释? g…...
React Switch用法及手写Switch实现
问:如果注册的路由特别多,找到一个匹配项以后还会一直往下找,我们想让react找到一个匹配项以后不再继续了,怎么处理?答:<Switch>独特之处在于它只绘制子元素中第一个匹配的路由元素。 如果没有<Sw…...
PowerShell执行策略:确保脚本安全执行的关键
PowerShell执行策略:确保脚本安全执行的关键 在自动化和脚本任务管理中,PowerShell 是 Windows 系统管理员和自动化工程师的强大工具。但随着这种强大的能力也带来了安全风险,特别是在执行未经验证的脚本时。为了降低这种风险,Po…...
LeetCode 热题 100 | 图论(上)
目录 1 200. 岛屿数量 2 994. 腐烂的橘子 2.1 智障遍历法 2.2 仿层序遍历法 菜鸟做题,语言是 C 1 200. 岛屿数量 解题思路: 遍历二维数组,寻找 “1”(若找到则岛屿数量 1)寻找与当前 “1” 直接或间接连接在…...
跟着cherno手搓游戏引擎【25】封装2DRenderer,封装shader传参,自定义Texture
封装2DRenderer: Renderer.h: #include"ytpch.h" #include"Renderer.h" #include <Platform/OpenGL/OpenGLShader.h> #include"Renderer2D.h" namespace YOTO {Renderer::SceneData* Renderer::m_SceneData new Renderer::S…...
多个值时 if [ -z 报错 binary operator expected
if [ ! -z "\$client_pid" ]; then 报错: line 23: [: 662: binary operator expected 改成 if [[ ! -z "\$client_pid" ]]; then 即可。 unix - binary operator expected error when checking if a file with full pathname exists - Stack Overflo…...
如何使用ChatGPT创建一份优质简历
目录 第一步:明确目标和重点 第二步:与ChatGPT建立对话 第三步:整理生成的内容 第四步:注重行文风格 第五步:强调成就和量化结果 第六步:个性化和定制 第七步:反复修改和完善 总结 在现…...
k8s(6)
目录 一.kubectl 命令行管理K8S 陈述式资源管理方式(可理解成使用一条kubectl命令及其参数选项来实现资源对象的管理操作) service的4的基本类型: service的端口 应用发布策略: 声明式资源管理方式(可理解成使用…...
自动驾驶框架:自动驾驶汽车定位-感知-规划-决策-控制概述,按照我的架构图理解:决策决定的是速度,规划决定的是路径(架构理解推荐)
1.按照我的架构图理解:决策决定的是速度,规划决定的是路径 参考链接:【自动驾驶】运动规划丨速度规划丨自动驾驶速度规划及状态协调方法 2.下面是参考别人的理解: 自动驾驶汽车定位-感知-规划-决策-控制概述 规划-决策-控制知…...
Gemma
Gemma 1.使用2.RAG3.LoRA3.1LoRA分类任务3.2LoRA中文建模任务 1.使用 首先是去HF下载模型,但一直下载不了,所以去了HF镜像网站,下载gemma需要HF的Token,按照步骤就可以下载。代码主要是Kaggle论坛里面的分享内容。 huggingface-…...
淘宝关键词搜索API、搜索商品接口、商品价格监控
淘宝搜索引擎的工作原理: 淘宝搜索引擎的工作原理是基于搜索引擎的核心技术——爬虫和索引,通过对海量数据的抓取、分析和存储,提供给用户最准确的搜索结果。 具体来说,淘宝搜索引擎的工作流程如下: 企业级api数据…...
vue实现水印功能
目录 一、应用场景 二、实现原理 三、详细开发 1.水印的实现方式 2.防止用户通过控制台修改样式去除水印效果(可跳过,有弊端) 3.水印的使用 (1)单页面/全局使用 (2)全局使用个别页面去掉…...
深度解析开源光学材料数据库:3000+材料折射率查询完整指南
深度解析开源光学材料数据库:3000材料折射率查询完整指南 【免费下载链接】refractiveindex.info-database Database of optical constants 项目地址: https://gitcode.com/gh_mirrors/re/refractiveindex.info-database 在光学工程和材料科学研究中…...
Cadence OrCAD原理图DRC检查保姆级教程:从新手到老鸟的避坑全流程
Cadence OrCAD原理图DRC检查实战指南:从参数配置到问题修复的全链路解析 在硬件设计领域,原理图就像建筑师的蓝图,任何细微的疏漏都可能导致后续PCB设计和生产的灾难性后果。而DRC(Design Rule Check)检查正是确保这张…...
零成本实现一台电脑多人分屏游戏:Nucleus Co-Op终极指南
零成本实现一台电脑多人分屏游戏:Nucleus Co-Op终极指南 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 还在为朋友聚会时电脑不够用而…...
魔兽争霸3终极优化指南:WarcraftHelper让你的经典游戏在现代电脑焕然新生
魔兽争霸3终极优化指南:WarcraftHelper让你的经典游戏在现代电脑焕然新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3…...
用Lottie动画和LeanCloud,给你的React Native登录页加点‘魔法’(附完整代码)
用Lottie动画和LeanCloud打造React Native登录页的视觉魔法 在移动应用的世界里,第一印象决定一切。一个枯燥的登录页面可能会让用户对你的应用产生负面印象,而一个精心设计的交互体验则能瞬间提升品牌形象。作为React Native开发者,我们拥有…...
物联网(IoT)应用开发:Phi-4-mini-reasoning推理设备数据流与协议转换
物联网(IoT)应用开发:Phi-4-mini-reasoning推理设备数据流与协议转换 1. 智能家居场景中的异构数据挑战 走进一个典型的智能家居环境,你会发现各种设备都在产生数据:温湿度传感器每隔30秒上报一次读数,智…...
Linux终端实战:从零构建命令行五子棋(双人对决)
1. 为什么要在终端写五子棋? 第一次在Linux终端里写五子棋时,我也觉得这想法挺奇怪的——放着那么多图形界面不用,干嘛非要跟黑底白字的命令行较劲?但真正动手后才发现,这个项目简直是Linux环境编程的完美练手项目。 用…...
如何高效下载抖音内容:douyin-downloader的完整使用指南
如何高效下载抖音内容:douyin-downloader的完整使用指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback sup…...
Qwen3-ASR-1.7B效果展示:TED演讲级长音频端到端转写完整性验证
Qwen3-ASR-1.7B效果展示:TED演讲级长音频端到端转写完整性验证 1. 开篇引言:为什么需要高质量的语音识别? 在日常工作和学习中,我们经常遇到需要将音频内容转换为文字的场景。无论是会议记录、视频字幕制作,还是学习…...
如何用YAML配置文件驱动不同对齐算法:Align-Anything配置系统详解
如何用YAML配置文件驱动不同对齐算法:Align-Anything配置系统详解 【免费下载链接】align-anything Align Anything: Training All-modality Model with Feedback 项目地址: https://gitcode.com/gh_mirrors/al/align-anything Align-Anything是一个功能强大…...
