0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【笔记】多路DS18B20温度的读取

撞上电子 2023-06-08 09:49 次阅读

多路DS18B20温度传感器的读取原理如下:1. 初始化:首先需要初始化GPIO引脚的配置,将其设置为推挽输出模式。这个引脚将用于与DS18B20传感器进行通信。2. 启动温度转换:在读取温度之前,需要向DS18B20传感器发送启动转换命令。这个命令告诉传感器开始进行温度转换。3. 延时等待转换完成:启动转换后,需要等待一段时间,使得DS18B20完成温度转换过程。这个时间取决于DS18B20的转换时间,可以根据数据手册进行设置。4. 读取温度值:在转换完成后,可以读取DS18B20传感器的温度值。读取的过程需要按照DS18B20的通信协议进行,具体如下:- 拉低总线并延时一段时间(2微秒)来准备读取数据。- 释放总线并等待DS18B20发出应答信号。- 通过逐位读取的方式,读取DS18B20传感器发送的数据。每位数据的读取包括等待一个周期的时间,然后读取数据位的值。- 读取完所有的数据位后,还需读取校验位。校验位的读取方式与数据位相同。- 根据读取到的数据计算出温度值。温度值的整数部分由8位数据组成,温度值的小数部分由校验位和第一位数据位组成。- 最后,根据校验位的值判断温度值的符号。5. 处理温度值:获取到温度值后,可以根据需要进行相应的处理,比如打印到串口、显示到LCD屏幕或进行其他逻辑操作。

