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

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

    关注

    2541

    文章

    49790

    浏览量

    746654
  • 温度
    +关注

    关注

    2

    文章

    132

    浏览量

    10357
收藏 人收藏

    评论

    相关推荐

    ds18b20温度传感器如何使用

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

    ds18b20温度传感器是什么类型

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

    ds18b20温度传感器和dht11的区别

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

    DS18B20温度传感器工作原理

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

    树莓派Pico上使用DS18B20温度传感器

    DS18B20 温度传感采用单总线的接口方式,与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度
    的头像 发表于 11-21 14:21 1053次阅读
    树莓派Pico上使用<b class='flag-5'>DS18B20</b><b class='flag-5'>温度</b>传感器

    机智云采用MCU方案采集DS18B20温度,一直无法读取数据怎么解决?

    单片机:STC8A8K64S4A12;ESP8266-01 采用机智云的MCU方案,51单片机的程序是自动生成的,基础功能已经实现,但是一直无法读取DS18B20数据,DS18B20控制程序已经验证没有问题,
    发表于 11-06 07:45

    温度传感器DS18B20的电路和能读取正负温度数值的程序介绍

    本文介绍温度传感器DS18B20的电路和能读取正负温度数值的程序(或说明)。日积月累,越来越进步,本文的分享来自查阅与实践,基本已验证成功。
    的头像 发表于 11-02 14:04 1717次阅读
    <b class='flag-5'>温度</b>传感器<b class='flag-5'>DS18B20</b>的电路和能<b class='flag-5'>读取</b>正负<b class='flag-5'>温度</b>数值的程序介绍

    为什么我的定时器一打开DS18B20温度读取不了了 ?

    为什么我的定时器一打开,就影响了DS18B20了呢,温度读取不了了
    发表于 11-01 07:02

    基于STM32最小系统的双DS18B20检测温度并在OLED上显示

    基于STM32最小系统的双DS18B20检测温度并在OLED上显示
    发表于 10-30 15:13 6次下载

    DS18B20可以实现并联测温吗?

    分别读取两个DS18B20温度
    发表于 10-24 07:45

    51单片机DS18B20温度报警器proteus仿真设计_可调上下限

    通过DS18B20温度传感器检测温度并显示在数码管上;
    的头像 发表于 10-17 09:35 2315次阅读
    51单片机<b class='flag-5'>DS18B20</b><b class='flag-5'>温度</b>报警器proteus仿真设计_可调上下限

    DS18B20采样温度的精度可以达到多少?

    DS18B20采样温度的精度可以达到多少
    发表于 10-12 08:14

    DS18B20数字温度计英文规格书

    电子发烧友网站提供《DS18B20数字温度计英文规格书.pdf》资料免费下载
    发表于 09-18 10:59 0次下载

    基于DS18B20的多点测温方案详解

    DS18B20 单线数字温度传感器,多个 DS18B20 可以并联在惟一的单线上,实现多点测温。具体方案主要是以下步骤:
    的头像 发表于 09-15 16:23 3045次阅读
    基于<b class='flag-5'>DS18B20</b>的多点测温方案详解

    DS18B20 数字温度计特点

    一.DS18B20特点 DS18B20 数字温度计提供12位(二进制)温度读数的数字型传感器。传感器仅需要单总线接口与CPU连接,实现信号送入 DS
    的头像 发表于 09-11 11:19 2298次阅读
    <b class='flag-5'>DS18B20</b> 数字<b class='flag-5'>温度</b>计特点