国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

stm32之DS18B20

這篇具有很好參考價值的文章主要介紹了stm32之DS18B20。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

????????DS18B20與stm32之間也是通過單總線進行數(shù)據(jù)的傳輸?shù)?。單總線協(xié)議在DHT11中已經(jīng)介紹過。雖說這兩者外設都是單總線,但時序電路卻很不一樣,DS18B20是更為麻煩一點的。

DS18B20

stm32之DS18B20,stm32,stm32,嵌入式硬件,單片機

stm32之DS18B20,stm32,stm32,嵌入式硬件,單片機

stm32之DS18B20,stm32,stm32,嵌入式硬件,單片機

stm32之DS18B20,stm32,stm32,嵌入式硬件,單片機

stm32之DS18B20,stm32,stm32,嵌入式硬件,單片機

stm32之DS18B20,stm32,stm32,嵌入式硬件,單片機

stm32之DS18B20,stm32,stm32,嵌入式硬件,單片機

stm32之DS18B20,stm32,stm32,嵌入式硬件,單片機

?舉例(原碼補碼反碼轉換_原碼反碼補碼轉換_王小小鴨的博客-CSDN博客):

stm32之DS18B20,stm32,stm32,嵌入式硬件,單片機

?將這兩個字節(jié)的數(shù)值轉換為溫度,最低位有效,當為大于零的數(shù)時,將實際的溫度值的二進制放在里面,權值為0的成為權值為2^4,所以后續(xù)乘以0.0625即可,即可得到實際值。

DS18B20的工作步驟

stm32之DS18B20,stm32,stm32,嵌入式硬件,單片機

?初始化DS18B20

寫時序

stm32之DS18B20,stm32,stm32,嵌入式硬件,單片機

stm32之DS18B20,stm32,stm32,嵌入式硬件,單片機

?讀時序

stm32之DS18B20,stm32,stm32,嵌入式硬件,單片機

?代碼

#ifndef __DS18B20_H
#define __DS18B20_H 
#include "system.h"   

#define u8 unsigned char 

//IO方向設置,利用寄存器的方法對IO口的輸入輸出進行配置
#define DS18B20_IO_IN()  {GPIOG->CRH&=0XFFFF0FFF;GPIOG->CRH|=8<<12;}
#define DS18B20_IO_OUT() {GPIOG->CRH&=0XFFFF0FFF;GPIOG->CRH|=3<<12;}
//IO操作函數(shù)											   
#define	DS18B20_DQ_OUT PGout(11) //數(shù)據(jù)端口	PG11
#define	DS18B20_DQ_IN  PGin(11)  //數(shù)據(jù)端口	PG11 
   	
u8 DS18B20_Init(void);//初始化DS18B20
short DS18B20_Get_Temp(void);//獲取溫度
void DS18B20_Start(void);//開始溫度轉換
void DS18B20_Write_Byte(u8 dat);//寫入一個字節(jié)
u8 DS18B20_Read_Byte(void);//讀出一個字節(jié)
u8 DS18B20_Read_Bit(void);//讀出一個位
u8 DS18B20_Check(void);//檢測是否存在DS18B20
void DS18B20_Rst(void);//復位DS18B20   

#endif
#include "ds18b20.h"
#include "SysTick.h"

