女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32F407入門開發(fā): DS18B20溫度傳感器應(yīng)用

DS小龍哥-嵌入式技術(shù) ? 來源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2022-05-28 13:41 ? 次閱讀

一、DS18B20硬件原理圖與功能介紹

DS18B20是數(shù)字溫度傳感器,單總線接口,讀取溫度只需要一個IO口,還有不同的封裝形式,支持不同的環(huán)境。每個DS18B20還有64位的光刻ROM序列號,支持一個IO口上掛載多個DS18B20時,區(qū)分設(shè)備,也就是支持級聯(lián),非常方便,不費IO口。

下面就介紹在STM32F407上面如果驅(qū)動DS18B20讀取溫度,代碼采用keil編寫,采用多文件的形式,代碼分為3個部分:

  1. DS18B20.c文件,主要是核心函數(shù)的實現(xiàn)。
  2. DS18B20.h文件,函數(shù)的聲明。
  3. main.c文件。主函數(shù),調(diào)用DS18B20讀取文件,并換算之后打印出來。

下面是DS18B20在開發(fā)板上的原理圖:

image.pngimage.png

二、DS18B20核心代碼

2.1 DS18B20.c源碼

#include "ds18b20.h"

/*
函數(shù)功能:DS18b20IO口初始化
硬件連接:PG9
復(fù)用表示自動輸出數(shù)據(jù)
通用表示手動輸出數(shù)據(jù)
*/
void DS18B20_Init(void)
{
	/*1. 開時鐘*/
	RCC->AHB1ENR|=1<<6;//使能PORTG時鐘

	/*2. 初始化IO模式*/
	DS18B20_OUTPUT();	
}


/*
函數(shù)功能:等待DS18B20的回應(yīng)
返回1:未檢測到DS18B20的存在
返回0:存在
*/
u8 DS18B20_Check(void) 	   
{   
	u8 retry=0;
	DS18B20_INPUT()   //設(shè)置DS18B20輸入模式
	while(DS18B20_IN&&retry<200)
	{
		retry++;
		DelayUs(1);
	};	 
	if(retry>=200)return 1;
	else retry=0;
	while(!DS18B20_IN&&retry<240)
	{
		retry++;
		DelayUs(1);
	};
	if(retry>=240)return 1;	    
	return 0;
}


/*
從DS18B20讀取一個字節(jié)
返回值:讀到的數(shù)據(jù)
*/
u8 DS18B20_ReadByte(void)
{        
	u8 i,data=0;
	for(i=0;i<8;i++) 
	{
		DS18B20_OUTPUT();  //初始化為輸出模式
		DS18B20_OUT=0;		 //輸出0 
		DelayUs(2);        
		DS18B20_OUT=1;     //上拉總線電平
		DS18B20_INPUT()    //初始化為輸入模式
		DelayUs(12);
		data>>=1;
		if(DS18B20_IN)
		{
			data|=0x80; 		
		}			
		DelayUs(50);
	}						    
  return data;
}


/*
寫一個字節(jié)到DS18B20
dat:要寫入的字節(jié)
*/
void DS18B20_WriteByte(u8 dat)     
{             
	u8 i;
	DS18B20_OUTPUT(); //初始化IO為輸出模式
	for(i=0;i<8;i++) 
	{
		if(dat&0x01) //先發(fā)低位
		{
			DS18B20_OUT=0;//輸出0
			DelayUs(2);                            
			DS18B20_OUT=1;//輸出1
			DelayUs(60);             
		}
		else 
		{
			DS18B20_OUT=0;//輸出0
			DelayUs(60);             
			DS18B20_OUT=1;//輸出1
			DelayUs(2);                          
		}
		dat>>=1;
	 }
}


