stm32 使用18B20 测试温度
用18b20 测试温度是非常常用的,不过18B20的调试不是这么容易的,有些内容网上很多的,不再重复说了,我先把波形说一下,再说程序部分:

整个都温度数据的顺序是:
1.700uS的低电平复位并测试18B20的低电平响应

2.主机发送0xCC,0x44两个字节,表示跳过地址,只有一个18B20就不需要地址

3.再次复位
4.发送0xCC,0xBE,两个字节让它转换温度

5.读取2个字节,这两个字节就是温度了。

6.这两个字节乘0.625就是温度了。
有一点说明一下,主机输出用GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;用开漏不行。
代码贴一下:
void b12_18b20_in()
{GPIO_InitStruct.Pin = GPIO_PIN_12;GPIO_InitStruct.Mode = GPIO_MODE_INPUT;GPIO_InitStruct.Pull = GPIO_PULLUP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
void b12_18b20_out()
{GPIO_InitStruct.Pin = GPIO_PIN_12;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_PULLUP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
管脚自己注意一下
#define DS18B20_DQ_OUT0 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET)
#define DS18B20_DQ_OUT1 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET)#define DS18B20_DQ_IN HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_12)
void DS18B20_Reset(void)
{//设置DS18B20为输出模式b12_18b20_out();//拉低总线480-960usDS18B20_DQ_OUT0;delay_us(660);//释放总线15-60usDS18B20_DQ_OUT1;delay_us(15);
}//等待DS18B20的回应
//返回1:未检测到DS18B20的存在 返回0:存在
uint8_t DS18B20_Check(void)
{uint8_t retry = 0;b12_18b20_in(); //设置为输入while (DS18B20_DQ_IN&&retry<200){retry++;delay_us(1);};if(retry>=200)return 1;else retry=0;while (!DS18B20_DQ_IN&&retry<240){retry++;delay_us(1);};if(retry>=240)return 1;return 0;
}//写一个字节到DS18B20
//dat:要写入的字节
void DS18B20_Write_Byte(uint8_t dat){uint8_t j;uint8_t testb;b12_18b20_out(); //设置为输出for (j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if (testb) //输出高{DS18B20_DQ_OUT0; //输出低电平delay_us(2); //延时2usDS18B20_DQ_OUT1; //输出高电平delay_us(60); //延时60us}else //输出低{DS18B20_DQ_OUT0; //输出低电平delay_us(60); //延时60usDS18B20_DQ_OUT1; //输出高电平delay_us(2); //延时2us}}
}//从DS18B20读取一个位
//返回值:1/0
uint8_t DS18B20_Read_Bit(void) //读一位
{uint8_t data;b12_18b20_out(); //设置为输出DS18B20_DQ_OUT0; //输出低电平delay_us(2);DS18B20_DQ_OUT1; //拉高b12_18b20_in(); //设置为输入delay_us(12); //延时12usif(DS18B20_DQ_IN)data=1; //读取总线数据else data=0;delay_us(50); //延时50usreturn data;
}//从DS18B20读取一个字节
//返回值:读到的数据
uint8_t DS18B20_Read_Byte(void) //读一字节
{uint8_t i,j,dat;dat=0;for (i=1;i<=8;i++){j=DS18B20_Read_Bit();dat=(j<<7)|(dat>>1);}return dat;
}void DS18B20_start()
{DS18B20_Reset();DS18B20_Check();DS18B20_Write_Byte(0xCC);DS18B20_Write_Byte(0x44);
}short Get_temp(void){uint8_t temp;short tem;DS18B20_start();DS18B20_Reset();DS18B20_Check();DS18B20_Write_Byte(0xCC);DS18B20_Write_Byte(0xBE);uint8_t TL = DS18B20_Read_Byte();uint8_t TH = DS18B20_Read_Byte();if( TH > 7 ){temp = 0; //温度为负TH = ~TH;TL = ~TL;}else{temp = 1; //温度为正}tem = TH;tem <<= 8;tem += TL;//printf("=== %f\r\n", tem);tem = tem * 6.25;if(temp == 1){return tem;}else{return ~tem;}}
输出
short temp = Get_temp();uint16_t t = temp ;printf("wendu = %02d.%02d\r\n" , t/100, t%100);
因为浮点数直接打印有点问题,现在这样如果有负问题可能存在问题,自己注意一下。
使用了short。
us延时函数看我的前面一篇文章。
相关文章:
stm32 使用18B20 测试温度
用18b20 测试温度是非常常用的,不过18B20的调试不是这么容易的,有些内容网上很多的,不再重复说了,我先把波形说一下,再说程序部分: 整个都温度数据的顺序是: 1.700uS的低电平复位并测试18B20的…...
【Delphi】一个函数实现ios,android震动功能 Vibrate(包括3D Touch 中 Peek 震动等)
一、前言 我们在开发移动端APP的时候,有时可能需要APP能够提供震动功能,以便提醒操作者,特别是ios提供的3D Touch触感功能,操作者操作时会有触感震动,给操作者的感觉很友好。那么,在Delphi的移动端FMX开发中…...
国产Type-C PD芯片—接口快充取电芯片
常用USB PDTYPE-C受电端,即设备端协议IC芯片(PD Sink,也叫PD诱骗芯片),诱导取电芯片。 产品介绍 LDR6328: ◇ 采用 SOP-8 封装 ◇ 兼容 USB PD 3.0 规范,支持 USB PD 2.0 ◇ 兼容 QC 3.0 规范&#x…...
pytorch学习6-非线性变换(ReLU和sigmoid)
系列文章目录 pytorch学习1-数据加载以及Tensorboard可视化工具pytorch学习2-Transforms主要方法使用pytorch学习3-torchvisin和Dataloader的使用pytorch学习4-简易卷积实现pytorch学习5-最大池化层的使用pytorch学习6-非线性变换(ReLU和sigmoid)pytorc…...
详解Keras3.0 Models API: Whole model saving loading
1、save方法 Model.save(filepath, overwriteTrue, **kwargs) 将模型另存为.keras文件 参数说明 filepath: 保存模型的路径。必须以.keras结尾overwrite:布尔值,表示是否覆盖已存在的文件。默认为 True,即覆盖已存在的文件。save_format…...
Spring Cloud Gateway 网关的基础使用
1. 什么是网关?网关有什么用? 在微服务架构中,网关就是一个提供统一访问地址的组件,它解决了内部微服务与外部的交互问题。网关主要负责流量的路由和转发,将外部请求引到对应的微服务实例上。同时提供身份认证、授权、…...
小米手机锁屏时间设置为永不休眠_手机不息屏_保持亮屏
环境:打开手机自带的锁屏时间设置发现没有 永不息屏的选项 原因:采用了三星OLED屏幕,所以根据OLED屏幕特性,这个是为了防止烧屏而特意设计的。非OLED机型支持设置“永不” 解决方案1:原生系统是支持永不锁屏的&#…...
lightdb plorasql集合类型新增可变数组
文章目录 背景集合类型可变数组可变数组示例 背景 在信创适配中,从Oracle迁移过来的存储过程使用到可变数组。因此在LightDB-X 23.4版本中对现有的集合类型进行了增强,添加了可变数组类型。 集合类型 在LightDB-X 23.4版本开始plorasql支持的集合类型…...
算法--最短路
这里写目录标题 xmind单源最短路简介所有边权都是正朴素的Dijkstra算法思想例子题解 堆优化版的Dijkstra算法 存在负数权Bellman-Ford算法思想例子题解 spfa算法思想例子题解 spfa判断负环思想例子题解 多源汇最短路简介弗洛伊德算法思想例子题解 小tips xmind 上述中ÿ…...
Linux 定时任务备份MySQL数据库
Linux 定时任务基本知识 crontab yum install crontabs (安装 crontabs) systemctl enable crond (设为开机启动) systemctl start crond(启动crond服务) systemctl status crond (查看状态&a…...
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
文章目录 摘要1. 查询CPU使用率命令:top -bn1 | grep \"Cpu(s)\" | awk {split($0,arr,\" \");print 100-arr[8]}2. 查询内存命令(单位:G):top -bn1 | grep \"KiB Mem\" | awk {split($…...
外观模式 rust和java的实现
文章目录 外观模式介绍实现javarustrust仓库 外观模式 外观模式(Facade Pattern)隐藏系统的复杂性,它为子系统中的一组接口提供一个统一的高层接口,使得这些接口更加容易使用。外观模式通过封装子系统内部的复杂性,提…...
uniapp-hubildx配置
1.配置浏览器 (1)运行》运行到浏览器配置》配置web服务器 (2)选择浏览器安装路径 (3)浏览器安装路径: (3.1) 右键点击图标》属性 (3.2)选择目标&…...
Nginx基础篇:Nginx搭建、Nginx反向代理、文件服务器部署配置。
Nginx Linux系统安装以及反向代理的配置 简介优点nginx 环境安装常用Nginx 命令nginx 文件服务器搭建 简介 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.ru站点…...
什么是TDR(威胁检测与响应)
网络安全是被动和主动方法的混合体。过去,企业往往局限于被动的方法,随着合规性和安全策略越来越受到重视,主动方法也越来越受到关注。与其他行业相比,网络安全是高度动态的,网络安全团队采用任何可以帮助他们优化的新…...
30、pytest入门内容回顾
整体结构 解读与实操 pytest30讲主要从四个方面由浅入深的进行解读, 开始 讲解了pytest的概述,安装前的准备工作(python,pycharm,pytest),运行方式(命令行),断言(assert…...
2023年 - 我的程序员之旅和成长故事
2023年 - 我的程序员之旅和成长故事 🔥 1.前言 大家好,我是Leo哥🫣🫣🫣,今天咱们不聊技术,聊聊我自己,聊聊我从2023年年初到现在的一些经历和故事,我也很愿意我的故事分…...
JMH性能测试
一、JMH JMH,全称Java Microbenchmark Harness(微基准测试框架),是专门用于Java代码微基准测试的一套测试工具API,是由Java虚拟机团队开发的,一般用于代码的性能调优。 BenchMark又叫做基准测试,…...
超完整的mysql安装配置方法(包含idea和navicat连接mysql,并实现建表)
mysql安装配置方法 1、下载mysql2、解压到指定的安装目录3、配置初始化文件my.ini4、配置用户变量和系统变量5、初始化mysql6、安装mysql服务并启动修改密码7、使用idea连接mysql8、使用Navicat可视化工具连接mysql,并实现新建数据库,新建表 1、下载mysq…...
通过仿真理解完整的阵列信号噪声模型
概要 噪声对无线电设备的信号接收会造成影响,是通信、雷达、导航、遥感等工程应用领域中的关键考虑因素。通常认为阵列合成能够提升信噪比,但忽略了这一论断的前提,即不同通道引入的噪声互不相关。但实际应用中,接收的噪声不仅仅包含信道引入的不相关噪声,还包含从外界环…...
Java + Spring实现Hermes Agent之龙虾、Skills、Mcp和沙箱代码执行环境思路
一、记忆管理:短期 长期融合 Spring AI 自带的 InMemoryChatMemoryRepository 进程一重启就清空了,做 Agent 显然不够用。我们参考了 JavaClaw 和 Claude Code 的做法,把记忆分成两层,都落到同一个 workspace 目录下:…...
Adobe-GenP 3.0:破解Adobe创意工具订阅墙的终极解决方案
Adobe-GenP 3.0:破解Adobe创意工具订阅墙的终极解决方案 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 在数字创意领域,Adobe Creative Clo…...
如何快速下载并配置TaoToken命令行工具实现一键接入
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 如何快速下载并配置TaoToken命令行工具实现一键接入 对于需要在本地或服务器环境接入多个大模型的开发者而言,手动配置…...
雷电模拟器+火眼手机取证实战:环境配置与动态分析全链路
1. 这不是“装个模拟器点几下”的活儿,而是手机取证的实战入口很多人第一次听说“用模拟器做手机取证”,第一反应是:这不就是开个安卓虚拟机,连上ADB,然后用各种工具点点点?我早年也这么想,直到…...
稳定的工作_or_冒险的挖洞副业?成年人的选择,从来不是非黑即白
01 — 导语 在互联网时代,“搞副业”成了年轻人对抗焦虑的标配。有人下班跑滴滴,有人周末做博主,而有一群技术极客则选择了一条更硬核的赛道——漏洞挖掘(俗称“挖洞”)。一边是朝九晚五的稳定工作,五险…...
ncmdump终极指南:3分钟学会网易云音乐NCM格式免费解密
ncmdump终极指南:3分钟学会网易云音乐NCM格式免费解密 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经下载了网易云音乐的歌曲,却发现它们都是无法在其他播放器打开的NCM格式?别担心&am…...
RePKG:终极Wallpaper Engine资源解锁与转换工具
RePKG:终极Wallpaper Engine资源解锁与转换工具 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 你是否曾面对Wallpaper Engine精美的动态壁纸,却苦于无法提取…...
视频硬字幕提取工具:如何用5分钟搞定87种语言的字幕提取?
视频硬字幕提取工具:如何用5分钟搞定87种语言的字幕提取? 【免费下载链接】video-subtitle-extractor 视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包含字幕区域…...
JMeter生产级接口测试实战:从环境配置到链路稳定性保障
1. 这不是又一篇“点点点”的JMeter入门指南,而是你真正能跑通、调得稳、查得清的接口测试实战手册很多人点开“JMeter教程”四个字,心里想的是:“不就是录个脚本、加个线程组、看个聚合报告吗?”——结果一上手,HTTP请…...
虚拟化与加密环境下勒索软件检测:基于存储IO模式与XGBoost的鲁棒方案
1. 项目概述:当勒索软件遇上虚拟化与加密在数据安全领域,勒索软件无疑是最具破坏性的威胁之一。它不像传统病毒那样破坏文件,而是通过加密用户数据来勒索赎金,攻击目标从个人电脑蔓延到企业服务器和云环境。传统的防御手段&#x…...