#include "stm32f4xx_hal.h"
#define DS18B20_GPIO_Port GPIOA#define DS18B20_Pin GPIO_PIN_0
// 定义函数原型void DS18B20_Init(void);void DS18B20_StartConversion(void);float DS18B20_ReadTemperature(void);
int main(void){ HAL_Init();
// 初始化DS18B20 DS18B20_Init();
while (1) { // 启动温度转换 DS18B20_StartConversion();
// 延时一段时间等待转换完成 HAL_Delay(1000);
// 读取温度值 float temperature = DS18B20_ReadTemperature();
// 在这里处理温度值,例如打印到串口或者进行其他操作
HAL_Delay(5000); // 延时5秒 }}
// DS18B20初始化函数void DS18B20_Init(void){ GPIO_InitTypeDef GPIO_InitStruct = {0};
// 使能GPIO时钟 __HAL_RCC_GPIOA_CLK_ENABLE();
// 配置GPIO引脚为推挽输出模式 GPIO_InitStruct.Pin = DS18B20_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(DS18B20_GPIO_Port, &GPIO_InitStruct);
// 拉低总线,准备写入指令 HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_Pin, GPIO_PIN_RESET); HAL_Delay(480); // 延时480微秒
// 释放总线,准备读取应答信号 HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_Pin, GPIO_PIN_SET); HAL_Delay(80); // 延时80微秒
// 等待DS18B20发出应答信号 while (HAL_GPIO_ReadPin(DS18B20_GPIO_Port, DS18B20_Pin) == GPIO_PIN_RESET) ;}
// 启动温度转换void DS18B20_StartConversion(void){ // 拉低总线,发送启动转换命令 HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_Pin, GPIO_PIN_RESET); HAL_Delay(2); // 延时2微秒
// 释放总线,转换开始 HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_Pin, GPIO_PIN_SET); HAL_Delay(10); // 延时10毫秒}
// 读取温度值float DS18B20_ReadTemperature(void){ uint8_t data[9]; uint8_t i, j; float temperature = 0;
// 拉低总线,准备读取温度数据 HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_Pin, GPIO_PIN_RESET); HAL_Delay(2); // 延时2微秒
// 释放总线,开始读取数据 HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_Pin, GPIO_PIN_SET); HAL_Delay(10); // 延时10微秒
// 等待DS18B20发出应答信号 while (HAL_GPIO_ReadPin(DS18B20_GPIO_Port, DS18B20_Pin) == GPIO_PIN_RESET) ;
// 读取数据 for (i = 0; i < 8; i++) { // 延时一个周期 HAL_Delay(2);
// 读取数据位 if (HAL_GPIO_ReadPin(DS18B20_GPIO_Port, DS18B20_Pin) == GPIO_PIN_SET) { data[i] = 1; } else { data[i] = 0; }
// 等待下一个数据位 while (HAL_GPIO_ReadPin(DS18B20_GPIO_Port, DS18B20_Pin) == GPIO_PIN_SET) ; }
// 校验位 if (HAL_GPIO_ReadPin(DS18B20_GPIO_Port, DS18B20_Pin) == GPIO_PIN_SET) { data[8] = 1; } else { data[8] = 0; }
// 计算温度值 for (i = 0; i < 8; i++) { temperature |= data[i] << i; }
// 温度值的小数部分 j = data[0] >> 3; temperature += (float)j * 0.0625;
// 温度值的符号位 if (data[8] == 1) { temperature = -temperature; }
return temperature;}

以上代码示例实现了通过STM32的HAL库读取多路DS18B20温度传感器的功能。在初始化阶段,通过设置GPIO引脚为推挽输出模式来控制DS18B20的通信,然后使用相关的时序操作启动温度转换和读取温度值。在读取温度值时,按照DS18B20的通信协议逐位读取数据,并进行计算得到最终的温度值。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2551

    文章

    51078

    浏览量

    753375
  • 温度
    +关注

    关注

    2

    文章

    138

    浏览量

    10408
收藏 人收藏

    评论

    相关推荐

    《DNESP32S3使用指南-IDF版_V1.6》第二十九章 DS18B20实验

    第二十九章 DS18B20实验 本章,我们将介绍ESP32-S3如何读取外部温度传感器的温度,来得到较为准确的环境温度。我们将学习单总线技术
    发表于 12-25 09:43

    CW32模块使用 DS18B20温度传感器

    DS18B20数字温度传感器提供9位至12位精度的温度测量,并具有非易失性用户可编程上下触发点报警功能。DS18B20通过单总线通信,根据定义,只需要一条数据线(和地线)即可与单片机通
    的头像 发表于 11-26 17:47 240次阅读
    CW32模块使用 <b class='flag-5'>DS18B20</b><b class='flag-5'>温度</b>传感器

    DS18B20温度传感器的工作原理和硬件设计

    通过本文可以了解DS18B20温度传感器工作原理、硬件设计、DS18B20单总线接口驱动编写。
    的头像 发表于 10-24 14:38 2017次阅读
    <b class='flag-5'>DS18B20</b><b class='flag-5'>温度</b>传感器的工作原理和硬件设计

    ds18b20传感器的使用方法

    DS18B20是一种广泛使用的数字温度传感器,它基于1-Wire(单总线)通信协议。这种传感器因其高精度、易用性和低成本而受到欢迎。 DS18B20传感器简介 DS18B20是由Max
    的头像 发表于 10-18 14:52 786次阅读

    ds18b20温度传感器怎么接线

    DS18B20是一种广泛使用的数字温度传感器,它基于1-Wire(一线)通信协议工作。这种传感器因其高精度、易用性和低成本而受到欢迎。 DS18B20传感器引脚介绍 DS18B20有三
    的头像 发表于 10-18 14:50 1330次阅读

    ds18b20温度传感器如何使用

    DS18B20是一款广泛使用的数字温度传感器,它具有高精度、低功耗和易于使用的特点。 DS18B20温度传感器简介 DS18B20是由Max
    的头像 发表于 09-03 16:51 663次阅读

    ds18b20温度传感器是什么类型

    DS18B20温度传感器是一种数字温度传感器,它属于单总线(One-Wire)数字温度传感器类型。这意味着它仅需要一根数据线(加上电源线和地线,共三根线)就能与微处理器或其他数字电路进
    的头像 发表于 09-03 16:46 1009次阅读

    ds18b20温度传感器和dht11的区别

    DS18B20和DHT11都是常用的温度和湿度传感器,它们在许多项目和应用中都有广泛的应用。 1. 工作原理 DS18B20 DS18B20是一种数字
    的头像 发表于 09-03 16:44 1625次阅读

    STC32和STC8H驱动DS18B20测温串口发送数据

    STC32G12K128 和 STC8H8K64U 驱动 DS18B20 模块,采集环境温度并通过串口发送数据至电脑
    的头像 发表于 06-27 16:27 863次阅读
    STC32和STC8H驱动<b class='flag-5'>DS18B20</b>测温串口发送数据

    基于51单片机DS18B20温度采集控制风扇设计

    本资源内容概要:       这是基于51单片机DS18B20温度采集控制风扇设计包含了电路图源文件(Altiumdesigner软件打开)、C语言程序源代码(keil软件打开)、元件清单
    发表于 06-26 10:43 0次下载

    基于51单片机DS18B20温度采集1602液晶显示报警设计

    本资源内容概要:       这是基于51单片机DS18B20温度采集1602液晶显示报警设计包含了电路图源文件(Altiumdesigner软件打开)、C语言程序源代码(keil软件打开)、元件
    发表于 06-25 10:16 0次下载

    DS18B20温度传感器工作原理

    DS18B20以其独特的工作原理、卓越的技术参数和广泛的应用场景,成为了市场的明星产品。 深入了解DS18B20的工作原理 DS18B20温度传感器的工作原理基于热敏电阻的特性和数字
    的头像 发表于 06-19 16:01 1271次阅读

    基于STC8H8K64U和DS18B20温度采集和LabVIEW上位机显示

    之前通过 STC 单片机和 DS18B20 实现了环境温度采集并串口显示,后面进一步想要实现温度的实时监测和数据记录保存,因此编写了 LabVIEW 程序,修改了部分单片机程序代码。经过实验验证
    发表于 04-08 12:28

    DS18B20温度传感器的优缺点

    可编程寄存器:DS18B20内部具有可编程寄存器,允许用户对其进行配置和控制,以满足不同的应用需求。
    发表于 04-04 11:39 4462次阅读

    基于51单片机的多点温度检测网络,DS18B20传感器,代码,仿真,原理图等资料

    设计概述 基于DS18B20的多点温度测量监控系统设计,以AT89C52单片机作为主控制器,不断循环读取4组DS18B20(T1、T2、T3和T4)
    发表于 03-24 22:08