当前位置: 首页 > news >正文

制作闹钟网站厦门百度推广开户

制作闹钟网站,厦门百度推广开户,wordpress 安全防护 插件,山东省招投标信息网1、STM32CubeMx配置IO口 因为DS18B20是单总线,数据接收发送都是这根线,所以单片机配置为开漏上拉输出。 2、定时器配置 因为DS18B20对时序要求比较严格,建议用定时器延时获得微秒延时函数。 总线为48M,分频48,获得1…

1、STM32CubeMx配置IO口

在这里插入图片描述
因为DS18B20是单总线,数据接收发送都是这根线,所以单片机配置为开漏上拉输出。

2、定时器配置

因为DS18B20对时序要求比较严格,建议用定时器延时获得微秒延时函数。
在这里插入图片描述
总线为48M,分频48,获得1us定时时基。

3、头文件

#ifndef __DS18B20_H
#define __DS18B20_H#include "main.h"// 定义DS18B20相关命令
#define DS18B20_CMD_SKIP_ROM        0xCC
#define DS18B20_CMD_CONVERT_T       0x44
#define DS18B20_CMD_READ_SCRATCHPAD 0xBEvoid DS18B20_Init(void);
uint8_t DS18B20_Reset(void);
void DS18B20_StartConv(void);
float DS18B20_GetTemp(void);#endif

4、C文件