/*
從ds18b20得到溫度值
精度:0.1C
返回值:溫度值 (-550~1250) 
*/
short DS18B20_Get_Temp(void)
{
	u16 temp;
	u8 TL,TH;
	DS18B20_OUTPUT(); 
	DS18B20_OUT=0;		//輸出0 //拉低DQ
	DelayUs(750);     //拉低750us
	DS18B20_OUT=1;    //輸出1 //DQ=1 
	DelayUs(15);      //15US	  

	DS18B20_Check();	 
	DS18B20_WriteByte(0xcc); //跳過芯片ID檢測
	DS18B20_WriteByte(0x44); //轉(zhuǎn)換一次溫度

	DS18B20_OUTPUT(); 
	DS18B20_OUT=0;   //輸出0 //拉低DQ
	DelayUs(750);    //拉低750us
	DS18B20_OUT=1;	 //輸出1 //DQ=1 
	DelayUs(15);     //15US
	DS18B20_Check();	 

	DS18B20_WriteByte(0xcc);// 跳過芯片ID檢測
	DS18B20_WriteByte(0xbe);// 讀取轉(zhuǎn)換成功的溫度數(shù)據(jù)
	TL=DS18B20_ReadByte();  // LSB   
	TH=DS18B20_ReadByte();  // MSB  
	temp=((u16)TH<<8)|TL;
	return temp;
}

復(fù)制代碼

DS18B20.h源碼


#ifndef _DS18B20_H
#define _DS18B20_H
#include "stm32f4xx.h"

#include "sys.h"
#include "delay.h"
void DS18B20_Init(void);
short DS18B20_Get_Temp(void);
#define DS18B20_IN PGin(9)
#define DS18B20_OUT PGout(9)

#define DS18B20_INPUT()  \
		{\
			GPIOG->MODER&=~(0x3<<9*2);\
			GPIOG->MODER|=0x0<<9*2;\
			GPIOG->PUPDR&=~(0x3<<9*2);\
			GPIOG->PUPDR|=0x1<<9*2;\
		}
		
#define DS18B20_OUTPUT() \
		{\
			 GPIOG->MODER&=~(0x3<<9*2);\
			 GPIOG->MODER|=0x1<<9*2;\
			 GPIOG->OTYPER&=~(0x1<<9);\
			 GPIOG->OSPEEDR&=~(0x3<<9*2);\
			 GPIOG->OSPEEDR|=0x2<<9*2;\
			 GPIOG->ODR|=1<<9;\
		}
#endif

復(fù)制代碼

main.c源碼

#include "stm32f4xx.h" // Device header
#include "led.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include "sys.h"
#include "exti.h"
#include "timer.h"
#include "pwm.h"
#include "ds18b20.h"

int main(void)
{
	short temp;
	unsigned short intT,decT; 	  //溫度值的整數(shù)和小數(shù)部分
	LED_Init();
	KEY_Init();
	USART1_Init(84,115200);
	KEY_EXTI_Init();
	DS18B20_Init();
	while(1)
	{
	  /*讀取溫度信息*/
		temp=DS18B20_Get_Temp();
		intT = temp >> 4;             //分離出溫度值整數(shù)部分
		decT = temp & 0xF;            //分離出溫度值小數(shù)部分
		printf("DS18B20: %d.%d *C\r\n",(int)intT,(int)decT);
		DelayMs(1000);
	}
}
復(fù)制代碼

溫度讀取效果

image.png

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 溫度傳感器
    +關(guān)注

    關(guān)注

    48

    文章

    3024

    瀏覽量

    158101
  • DS18B20
    +關(guān)注

    關(guān)注

    10

    文章

    782

    瀏覽量

    81949
  • STM32F407
    +關(guān)注

    關(guān)注

    15

    文章

    188

    瀏覽量

    30245
