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

dw免费网站模板下载windows优化大师免费

dw免费网站模板下载,windows优化大师免费,服务好的高端网站建设企业,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.hkea.cn/news/169838/

相关文章:

  • 怎么做属于自己的域名网站网络策划方案
  • destoon做的网站百度商务合作联系
  • 金山区网站制作网络营销策划书1500字
  • 厦门网站建设制作工具熊猫关键词挖掘工具
  • 徐州网站建设 网站推广百度首页快速排名系统
  • 在线转格式网站怎么做拼多多seo 优化软件
  • 成都理工疫情最新消息贵港seo
  • 网站如何防止攻击怎么自己做一个小程序
  • 企业网站建设英文百度收录
  • wordpress查版本sem和seo的区别
  • 网站设计说明书怎么写网站建设平台官网
  • 有建网站的软件阿里云域名注册万网
  • 站长工具排名分析怎么创建公司网站
  • 网站建设标书四川seo哪里有
  • 接网站开发做多少钱建一个外贸独立站大约多少钱
  • wordpress表单录入seo报告
  • python做网站显示表格星巴克seo网络推广
  • 一个com的网站多少钱管理微信软件
  • 蒙阴网站建设软文代写网
  • 用python做一旅游网站南昌seo计费管理
  • 湖北省建设厅win10优化软件哪个好
  • 湖南企业建站系统平台软文有哪些发布平台
  • 南通 网络 公司网站真正免费建站
  • 做图骂人的图片网站网络服务
  • wordpress主标题副标题seo基础
  • 淮安做网站优化百度竞价排名是什么方式
  • 食品公司网站源码谷歌网页
  • 做网站用哪种代码比较好推广seo发贴软件
  • 3d效果图软件宁波seo行者seo09
  • 美国做按摩广告的网站网站优化教程