普中STM32-PZ6806L开发板(HAL库函数实现-温度传感器DS18B20)

简介

主芯片STM32F103ZET6, 通过引脚PG11 连接DS18B20, 读取DS18B20采集的温度数据;

电路原理图

DS18B20电路图
在这里插入图片描述
DS18B20 与 主芯片连接引脚
在这里插入图片描述

其他知识

DS18B20资料

DS18B20数据手册

DS18B20 简介

单线通讯的温度传感器,
测量温度在-55℃ 到 +125℃,
在-10°C 到 +85°C精度±0.5°C,
9~12bit 可设定分辨率,
默认12bit分辨率,
12bit分辨率下温度转化时间在最长是750ms,
温度值存在DS18B20 ROM中是补码的形式存储, 负值需要 取反 + 1才能得到原码

实现步骤

时序图中设计到的采集数据时有进行us级别的延时, 需要将系统改成us级别或者定义一个TIMER作为us级别的延时器

创建项目

参考 普中STM32-PZ6806L开发板(STM32CubeMX创建项目并点亮LED灯)

TIM2 实现us级别延时

参考 普中STM32-PZ6806L开发板(HAL库函数实现-TIM2实现us延时)

引脚初始化

默认初始化为输出
在这里插入图片描述

添加用户代码

引脚输入输出变动代码