收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    基于STM32DS18B20溫度傳感器設(shè)計

    DS18B20內(nèi)置了64位產(chǎn)品序列號,方便識別身份,在一根線上可以掛接多個DS18B20傳感器,通過64位身份驗證,可以分別讀取來至不同傳感器采集的
    的頭像 發(fā)表于 03-07 11:44 ?1.4w次閱讀
    基于<b class='flag-5'>STM32</b>的<b class='flag-5'>DS18B20</b><b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>設(shè)計

    [MicroPython]stm32f407控制DS18B20檢測溫度

    元器件 F407Micropython開發(fā)板1塊 數(shù)據(jù)線1條 DS18b20溫度傳感器1個 DS18B2
    發(fā)表于 08-13 16:42

    DS18B20溫度傳感器實驗

    單片機(jī)驅(qū)動DS18B20溫度傳感器實現(xiàn)溫度的串口打印顯示,本實驗中STM32基于HAL庫開發(fā)。本
    發(fā)表于 08-18 07:44

    stm32f407+DS18B20讀出的溫度顯示在TFT屏幕上

    stm32f407 + DS18B20 碰出不一樣的火花,DS18B20相關(guān)知識以及單總線協(xié)議。 最后將讀出的溫度顯示在 TFT 屏幕上。
    發(fā)表于 08-24 06:34

    數(shù)字溫度傳感器DS18B20的設(shè)計及應(yīng)用

    數(shù)字溫度傳感器DS18B20的設(shè)計及應(yīng)用 1引言 DS18B20是DALLAS公司生產(chǎn)的一線式數(shù)字溫度
    發(fā)表于 04-02 18:00 ?3009次閱讀
    數(shù)字<b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b><b class='flag-5'>DS18B20</b>的設(shè)計及應(yīng)用

    DS18B20完成溫度檢測的技巧

    介紹了DS18B20 溫度傳感器 的結(jié)構(gòu)和特點以及用DS18B20溫度傳感器進(jìn)行
    發(fā)表于 08-23 10:44 ?190次下載
    <b class='flag-5'>DS18B20</b>完成<b class='flag-5'>溫度</b>檢測的技巧

    DS18B20數(shù)字溫度傳感器

    本設(shè)計基于單片機(jī)STM32開發(fā)板,對DS18B20數(shù)字溫度傳感器進(jìn)行控制,有源代碼
    發(fā)表于 05-11 14:54 ?42次下載

    溫度傳感器DS18B20

    溫度傳感器DS18B20 51例程,親測可用
    發(fā)表于 06-14 15:36 ?21次下載

    智能溫度傳感器DS18B20的原理與應(yīng)用

    DS18B20是DALLAS公司生產(chǎn)的單線數(shù)字溫度傳感器,他具有獨特的單線總線接口方式。文章詳細(xì)的介紹了單線數(shù)字溫度傳感器
    發(fā)表于 10-11 18:19 ?49次下載

    ds18b20的特性_ds18b20溫度傳感器應(yīng)用

    本文首先介紹了ds18b20的特性,其次介紹了DS18B20工作原理,最后介紹了ds18b20溫度傳感器應(yīng)用。
    發(fā)表于 04-24 09:10 ?1.2w次閱讀
    <b class='flag-5'>ds18b20</b>的特性_<b class='flag-5'>ds18b20</b><b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>應(yīng)用

    STM32入門開發(fā): 編寫DS18B20溫度傳感器驅(qū)動(讀取環(huán)境溫度、支持級聯(lián))

    一、環(huán)境介紹編程軟件: keil5操作系統(tǒng): win10STM32編程方式: 寄存開發(fā) (方便程序移植到其他單片機(jī))溫度傳感器
    發(fā)表于 11-21 11:51 ?46次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>入門開發(fā)</b>:  編寫<b class='flag-5'>DS18B20</b><b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>驅(qū)動(讀取環(huán)境<b class='flag-5'>溫度</b>、支持級聯(lián))

    STM32F207 DS18B20數(shù)字式溫度傳感器調(diào)試記錄

    STM32F207 DS18B20數(shù)字式溫度傳感器調(diào)試記錄平臺:STM32F207 HAL庫。調(diào)試內(nèi)容:通過
    發(fā)表于 11-25 11:21 ?16次下載
    <b class='flag-5'>STM32F</b>207 <b class='flag-5'>DS18B20</b>數(shù)字式<b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>調(diào)試記錄

    STM32CubeMX系列|DS18B20溫度傳感器

    DS18B20溫度傳感器1. DS18B20簡介2. 硬件設(shè)計3. 軟件設(shè)計3.1 STM32CubeMX設(shè)置3.2 MDK-ARM編程4.
    發(fā)表于 01-18 10:04 ?18次下載
    <b class='flag-5'>STM32</b>CubeMX系列|<b class='flag-5'>DS18B20</b><b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>

    STM32 DS18B20溫度傳感器實驗(HAL庫)

    單片機(jī)驅(qū)動DS18B20溫度傳感器實現(xiàn)溫度的串口打印顯示,本實驗中STM32基于HAL庫開發(fā)。本
    發(fā)表于 01-18 10:08 ?48次下載
    <b class='flag-5'>STM32</b> <b class='flag-5'>DS18B20</b><b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>實驗(HAL庫)

    ds18b20溫度傳感器如何使用

    DS18B20是一款廣泛使用的數(shù)字溫度傳感器,它具有高精度、低功耗和易于使用的特點。 DS18B20溫度
    的頭像 發(fā)表于 09-03 16:51 ?1504次閱讀