温度传感器DS18B20的引脚功能及驱动程序
tencentUser 2024-05-30

1、参数特性

  • 供电电压:3.0V-5.5V。

  • 测量温度范围:-55~+125℃

  • 精度:±0.5℃

  • 数据传输:“一线总线”的数字方式传输

  • 采集精度:可以由用户自定义为9-Bits至12-Bits。


2、引脚功能

如下图所示,DS18B20的三种封装类型,

图片.png

对应的引脚功能如下

图片.png



3、STM32HAL库驱动程序

//复位DS18B20
void DS18B20_Rst(void)       
{                 
    DS18B20_IO_OUT();   //设置为输出
    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();    //设置为输入
    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();   //设置为输出
    DS18B20_DQ_OUT=0; 
    delay_us(2);
    DS18B20_DQ_OUT=1; 
    DS18B20_IO_IN();    //设置为输入
    delay_us(12);
    if(DS18B20_DQ_IN)data=1;
    else data=0;     
    delay_us(50);           
    return data;
}

//从DS18B20读取一个字节
//返回值:读到的数据
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;
}

//写一个字节到DS18B20
//dat:要写入的字节
void DS18B20_Write_Byte(u8 dat)     
 {             
    u8 j;
    u8 testb;
    DS18B20_IO_OUT();     //设置为输出
    for (j=1;j<=8;j++) 
    {
        testb=dat&0x01;
        dat=dat>>1;
        if(testb)       // 写1
        {
            DS18B20_DQ_OUT=0;
            delay_us(2);                            
            DS18B20_DQ_OUT=1;
            delay_us(60);             
        }
        else            //写0
        {
            DS18B20_DQ_OUT=0;
            delay_us(60);             
            DS18B20_DQ_OUT=1;
            delay_us(2);                          
        }
    }
}
 
//开始温度转换
void DS18B20_Start(void)
{                                          
    DS18B20_Rst();       
    DS18B20_Check();     
    DS18B20_Write_Byte(0xcc);// skip rom
    DS18B20_Write_Byte(0x44);// convert
}

//初始化DS18B20的IO口 DQ 同时检测DS的存在
//返回1:不存在
//返回0:存在         
u8 DS18B20_Init(void)
{
    GPIO_InitTypeDef GPIO_Initure;
    __HAL_RCC_GPIOG_CLK_ENABLE();            //开启GPIOB时钟
    
    GPIO_Initure.Pin=GPIO_PIN_9;               //PG9
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  //推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;          //上拉
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速
    HAL_GPIO_Init(GPIOG,&GPIO_Initure);     //初始化
 
    DS18B20_Rst();
    return DS18B20_Check();
}

//从ds18b20得到温度值
//精度:0.1C
//返回值:温度值 (-550~1250) 
short DS18B20_Get_Temp(void)
{
    u8 temp;
    u8 TL,TH;
    short tem;
    DS18B20_Start ();           //开始转换
    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   
    if(TH>7)
    {
        TH=~TH;
        TL=~TL; 
        temp=0;//温度为负  
    }else temp=1;//温度为正            
    tem=TH; //获得高八位
    tem<<=8;    
    tem+=TL;//获得底八位
    tem=(double)tem*0.625;//转换     
    if(temp)return tem; //返回温度值
    else return -tem;    
}

4、RT_Thread studio驱动包

通常对于一些常用的传感器的驱动,在开发中都不需要我们亲自动手去写,都有现成的,重复造轮子效率很低,所以我们知道哪里有,怎么用就行了,如果是用RT Thread studio就能用现成的软件包,如下

图片.png

点添加之后生成pack包,直接调用相应函数就OK。

图片.png

声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • DIY
  • 开源
  • 自制
  • 树莓派
  • NE555芯片如何设计DIY电路

    NE555是一个非常常见的一个芯片,在很多的电器里都能看到它的身影,本文为大家总结了一些有趣的NE555电路

    07-12
  • 蓝牙耳机爆改信号发生器

    前阵子拆了个蓝牙耳机,然后总觉得他能再发挥些余热,于是就有了这期,我在网上找了一个音频测试的app,可以输出不同频率的声音,例如下图:

    06-21
  • STM32平衡小车的制作过程,电路和代码

    原文链接:http://nicekwell.net/项目作者: 老倪转载请务必注明项目出处与原作者信息摘要:

    06-14
  • 如何自制一块arduino板

    这里采用的是某创EDA软件画的原理图然后这时画好的布好的PCB板子,大家可以根据自己的外形去重新设计这时整个板子的元器件清单接下来我们开始对板子进行焊接这样我们就把板子焊接好了,要想板子编程arduino板,我们...

    05-30
  • 无线WIFI下如何获取树莓派的IP地址?

    引言:对于大多数人来说,获取树莓派的IP地址来说是一件非常容易的事,但是当我们连接的是无线WIFI,只知道密码,那么我们如何获取树莓派的IP地址呢?方法一:我们可以使用我们手机的无线热点来让我们的笔记本电脑和...

    05-30
  • 用ESP8266做了一个非常便宜的飞行控制器

    小型无人机,你会爱上它。

    05-30
  • 一个基于NodeMCU飞行控制器的安卓爬墙无人机项目

    小型无人机,你会爱上它。

    05-30
  • 基于74ls138译码器设计应用

    138译码器,想必大家均有所了解。对于138译码器,市场上存在较多应用。目前市场流通较广的138译码器为74ls138译码器和74hc138译码器。本文中,将介绍74ls138译码器的两个应用:1.利用74ls139译码器设计驱动数码管...

    05-17
  • ReSpeaker 2-Mics Pi HAT实战测试

    引言ReSpeaker 2-Mics Pi HAT是专为AI和语音应用设计的Raspberry Pi双麦克风扩展板。因为博主有一块树莓派zero w板子,从电子芯吧客看到可以申请板子,博主从网上申请了一块板子,也感谢电子芯吧客,博主准备搞点事...

    01-31
  • 攻克室内温度烦恼的秘密武器——喷水减温器

    高温蒸汽从减温器进口端被引入文丘里管,而水经文丘里管喉部喷嘴喷入,形成雾状水珠与高速蒸汽流充分混合,并经一定长度的套管,由另一端引出减温器。这样喷入的水吸收了过热蒸汽的热量而变为蒸汽,使汽温降低。由...

    01-22
  • Node码农的快乐:11个编程习惯

    从问世到现在将近20年,JavaScript一直缺乏其它有吸引力的编程语言,比如Python和Ruby,的很多优点:命令行界面,REPL,包管理器,以及组织良好的开源社区。感谢Node.js和npm,现如今的JavaScript鸟枪换炮了。Web开 ... 评论:6 分享:1 收藏:1      2014-04-23 23:26     

    01-18
  • Linux网络问题解决:如何发现IP地址冲突

    你们都知道什么是IP地址,是吧?它们被分配给网络上的设备来代表它们。它们通过DHCP服务器分配并且会经常改变。现在有两种IP地址。动态的一种会经常改变(几天一次),而静态的就如它的名字那样是静态的,意味着它们 ... 评论:2 分享:2 收藏:4      2014-04-24 15:12      geekpi

    01-18
下载排行榜
更多
评测报告
更多
EE直播间
更多
广告