//復位DS18B20
void DS18B20_Rst(void)	   
{                 
	DS18B20_IO_OUT(); 	//SET PG11 OUTPUT
    DS18B20_DQ_OUT=0; 	//拉低DQ
    delay_us(750);    	//拉低750us
    DS18B20_DQ_OUT=1; 	//DQ=1 
	delay_us(15);     	//15US
}
//等待DS18B20的回應
//返回1:未檢測到DS18B20的存在
//返回0:存在
u8 DS18B20_Check(void) 	   
{   
	u8 retry=0;
	DS18B20_IO_IN();	//SET PG11 INPUT	 
    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讀取一個位
//返回值:1/0
u8 DS18B20_Read_Bit(void) 	 
{
    u8 data;
	DS18B20_IO_OUT();	//SET PG11 OUTPUT
    DS18B20_DQ_OUT=0; 
	delay_us(5);
    DS18B20_DQ_OUT=1; 
	DS18B20_IO_IN();	//SET PG11 INPUT
	delay_us(12);
	if(DS18B20_DQ_IN)data=1;
    else data=0;	 
    delay_us(50); 
    return data;
}
//從DS18B20讀取一個字節(jié)
//返回值:讀到的數(shù)據(jù)
u8 DS18B20_Read_Byte(void)     
{        
    u8 i,j,dat;
    dat=0;
	for (i=1;i<=8;i++) 
	{
        j=DS18B20_Read_Bit();
        dat=(j<<7)|(dat>>1);
    }						    
    return dat;
}
//寫一個字節(jié)到DS18B20
//dat:要寫入的字節(jié)
void DS18B20_Write_Byte(u8 dat)     
 {             
    u8 j;
    u8 testb;
	DS18B20_IO_OUT();	//SET PG11 OUTPUT;
    for (j=1;j<=8;j++) 
	{
        testb=dat&0x01;
        dat=dat>>1;
        if (testb) 
        {
            DS18B20_DQ_OUT=0;	// Write 1
            delay_us(10);                            
            DS18B20_DQ_OUT=1;
            delay_us(80);             
        }
        else 
        {
            DS18B20_DQ_OUT=0;	// Write 0
            delay_us(80);             
            DS18B20_DQ_OUT=1;
            delay_us(10);                          
        }
    }
}
//開始溫度轉換
void DS18B20_Start(void) 
{   						               
    DS18B20_Rst();	   
	DS18B20_Check();	 
    DS18B20_Write_Byte(0xcc);	// skip rom
	//delay_us(5); 
    DS18B20_Write_Byte(0x44);	// convert
} 

//初始化DS18B20的IO口 DQ 同時檢測DS的存在
//返回1:不存在
//返回0:存在    	 
u8 DS18B20_Init(void)
{
 	GPIO_InitTypeDef  GPIO_InitStructure;
 	
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);	 //使能PORTG口時鐘 
	
 	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;				//PORTG.11 推挽輸出
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		  
 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(GPIOG, &GPIO_InitStructure);

 	GPIO_SetBits(GPIOG,GPIO_Pin_11);    //輸出1

	DS18B20_Rst();

	return DS18B20_Check();
}  
//從ds18b20得到溫度值
//精度:0.1C
//返回值:溫度值 (-550~1250) 
short DS18B20_Get_Temp(void)
{
    u8 temp;
    u8 TL,TH;
	short tem;
    DS18B20_Start ();  			// ds1820 start convert
    DS18B20_Rst();
    DS18B20_Check();	 
    DS18B20_Write_Byte(0xcc);	// skip rom
    DS18B20_Write_Byte(0xbe);	// convert	    
    TL=DS18B20_Read_Byte(); 	// LSB   
    TH=DS18B20_Read_Byte(); 	// MSB  
	//printf("TL = %d",TL); 
	//printf("TH = %d",TH);
    if(TH>7)
    {
        TH=~TH;
        TL=~TL; 
        temp=0;					//溫度為負  
    }else temp=1;				//溫度為正	  	  
    tem=TH; 					//獲得高八位
    tem<<=8;    
    tem+=TL;					//獲得低八位
    tem=(float)tem*0.0625;		//轉換  
	
	if(temp)return tem; 		//返回溫度值
	else return -tem;    
}

總結:讓我很困惑的是當精度為9位時候,是乘以0.0625還是0.5,后來我想通了,之所以乘以0.0625是因為為了處理小數(shù)部分,因為它將權值為2^-4的位移到了權值為2^0的位置,相當于擴大了2^4倍,所以為了還原,得除以2^4,即乘以0.0625,所以不管是幾位精度,都是乘以0.0625,只是當精度為12位的時候,相鄰的數(shù)字量轉換得到的模擬量差值為0.0625。當精度為11位時候,最低位是不起作用的,假設為0,所以0000 0000 后面一個輸出為0000 0010,兩者的差值為0000 0010,乘以0.0625就是0.135,也就是精度為0.125。

附錄:

數(shù)字溫度傳感器DS18B20簡介 - 知乎 (zhihu.com)

【藍橋杯單片機11】單總線溫度傳感器DS18B20的基本操作 - - 21ic電子技術開發(fā)論壇

單總線數(shù)字溫度傳感器DS18B20的基本原理及開發(fā)要點-小蜜蜂筆記 (xmf393.com)

【進階強化-01】單總線溫度傳感器DS18B20的基本原理與應用開發(fā)-小蜜蜂筆記 (xmf393.com)文章來源地址http://www.zghlxwxcb.cn/news/detail-683334.html

