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的通信协议逐位读取数据,并进行计算得到最终的温度值。

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

    关注

    2573

    文章

    54363

    浏览量

    785790
  • 温度
    +关注

    关注

    2

    文章

    143

    浏览量

    10893
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    要做一个DS18B20读取程序,单总线需要配置为输入或者输出,怎么配置好?

    目前要做一个DS18B20读取程序,单总线需要配置为输入或者输出。怎么配置好
    发表于 11-18 06:30

    使用18b20软件包报错怎么解决?

    In file included from ../packages/ds18b20-latest/src/dallas_ds18b20_sensor_v1.c:12:0: C
    发表于 10-14 06:49

    STM32项目分享:矿井环境监测系统

    01—项目简介1.功能详解STM32矿井环境监测系统功能如下:STM32F103C8T6单片机作为主控制器DS18B20测量环境温度
    的头像 发表于 08-16 10:03 699次阅读
    STM32项目分享:矿井环境监测系统

    液体介电常数测试仪中的温度控制与热漂移抑制

    55。同时,温度波动会使电阻、电容等无源元件参数改变,晶体管等有源器件工作点偏移,最终影响测量精度。 温度控制方案设计 温度测量模块 常用温度传感器中,热电偶测量范围广但需冷端补偿;
    的头像 发表于 07-31 13:23 442次阅读
    液体介电常数测试仪中的<b class='flag-5'>温度</b>控制与热漂移抑制

    低频段 LNA 前端模块(B26/B5/B18/B19、B8、B20B12/13/17、B28A、B28BB29) skyworksinc

    电子发烧友网为你提供()低频段 LNA 前端模块(B26/B5/B18/B19、B8、B20
    发表于 06-27 18:32
    低频段 LNA 前端模块(<b class='flag-5'>B</b>26/<b class='flag-5'>B</b>5/<b class='flag-5'>B18</b>/<b class='flag-5'>B</b>19、<b class='flag-5'>B</b>8、<b class='flag-5'>B20</b>、<b class='flag-5'>B</b>12/13/17、<b class='flag-5'>B</b>28A、<b class='flag-5'>B28B</b> 和 <b class='flag-5'>B</b>29) skyworksinc

    单片机实例项目:DS18B20温度传感器

    单片机实例项目:DS18B20温度传感器,推荐下载!
    发表于 06-03 20:59

    血泪教训总结:Air780EPM的LuatOS二次开发——OneWire协议调试注意事项

    的OneWire通信,大幅提升项目开发效率。 一、LuatOS 及 OneWire 说明   LuatOS 支持 OneWire 通信协议,本文以 DS18B20 温度传感器和 Air780EPM 搭配
    的头像 发表于 03-20 17:52 905次阅读
    血泪教训总结:Air780EPM的LuatOS二次开发——OneWire协议调试注意事项

    最佳实践指南:Air780EPM的LuatOS二次开发——OneWire协议调试的注意事项

    在物联网设备开发中,精准且稳定的数据传输是构建智能系统的核心。 一、LuatOS 及 OneWire 说明   LuatOS 支持 OneWire 通信协议,本文以 DS18B20 温度传感器
    的头像 发表于 03-17 16:57 574次阅读
    最佳实践指南:Air780EPM的LuatOS二次开发——OneWire协议调试的注意事项

    基于FPGA的DS18B20数字温度传感器测温实例

    本文将使用三段式状态机(Moore型)的写法来对DS18B20进行测温操作,以便了解DS18B20和熟悉三段式状态机的写法。
    的头像 发表于 03-17 11:06 2080次阅读
    基于FPGA的<b class='flag-5'>DS18B20</b>数字<b class='flag-5'>温度</b>传感器测温实例

    DS18B20实时温度传感器中文资料

    DS18B20 是一种单总线数字温度传感器,它被广泛应用于各种领域,例如气象监测、室内温度控制、工业自动化等。DS18B20 采用了单总线接口(One-Wire Interface),
    发表于 02-28 17:02 5次下载

    DS1920 iButton温度记录仪技术手册

    DS1920温度iButton提供9位温度读数,指示设备的温度。信息通过1-Wire接口发送到DS1920或从
    的头像 发表于 02-26 10:22 839次阅读
    <b class='flag-5'>DS</b>1920 iButton<b class='flag-5'>温度</b>记录仪技术手册

    基于FPGA的温度传感器(ds18b20)驱动设计

    本篇主要讨论基于FPGA的温度传感器(ds18b20)驱动设计---第一版 设计实现:利用FPGA驱动DS18b20读取温度数值显示到数
    的头像 发表于 01-16 14:08 2041次阅读
    基于FPGA的<b class='flag-5'>温度</b>传感器(<b class='flag-5'>ds18b20</b>)驱动设计

    【正点原子STM32H7R3开发套件试用体验】DS18B20、DHT11温湿度采集

    错误。 检测到 DS18B20 后,开始读取温度,显示在 LCD,每隔 100ms 读取并显示,串口发送温度值。 LED0 闪烁,指示程序运
    发表于 01-01 11:16

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

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

    DS18B20数字温度传感器资料包

    111
    发表于 12-16 11:28 4次下载