博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
总结:如何驱动DS18B20温度传感器
阅读量:6684 次
发布时间:2019-06-25

本文共 2831 字,大约阅读时间需要 9 分钟。

DS18B20时序分析:

以下是STM32的驱动代码:

#include "bsp_ds18b20.h"static void DS18B20_GPIO_Config(void){				GPIO_InitTypeDef GPIO_InitStructure;		RCC_APB2PeriphClockCmd(DS18B20_CLK, ENABLE); 															     	GPIO_InitStructure.GPIO_Pin = DS18B20_PIN;	  	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   	GPIO_Init(DS18B20_PORT, &GPIO_InitStructure);			GPIO_SetBits(DS18B20_PORT, DS18B20_PIN);	 }static void DS18B20_Mode_IPU(void){ 	  GPIO_InitTypeDef GPIO_InitStructure;		  GPIO_InitStructure.GPIO_Pin = DS18B20_PIN;	  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;		  GPIO_Init(DS18B20_PORT, &GPIO_InitStructure);}static void DS18B20_Mode_Out_PP(void){ 	GPIO_InitTypeDef GPIO_InitStructure;															     	GPIO_InitStructure.GPIO_Pin = DS18B20_PIN;	  	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  	GPIO_Init(DS18B20_PORT, &GPIO_InitStructure);}static void DS18B20_Rst(void){		DS18B20_Mode_Out_PP();		DS18B20_DATA_OUT(LOW);	Delay_us(750);		DS18B20_DATA_OUT(HIGH);		Delay_us(15);}static uint8_t DS18B20_Presence(void){	uint8_t pulse_time = 0;		DS18B20_Mode_IPU();		while( DS18B20_DATA_IN() && pulse_time<100 )	{		pulse_time++;		Delay_us(1);	}		if( pulse_time >=100 )		return 1;	else		pulse_time = 0;		while( !DS18B20_DATA_IN() && pulse_time<240 )	{		pulse_time++;		Delay_us(1);	}		if( pulse_time >=240 )		return 1;	else		return 0;}static uint8_t DS18B20_Read_Bit(void){	uint8_t dat;		DS18B20_Mode_Out_PP();	DS18B20_DATA_OUT(LOW);	Delay_us(10);		DS18B20_Mode_IPU();	//Delay_us(2);		if( DS18B20_DATA_IN() == SET )		dat = 1;	else		dat = 0;		Delay_us(45);		return dat;}uint8_t DS18B20_Read_Byte(void){	uint8_t i, j, dat = 0;			for(i=0; i<8; i++) 	{		j = DS18B20_Read_Bit();				dat = (dat) | (j<
>1; if (testb) { DS18B20_DATA_OUT(LOW); Delay_us(8); DS18B20_DATA_OUT(HIGH); Delay_us(58); } else { DS18B20_DATA_OUT(LOW); /* 60us < Tx 0 < 120us */ Delay_us(70); DS18B20_DATA_OUT(HIGH); Delay_us(2); } }}void DS18B20_Start(void){ DS18B20_Rst(); DS18B20_Presence(); DS18B20_Write_Byte(0XCC); DS18B20_Write_Byte(0X44); }uint8_t DS18B20_Init(void){ DS18B20_GPIO_Config(); DS18B20_Rst(); return DS18B20_Presence();}float DS18B20_Get_Temp(void){ uint8_t tpmsb, tplsb; short s_tem; float f_tem; DS18B20_Rst(); DS18B20_Presence(); DS18B20_Write_Byte(0XCC); DS18B20_Write_Byte(0X44); DS18B20_Rst(); DS18B20_Presence(); DS18B20_Write_Byte(0XCC); DS18B20_Write_Byte(0XBE); tplsb = DS18B20_Read_Byte(); tpmsb = DS18B20_Read_Byte(); s_tem = tpmsb<<8; s_tem = s_tem | tplsb; if( s_tem < 0 ) f_tem = (~s_tem+1) * 0.0625; else f_tem = s_tem * 0.0625; return f_tem; }/*************************************END OF FILE******************************/

你可能感兴趣的文章
电子邮件传输之SMTP协议
查看>>
AD域用户登录验证
查看>>
如何部署AD站点
查看>>
CISCO路由器常用命令
查看>>
mysql表行转列的用法
查看>>
基于Groovy实现Spring Bean的动态加载
查看>>
Cordova 创建插件
查看>>
什么是geohash(地理散列)
查看>>
关于iOS 5 Could not instantiate class named NSLayoutConstraint错误
查看>>
ITFriend开发日志20140611
查看>>
Jenkins 安装和配置
查看>>
Ubuntu下Fastdfs的安装
查看>>
【一条mysql语句查询top数据】
查看>>
一、Windows Server 2012R2 Hyper-v安装部署
查看>>
Linux下安装Oracle11g服务器
查看>>
PullToRefreshListView 应用讲解
查看>>
git版本控制开发流程小结笔记(一)
查看>>
理解 Backbone.js中的bind和bindAll
查看>>
AD恢复误删除账号
查看>>
How to Create a Node.js Cluster for Speeding Up Your Apps
查看>>