引脚涉及到 输入 和 输出, 所以我们需要在代码里面实现输入和输出可以切换的方式, 代码如下

	static void SENSOR_DS18B20_SetPinInput(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
{GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.Pin = GPIO_Pin;GPIO_InitStruct.Mode = GPIO_MODE_INPUT;GPIO_InitStruct.Pull = GPIO_NOPULL;HAL_GPIO_Init(GPIOx, &GPIO_InitStruct);
}static void SENSOR_DS18B20_SetPinOutput(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
{GPIO_InitTypeDef  GPIO_InitStruct;GPIO_InitStruct.Pin = GPIO_Pin;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;HAL_GPIO_Init(GPIOx, &GPIO_InitStruct);
}
初始化时序代码

在这里插入图片描述

/*SENSOR_DS18B20_Reset :初始化,也是复位, 每次发送指令前的动作0 : 初始化失败1 : 初始化成功
*/
static uint8_t SENSOR_DS18B20_Reset(void)
{uint8_t res = 0;SENSOR_DS18B20_SetPinOutput(DS18B20_PORT, DS18B20_PIN);   // 引脚输出模式HAL_GPIO_WritePin (DS18B20_PORT, DS18B20_PIN, 0);  // 拉低引脚delay_us (480);   // 参考初始化时序图, 延时480usSENSOR_DS18B20_SetPinInput(DS18B20_PORT, DS18B20_PIN);    // set the pin as inputdelay_us (60);    // 15~60us等待DS18B20回复信息, 多等20us避免检测不到if ( !HAL_GPIO_ReadPin(DS18B20_PORT, DS18B20_PIN) )res = 1;  // 检测到低电平,  DS18B20有响应else res = 0;delay_us (420); // 等待DS18B20结束响应return res;
}
读写时序代码

在这里插入图片描述

void SENSOR_DS18B20_Write(uint8_t data)
{/*按位写, 根据时序图, 按照写的 高电平的时序 和 低电平的时序进行延时*/for (int i = 0; i < 8; ++i){if ((data & (1<<i))!=0) // 写1{SENSOR_DS18B20_SetPinOutput(DS18B20_PORT, DS18B20_PIN);  HAL_GPIO_WritePin(DS18B20_PORT, DS18B20_PIN, 0);  // 拉低delay_us (2);  // 低电平保持时间SENSOR_DS18B20_SetPinInput(DS18B20_PORT, DS18B20_PIN);  // 输入delay_us (60);  // 等待}else // 写0{SENSOR_DS18B20_SetPinOutput(DS18B20_PORT, DS18B20_PIN);HAL_GPIO_WritePin (DS18B20_PORT, DS18B20_PIN, 0);  // 拉低delay_us (60);  // 等待60usSENSOR_DS18B20_SetPinInput(DS18B20_PORT, DS18B20_PIN); // 输入}}
}uint8_t SENSOR_DS18B20_Read (void)
{uint8_t value = 0;for (int i=0;i<8;i++){SENSOR_DS18B20_SetPinOutput(DS18B20_PORT, DS18B20_PIN);HAL_GPIO_WritePin(DS18B20_PORT, DS18B20_PIN, 0);  // 拉低delay_us(2);  // 拉低电平等待时间SENSOR_DS18B20_SetPinInput(DS18B20_PORT, DS18B20_PIN);if (HAL_GPIO_ReadPin (DS18B20_PORT, DS18B20_PIN))  {value |= 1<<i;  }delay_us (60);  // DS18B20数据响应时间}return value;
}
获取温度值
float SENSOR_DS18B20_GetTemperature(void)
{uint8_t lsb_byte, msb_byte;uint16_t temp = 0;float value = 0.0;SENSOR_DS18B20_Reset ();HAL_Delay (1);SENSOR_DS18B20_Write (0xCC);  // skip ROMSENSOR_DS18B20_Write (0x44);  // convert tHAL_Delay (800); // 12bit分辨率最长转换时间750msSENSOR_DS18B20_Reset ();HAL_Delay (1);SENSOR_DS18B20_Write (0xCC);  // skip ROMSENSOR_DS18B20_Write (0xBE);  // 读值指令lsb_byte = SENSOR_DS18B20_Read(); // LSBmsb_byte = SENSOR_DS18B20_Read(); // MSBtemp = msb_byte;temp = (temp<<8) + lsb_byte; // 合并if((temp&0xf800)==0xf800) // 符号位判定是否负数{temp=(~temp)+1; // 补码转原码value=temp*(-0.0625); //12bit 增量值}else{value=temp*0.0625;	//12bit 增量值}return value;
}

main.c

int main()
{
...while (1){printf("sensors temp: %f\r\n", SENSOR_DS18B20_GetTemperature());HAL_Delay(2000);}
...
}

共赏

在这里插入图片描述

代码

不需要下载, 基本代码上面都提供了

参考

普中STM32-PZ6806L开发板(HAL库函数实现-批量操作GPIO引脚实现跑马灯)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/594760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

平衡二叉树,力扣

目录 前序遍历与后续遍历 题目地址&#xff1a; 题目&#xff1a; 我们直接看题解吧&#xff1a; 审题目事例提示&#xff1a; 解题方法&#xff1a; 难度分析&#xff1a; 解题方法分析&#xff1a; 解题分析&#xff1a; 解题思路&#xff1a; 代码实现&#xff1a; 补充说明…

【每日论文阅读】生成模型篇

联邦多视图合成用于元宇宙 标题: Federated Multi-View Synthesizing for Metaverse 作者: Yiyu Guo; Zhijin Qin; Xiaoming Tao; Geoffrey Ye Li 摘要: 元宇宙有望提供沉浸式娱乐、教育和商务应用。然而&#xff0c;虚拟现实&#xff08;VR&#xff09;在无线网络上的传输是…

【UEFI基础】EDK网络框架(通用函数和数据)

通用函数和数据 DPC DPC全称Deferred Procedure Call。Deferred的意思是“延迟”&#xff0c;这个DPC的作用就是注册函数&#xff0c;然后在之后的某个时刻调用&#xff0c;所以确实是有“延迟”的意思。DPC在UEFI的实现中包括两个部分。一部分是库函数DxeDpcLib&#xff0c;…

数字IC设计——数字电路基本元器件

现代数字集成电路基本由CMOS晶体管构成&#xff0c;而CMOS门电路由PMOS场效应管和NMOS场效应管以对称互补的形式组成&#xff0c;所谓“互补”&#xff0c;即利用互补型MOSFET&#xff0c;即pMOS和nMOS&#xff0c;二者成对出现构成互补电路。 这种电路具有高的电路可靠性和抗干…

Mysql show Profiles详解

1.简介 show profile 和 show profiles 命令用于展示SQL语句的资源使用情况&#xff0c;包括CPU的使用&#xff0c;CPU上下文切换&#xff0c;IO等待&#xff0c;内存使用等&#xff0c;这个命令对于分析某个SQL的性能瓶颈非常有帮助&#xff0c;借助于show profile的输出信息&…

力扣hot100 二叉树的直径

&#x1f468;‍&#x1f3eb; 题目地址 一个节点的最大直径 它左树的深度 它右树的深度 &#x1f60b; AC code /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* Tr…

[Android]RadioButton控件

RadioButton控件 RadioButton控件是单选按钮控件&#xff0c;它继承自Button控件&#xff0c;可以直接使用Button控件支持的各种属性和方法。 与普通按钮不同的是&#xff0c;RadioButton控件多了一个可以选中的功能&#xff0c;能额外指定一个android&#xff1a;checked属性…

手机视频监控客户端APP如何实现跨安卓、苹果和windows平台,并满足不同人的使用习惯

目 录 一、手机视频监控客户端的应用和发展 二、手机视频监控客户端存在的问题 三、HTML5视频监控客户端在手机上实现的方案 &#xff08;一&#xff09;HTML5及其优点 &#xff08;二&#xff09;HTML5在手机上实现视频应用功能的优势 四、手机HTML5…

【数据结构】循环队列(数组实现)

目录 一、循环队列定义 怎么使一个数组在逻辑上呈“环状”呢&#xff1f; 二、循环队列与顺序队列的差异 1、存储方式: 2、操作方式: 3、空间利用率&#xff1a; 4、循环队列判断队空的方式&#xff1a; 5、循环队列判断队满的方式 完整测试代码及注释&#xff1a; 总…

axure RP9.0安装字体图标库fontawesome

字体图库地址: Font AwesomeThe internets icon library toolkit. Used by millions of designers, devs, & content creators. Open-source. Always free. Always awesome.https://fontawesome.com/v6/download进入后下载想要的版本如我是6.3 下载后得到压缩包,解压之后…

机器学习笔记 - 从2D数据合成3D数据

一、3D 数据简介 人们一致认为,从单一角度合成 3D 数据是人类视觉的一项基本功能,这对计算机视觉算法来说极具挑战性。但随着 LiDAR、RGB-D 相机(RealSense、Kinect)和 3D 扫描仪等 3D 传感器的可用性和价格的提高,3D 采集技术的最新进展取得了巨大飞跃。 与广泛使用的 2D…

Mybatis-Plus乐观锁配置使用流程【OptimisticLockerInnerInterceptor】

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家:人工智能学习网站 1.乐观锁实现 1.配置插件 1.XML方式 <bean class"com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerI…

C# .Net 开发设计多用户网上商城源码_OctShop

随着C#在TIOBE编程语言排行不断上升&#xff0c;这也标志着越来越多的程序员开始使用C#来开发项目了。在TIOBE2023年10月公布的排行中&#xff0c;C#和Java之间的差距越来越小了&#xff0c;仅为1.2%&#xff0c;随着C# .NetCore的免费开源&#xff0c;这一上升的趋势越来越明显…

MySQL视图特性

目录 视图概念基本使用创建视图修改视图会影响基表修改基表会影响视图删除视图 视图规则和限制 视图概念 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表&#xff0c;基表的数据变…

Python 编写代码的工具-交互式环境

交互式环境意思就是我们输入一行代码&#xff0c;按回车&#xff0c;代码就会立马执行并产生结果和显示在窗口中。 要打开Python交互式环境&#xff0c;具体操作如下&#xff08;win系统&#xff09;&#xff1a; 键盘WINR&#xff0c;再输入指令“cmd”,就可以打开命令提示符…

win下持续观察nvidia-smi

简介&#xff1a;在Windows操作系统中&#xff0c;没有与Linux中watch命令直接对应的内置工具&#xff0c;但有1种方法快速简单的方法可以实现类似的效果&#xff0c;尤其是用于监控类似于nvidia-smi的命令输出。 历史攻略&#xff1a; Python&#xff1a;查看windows下GPU的…

数据库攻防学习之MySQL

MySQL 0x01mysql学习 MySQL 是瑞典的MySQL AB公司开发的一个可用于各种流行操作系统平台的关系数据库系统&#xff0c;它具有客户机/服务器体系结构的分布式数据库管理系统。可以免费使用使用&#xff0c;用的人数很多。 0x02环境搭建 这里演示用&#xff0c;phpstudy搭建的…

华为端口隔离高级用法经典案例

最终效果&#xff1a; pc4不能ping通pc5&#xff0c;pc5能ping通pc4 pc1不能和pc2、pc3通&#xff0c;但pc2和pc3能互通 vlan batch 2 interface Vlanif1 ip address 10.0.0.254 255.255.255.0 interface Vlanif2 ip address 192.168.2.1 255.255.255.0 interface MEth0/0/1 i…

基于SSM的校园快递管理系统

目录 前言 开发环境以及工具 项目功能介绍 学生&#xff1a; 管理员&#xff1a; 详细设计 获取源码 前言 本项目是一个基于IDEA和Java语言开发的基于SSM的校园快递管理系统应用。应用包含学生端和管理员端等多个功能模块。 欢迎使用我们的校园快递管理系统&#xff01;我…

厦门大学OpenHarmony技术俱乐部开创“1+N”新模式,加速推动产学研融合

12月29日,OpenHarmony技术俱乐部再添重将——在多方见证下,厦门大学OpenHarmony技术俱乐部在翔安校区益海嘉里楼报告厅正式揭牌成立,现场出席领导及师生代表近千人。 成立仪式现场 OpenHarmony技术俱乐部 携手厦门大学共绘开源生态新图景 OpenHarmony是由开放原子开源基金…