#include "ds18b20.h"
#include "tim.h"#define DS18B20_Set(x) 		HAL_GPIO_WritePin(DS18B20_GPIO_Port, DS18B20_Pin, (GPIO_PinState)(x))
#define DS18B20_Get()	 	HAL_GPIO_ReadPin(DS18B20_GPIO_Port, DS18B20_Pin)void DS18B20_WriteByte(uint8_t byte);
uint8_t DS18B20_ReadByte(void);/*****************************************************************************
* 说明:DS18B20的微秒延时函数
* 输入:_usTime时间
* 输出:无
*****************************************************************************/
static void DS18B20_DelayUs(uint16_t _usTime)
{__HAL_TIM_SetCounter(&htim1,0);__HAL_TIM_ENABLE(&htim1);while(__HAL_TIM_GetCounter(&htim1) < _usTime);__HAL_TIM_DISABLE(&htim1);
}/*****************************************************************************
* 说明:复位并检测DS18B20的存在
* 主机和DS18B20做任何通讯前都需要对其初始化。
* 初始化期间,总线控制器拉低总线并保持480us以上挂在总线上的器件将被复位,
* 然后释放总线,等到15-60us,此时18B20将返回一个60-240us之间的低电平存在信号。
* 输入:无
* 输出:1=存在,0=不存在
*****************************************************************************/
uint8_t DS18B20_Reset(void)
{uint8_t presence = 0;// 拉低总线DS18B20_Set(0);DS18B20_DelayUs(600);// 释放总线DS18B20_Set(1);DS18B20_DelayUs(60);// 检测DS18B20响应presence = DS18B20_Get();DS18B20_DelayUs(240);return !presence;
}/*****************************************************************************
* 说明:复位DS18B20* 输入:无
* 输出:无
*****************************************************************************/
void DS18B20_Init(void)
{// 复位DS18B20DS18B20_Reset();// 发送跳过ROM命令DS18B20_WriteByte(DS18B20_CMD_SKIP_ROM);
}/*****************************************************************************
* 说明:发送一个字节给DS18B20
* 1.总线控制器要产生一个写时序,必须将总线拉低最少1us,
* 2.产生写0时序时总线必须保持低电平60~120us之间,然后释放总线,
* 3.产生写1时序时在总线产生写时序后的15us内允许把总线拉高。
* 4.注意:2次写周期之间至少间隔1us
* 输入:无
* 输出:无
*****************************************************************************/
void DS18B20_WriteByte(uint8_t byte)
{for (uint8_t i = 0; i < 8; i++){// 发送低位DS18B20_Set(0);DS18B20_DelayUs(2);// 发送高位,根据byte的第i位来决定if (byte & (1 << i)){DS18B20_Set(1);}DS18B20_DelayUs(60);// 释放总线DS18B20_Set(1);}
}/*****************************************************************************
* 说明:从DS18B20读取一个字节
* 1.总线控制器要产生一个读时序,必须将总线拉低至少1us,
* 2.然后释放总线,在读信号开始后15us内总线控制器采样总线数据,读一位数据至少保持在60us以上。
* 3.注意:2次读周期之间至少间隔1us
* 输入:无
* 输出:无
*****************************************************************************/
uint8_t DS18B20_ReadByte(void)
{uint8_t byte = 0;for (uint8_t i = 0; i < 8; i++){// 发送低位DS18B20_Set(0);DS18B20_DelayUs(2);// 释放总线DS18B20_Set(1);DS18B20_DelayUs(8);// 读取高位数据if (DS18B20_Get()){byte |= (1 << i);}DS18B20_DelayUs(50);}return byte;
}/*****************************************************************************
* 说明:启动DS18B20转换
* 输入:无
* 输出:无
*****************************************************************************/
void DS18B20_StartConv(void)
{DS18B20_Init();// 发送温度转换命令DS18B20_WriteByte(DS18B20_CMD_CONVERT_T);	
}/*****************************************************************************
* 说明:读取DS18B20温度
* 1.温度精度及转换时间表
--------------------------------------
R1	R0	精度	最大转换时间	温度LSB
--------------------------------------
0	0	9bit	93.75ms			0.5℃
0	1	10bit	187.5ms			0.25℃
1	0	11bit	375ms			0.125℃
1	1	12bit	750ms			0.0625℃
--------------------------------------
* 输入:无
* 输出:浮点型温度数据
*****************************************************************************/
float DS18B20_GetTemp(void)
{// 复位DS18B20并跳过ROMDS18B20_Init();// 发送读取寄存器命令DS18B20_WriteByte(DS18B20_CMD_READ_SCRATCHPAD);// 读取温度数据uint8_t tempLow = DS18B20_ReadByte();uint8_t tempHigh = DS18B20_ReadByte();// 计算温度值int16_t temp = (tempHigh << 8) | tempLow;float temperature = (float)temp / 16.0f;/*0.0625℃*/return temperature;
}

5、使用方法

使用“void DS18B20_StartConv(void)”函数启动转换,因为转换时间需要750ms(12Bit精度),所以隔1秒后,使用“float DS18B20_GetTemp(void)”函数获取温度。
在这里插入图片描述

http://www.yayakq.cn/news/370088/

相关文章:

  • 北京专业企业网站建设免费查询企业信息的软件
  • 广州网站制作(信科网络)提升学历机构
  • 网站开发 外文文献安徽做网站的公司有哪些
  • 营销型网站(易网拓)做文明人网站专题
  • 企业网站的好处北京设计公司招聘信息
  • 黄浦建设机械网站网站域名申请
  • 底湘西网站制作做不规则几何图形的网站
  • 网站建设招标文件技术部分如何在个人电脑用源码做网站
  • aws网站建设网站建设背景怎么设置成
  • 网站免费的阿里云服务起做网站
  • 下载类网站如何做国内常用erp系统有哪几种
  • 成都网站建设小程序庄浪县住房和城乡建设局网站
  • 网站开发项目介绍深圳网站制作专业公司
  • 彩票类网站开发厦门网站建设培训班
  • 招聘类网站怎么做Wordpress支付时效
  • 网站做担保交易平台wordpress 虾米页面
  • 国家住房部和城乡建设部 网站首页西安互联网推广公司
  • 国外有哪做交互设计网站哪个网站的域名到期直接注册
  • 龙岩做网站公司phpstudy怎么做网站
  • 360网站卖东西怎么做的做网站的可以黑客户的网站吗
  • 注销建设工程规划许可证在哪个网站如何在自己公司的网站上做宣传
  • 开发一套小程序需要多少钱360网站seo手机优化软件
  • php整站开发 企业网站教程中国空间站组合体
  • 锦州做网站哪家好个人做网站多少钱
  • 爱站工具官网关于网站建设的调查报告
  • iis 添加网站深圳百度推广关键词推广
  • 运动网站设计如何提升网站百度权重
  • 网站推广与宣传怎么做网站建设前端后端
  • 学做面包网站广西建设官方网站
  • 德阳网站建设平台苏州基础网站建设