m0_74189556 2022-11-23 16:04 采纳率: 33.3%
浏览 29
已结题

stm32l476rg和ds18b20

本人使用的板子为stm32l476rg,但是测出来的温度一直出现错误,想问问有没有符合ds18b20在keil中编译符合的头文件和相关文件

  • 写回答

5条回答 默认 最新

  • fengyuzhe13 嵌入式领域优质创作者 2022-11-23 16:32
    关注
    获得2.70元问题酬金

    是不是读写延时太短,导致温度传感器反应不过来?以下程序我使用过,没有问题,可直接复制:

    //温度采集模块    
    /******************************************************************************/
    void Init_DS18B20()//初始化ds1820
    {
        unsigned char x=0;
        DQ = 1;    //DQ复位
        tmpDelay(8);  //稍做延时
        DQ = 0;    //单片机将DQ拉低
        tmpDelay(80); //精确延时 大于 480us
        DQ = 1;    //拉高总线
        tmpDelay(14);
        x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
        tmpDelay(20);
    }
       unsigned char ReadOneChar()//读一个字节
    {
        unsigned char i=0;
        unsigned char dat = 0;
        for (i=8;i>0;i--)
        {
            DQ = 0; // 给脉冲信号
            dat>>=1;
            DQ = 1; // 给脉冲信号
            if(DQ)
            dat|=0x80;
            tmpDelay(4);
        }
        return(dat);
    }
    void WriteOneChar(unsigned char dat)//写一个字节
    {
        unsigned char i=0;
        for (i=8; i>0; i--)
        {
            DQ = 0;
            DQ = dat&0x01;
            tmpDelay(5);
            DQ = 1;
            dat>>=1;
        }
    }
    
     unsigned int Readtemp()//读取温度
    {
        unsigned char a=0;
        unsigned char b=0;
        unsigned int t=0;
        float tt=0;    
        Init_DS18B20();
        WriteOneChar(0xCC); // 跳过读序号列号的操作
        WriteOneChar(0x44); // 启动温度转换
        Init_DS18B20();
        WriteOneChar(0xCC); //跳过读序号列号的操作
        WriteOneChar(0xBE); //读取温度寄存器
        a=ReadOneChar();   //连续读两个字节数据   //读低8位
        b=ReadOneChar();                          //读高8位
        t=b;
        t<<=8;
        t=t|a; //两字节合成一个整型变量。
        tt=t*0.0625;  //得到真实十进制温度值,因为DS18B20可以精确到0.0625度,所以读回数据的最低位代表的是0.0625度
        t= tt*10+0.5; //放大十倍,这样做的目的将小数点后第一位也转换为可显示数字,同时进行一个四舍五入操作。
        return(t);
    }
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月1日
  • 创建了问题 11月23日

悬赏问题

  • ¥15 shape_predictor_68_face_landmarks.dat
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制