野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17172|回复: 8

如何用stm32连接DS18B20温度传感器

[复制链接]
发表于 2018-11-1 19:58:43 | 显示全部楼层 |阅读模式
如今已经学完ADC了,想借此知识做个实验
回复

使用道具 举报

 楼主| 发表于 2018-11-1 19:59:32 | 显示全部楼层
虽然学了很久,但实际上并没有做过什么实验
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-1 20:01:03 | 显示全部楼层
想用一个温度传感器读取环境温度并显示到LCD屏幕上。现在买了DS18B20传感器,但完全不知道从何下手
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-1 20:01:55 | 显示全部楼层
想请教一下有经验的人给我指个方向感激不尽!
回复 支持 反对

使用道具 举报

发表于 2018-11-3 10:38:08 | 显示全部楼层
鱼仔 发表于 2018-11-1 00:01
想用一个温度传感器读取环境温度并显示到LCD屏幕上。现在买了DS18B20传感器,但完全不知道从何下手


#include "stm32f4xx.h"
#include "usart/bsp_debug_usart.h"
#include "systick/bsp_SysTick.h"
#include "DS18B20/bsp_ds18b20.h"
#include "oled.h"
#include <stdio.h>

//用于存储格式化后字符串的数组
unsigned  char cStr [ 10 ];
        

float temperature;

/**
  * @brief  主函数
  * @param  无
  * @retval 无
  */
int main(void)
{       
        uint8_t uc,DS18B20Id[8];
                unsigned char i;
  /*初始化USART,配置模式为 115200 8-N-1*/
  Debug_USART_Config();
  printf("\r\n 实验开始***\n");
       
        /* 系统定时器初始化 */
        SysTick_Init();
       
       

        I2C_Configuration();//配置CPU的硬件I2C
        OLED_Init();    //初始化OLED
                       
        printf("\r\n OLED初始化成功,OLED正在工作! \r\n");
                OLED_CLS();//清屏
        if(DS18B20_Init()==0)
        {
                printf("DS18B20初始化成功\n");
        }
        else
        {
                printf("DS18B20初始化失败\n");
                printf("请将传感器正确插入到插槽内\n");
                /* 停机 */
                while(1)
                {}                       
        }               
        DS18B20_ReadId ( DS18B20Id  );           // 读取 DS18B20 的序列号
       
        printf("\r\nDS18B20的序列号是: 0x");

        for ( uc = 0; uc < 8; uc++ )             // 打印 DS18B20 的序列号
        printf ( "%.2x", DS18B20Id[uc]);
        printf("\n");
       
  while(1)
        {
                temperature=DS18B20_Get_Temp();
               
                printf("DS18B20读取到的温度为:%0.3f\n",temperature);
               
                  
   
    //sprintf把temperature的值格式化到字符串里的%d位置,格式化的结果存储在cStr中
    //要转换浮点型变量可以使用 %f
       sprintf ( (char*)cStr, " %0.3f",temperature );
               
    //显示字符串,把cStr作为输入进行显示。以下函数是液晶的字符串显示函数,可根据自己的液晶驱动修改
      

               
    for(i=0;i<4;i++)
                {
                        OLED_ShowCN(22+i*16,0,i);                                                                       
                }
               
    OLED_ShowStr(30,2, cStr, 2);
                 
               
                         
              Delay_ms(1000);
               
        }        
                        }
这是我的主函数   可以实现显示
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-5 18:37:37 | 显示全部楼层
需要用到I2C么?
回复 支持 反对

使用道具 举报

发表于 2018-11-5 22:09:53 | 显示全部楼层
鱼仔 发表于 2018-11-5 18:37
需要用到I2C么?

ds18b20是单总线通信,对时序有要求比较高,不是i2c通信的
回复 支持 反对

使用道具 举报

发表于 2019-10-5 11:41:54 | 显示全部楼层
本帖最后由 zml515192147 于 2019-10-15 14:54 编辑

DS18B20 编程还是比较 麻烦的,延时  调用 太多,影响主程序的运行
得用定时器 来调度 程序来实现延时,详细见 见附件
21STM32F10x_DS18BD20源程序说明.zip (97.94 KB, 下载次数: 349)
回复 支持 反对

使用道具 举报

发表于 2020-2-22 22:42:01 | 显示全部楼层
学习了,也买了个18B20,测试一下。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-22 14:22 , Processed in 0.055764 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表