到了這里,關于stm32之DS18B20的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • STM32F1使用HAL庫驅動DS18B20

    STM32F1使用HAL庫驅動DS18B20

    目錄 DS18B20概述 工程配置 ?命令手冊 單總線協(xié)議 ?初始化時序 ?寫時序 讀時序 讀取溫度 驅動附錄 ?DS18B20是一款單總線(one wire)芯片,因此其DQ引腳與單片機相連的IO口既要是輸入也要是輸出,cubeMX的初始化引腳設置只能選擇其一,這里我們使用手動配置引腳。 先用cubeMX生

    2024年02月04日
    瀏覽(22)
  • STM32CubeMX 讀取DS18B20溫度傳感器數(shù)據(jù)串口打印顯示

    STM32CubeMX 讀取DS18B20溫度傳感器數(shù)據(jù)串口打印顯示

    本文要做的所有工作標題基本都包括了,讀取溫度傳感器的溫度數(shù)值,再通過串口打印到串口助手; 好多博主大神的教程我按步驟做了之后總是出現(xiàn)程序不報錯并且檢測不到傳感器的情況,后來找到原因并且修改后調試正常。 我用的是普中科技的實驗板,主控芯片為STM3210

    2024年02月05日
    瀏覽(20)
  • STM32 Proteus仿真水箱水塔水位溫度控制系統(tǒng)DS18B20 -0065

    STM32 Proteus仿真水箱水塔水位溫度控制系統(tǒng)DS18B20 -0065

    STM32?Proteus仿真水箱水塔水位溫度控制系統(tǒng)DS18B20?-0065 Proteus 仿真小實驗: STM32?Proteus仿真水箱水塔水位溫度控制系統(tǒng)DS18B20?-0065 功能: 硬件組成:STM32F103C8單片機?+LCD1602顯示器+ADC220V轉3.3V電路+DS18B20溫度+多個按鍵(設置溫度和水位)+繼電器模擬加熱+繼電器模擬加水。 1.人工

    2024年02月15日
    瀏覽(20)
  • 通過stm32讀取DS18B20并在顯示屏上顯示溫度值(附源碼)

    通過stm32讀取DS18B20并在顯示屏上顯示溫度值(附源碼)

    使用stm32f103c8t6的芯片,在OLED顯示屏上顯示DS18B20的溫度值。 DS18B20 數(shù)字溫度計提供 9 位溫度讀數(shù),指示器件的溫度信息經(jīng)過單線接口送入 DS18B20 或從 DS18B20 送出, 因此從中央處理器到 DS18B20 僅需連接一條線。?讀、寫和完成溫度變換所需的電源可以由數(shù)據(jù)線本身提供而不需要外

    2024年02月15日
    瀏覽(24)
  • Clion開發(fā)Stm32之溫濕度傳感器(DS18B20)驅動編寫和測試

    Clion開發(fā)Stm32之溫濕度傳感器(DS18B20)驅動編寫和測試

    涵蓋之前文章: Clion開發(fā)STM32之HAL庫GPIO宏定義封裝(最新版) Clion開發(fā)stm32之微妙延遲(采用nop指令實現(xiàn)) Clion開發(fā)STM32之日志模塊(參考RT-Thread) 頭文件 源文件

    2024年02月15日
    瀏覽(51)
  • 【基于STM32F103C8T6的DS18b20溫度檢測系統(tǒng)】

    庫函數(shù)是ST公司針對STM32系列微控制器提供的一套API,可以方便地實現(xiàn)各種功能。下面是一個基于STM32F103C8T6的溫度檢測系統(tǒng)的示例,使用了STM32F10x標準庫函數(shù)。 硬件部分: - STM32F103C8T6微控制器 - 電源模塊 - 溫度傳感器模塊 軟件部分: - Keil C編譯器 - STM32F10x_StdPeriph_Driver庫文件

    2024年01月20日
    瀏覽(24)
  • 【正點原子STM32連載】 第四十二章 DS18B20數(shù)字溫度傳感器實驗 摘自【正點原子】STM32F103 戰(zhàn)艦開發(fā)指南V1.2

    【正點原子STM32連載】 第四十二章 DS18B20數(shù)字溫度傳感器實驗 摘自【正點原子】STM32F103 戰(zhàn)艦開發(fā)指南V1.2

    1)實驗平臺:正點原子stm32f103戰(zhàn)艦開發(fā)板V4 2)平臺購買地址:https://detail.tmall.com/item.htm?id=609294757420 3)全套實驗源碼+手冊+視頻下載地址: http://www.openedv.com/thread-340252-1-1.html# 本章,我們將介紹STM32F103如何讀取外部溫度傳感器的溫度,來得到較為準確的環(huán)境溫度。我們將學習

    2024年02月04日
    瀏覽(24)
  • ESP32設備驅動-OLED顯示單個或多個DS18B20傳感器數(shù)據(jù)

    在本文中,我們將介紹如何ESP32驅動單個或多個DS18B20傳感器,并將DS18B20傳感器數(shù)據(jù)在OLE中顯示。 DS18B20 是一種溫度傳感器,本質上是單線可編程的。 它廣泛用于測量存在于硬環(huán)境中的化學溶液和物質的溫度。 使用此傳感器的優(yōu)勢之一是我們只需要 ESP 板上的一個引腳即可傳

    2024年02月07日
    瀏覽(22)
  • DS18B20與單片機的通信、DS18B20采集溫度、MODBUS協(xié)議、練習框架

    DS18B20與單片機的通信、DS18B20采集溫度、MODBUS協(xié)議、練習框架

    單總線數(shù)字溫度計 異步的半雙工的串行通信 測量范圍從-55℃ ~ +125℃,增量值為0.5℃ 要用DS18B20采集溫度,就要實現(xiàn)與單片機之間的通信,因此有兩個問題 Bus master active low:主機執(zhí)行低電平 DS1820 active low:DS18B20執(zhí)行低電平 Both bus master and DS1820 active low:全都釋放低電平 Resis

    2024年04月16日
    瀏覽(26)
  • DS18B20測量溫度

    DS18B20測量溫度

    一般在使用DS18B20時會按照以下步驟進行溫度轉換并讀?。?1、主機發(fā)送復位脈沖 2、DS18B20響應 3、發(fā)送0xCC命令跳過ROM命令 4、發(fā)送功能命令 5、發(fā)送功能命令0x44啟動溫度轉換 6、判斷溫度轉換是否完成(為讀取1Bit數(shù)據(jù)為1表示完成) 7、下一個初始化序列開始讀取溫度 8、然后按

    2023年04月08日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包