历史上的今天

今天是:2024年11月13日(星期三)

2019年11月13日 | stm32 驱动DS18B20温度传感器

发布者:脑力驿站 来源: eefocus关键字:stm32  驱动DS18B20  温度传感器 手机看文章 扫描二维码
随时随地手机看文章

#include "temp.h"


#define u8 uint8_t

#define u16 uint16_t

#define u32 uint32_t



#define DS18B20_PORT GPIOA

#define DS18B20_PIN     GPIO_Pin_1                  

#define DS18B20_CLK     RCC_APB2Periph_GPIOA


#define RW1820_DQ_HIGH           GPIO_SetBits(DS18B20_PORT, DS18B20_PIN);

#define RW1820_DQ_LOW           GPIO_ResetBits(DS18B20_PORT, DS18B20_PIN);  

#define RW1820_DQ_VALUE GPIO_ReadInputDataBit(DS18B20_PORT,DS18B20_PIN)




//---------------------------------------------------------------------------//

void _delay_us(uint16_t nCount)

{

    nCount *= 3; 

    while(--nCount);

}

//-----------------------------------------------------------------------------//

static void RW1820_DQ_IN(void)

{

   GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(DS18B20_CLK, ENABLE);

 GPIO_InitStructure.GPIO_Pin = DS18B20_PIN;

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

 GPIO_Init(DS18B20_PORT, &GPIO_InitStructure);

}

//--------------------------------------------------------

static void RW1820_DQ_OUT(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(DS18B20_CLK, ENABLE);

GPIO_InitStructure.GPIO_Pin = DS18B20_PIN;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(DS18B20_PORT, &GPIO_InitStructure);

}

//--------------------------------------------------------

void RW1820_Init(void)

{

u8 retry=0;

RW1820_DQ_OUT();

RW1820_DQ_HIGH; 

_delay_us(50);

RW1820_DQ_LOW;  


_delay_us(500); //480 - 960

  RW1820_DQ_HIGH; 


_delay_us(40); //15-60

RW1820_DQ_IN(); //

while(RW1820_DQ_VALUE==1&& (retry<100))

{

retry++;

_delay_us(10);

}

RW1820_DQ_OUT();

RW1820_DQ_HIGH;

_delay_us(400);

}

//-------------

void RW1820_WriteByte(unsigned char _data)

{

int i = 0;

RW1820_DQ_OUT();

_delay_us(10);

for (i = 0; i < 8; i++)

{

RW1820_DQ_LOW;          //

_delay_us(2);           //

if (_data & 0x01)

{

RW1820_DQ_HIGH;     //

}

else RW1820_DQ_LOW;

_delay_us(60);          //60

RW1820_DQ_HIGH;

_data = _data >> 1;

}

}

//-------------

unsigned char RW1820_ReadByte(void)

{

int i = 0, _data = 0;

_delay_us(10);

for (i = 0; i < 8; i++)

{

RW1820_DQ_OUT();

RW1820_DQ_LOW;  

_data >>= 1;

_delay_us(2);   

RW1820_DQ_HIGH; 

RW1820_DQ_IN(); 

if(RW1820_DQ_VALUE)

{

_data |= 0x80;

}

_delay_us(60);  //60us

}

return _data;

}


int RW1820_ReadTemperature(void)

{

unsigned char temp;

unsigned int t;


RW1820_Init();         //

RW1820_WriteByte(0xcc); //

RW1820_WriteByte(0x44); //

_delay_us(10);

RW1820_Init();

RW1820_WriteByte(0xcc); //

RW1820_WriteByte(0xbe); //


temp = RW1820_ReadByte();

t = (int)(((temp & 0xf0) >> 4) + (temp & 0x07) * 0.125); 

temp = RW1820_ReadByte();

t += ((temp & 0x0f) << 4);


return t;

}


关键字:stm32  驱动DS18B20  温度传感器 引用地址:stm32 驱动DS18B20温度传感器

上一篇:stm32f103 c6t6 CAN总线的配置
下一篇:stm32单片机进入休眠(STOP)模式后无法下载程序等问题解决

推荐阅读

近些年工业机器人发展突出,智能机器人扩张加快,就运输机器人来说,其领域已经由汽车、、食品等传统领域,逐渐向3C制造、新能源电池、高端装备、生活用品等新兴领域加快布局。但事实上,很多制造企业在呼吁精益化生产的同时仍在采用人力进行物料运输,即使AGV(自动导引运输车)的出现,也无法真正改变这项棘手难题。 问题在于AGV的智能性相对较低,...
使用cnnt 对脉冲计数,TMR1对上升沿计时,TMR2对下降沿计时,TMR1设定为100MS的定时器,TMR2 设定为40MS的定时器。 脉冲周期 为50HZ到300HZ的变化,脉冲宽度为2MS到20MS的变化,检测脉冲的个数以及宽度。 按下RA0(UP)电机正转,开始对RA2外部脉冲计数判断宽度。cnnt=380时。停止电机转动按下RA5(DN)电机反转,开始对RA2外部脉冲...
  人工智能技术的日益成熟加上安防行业的不断发展,智能安防机器人逐渐开始“走红”。在生活各个领域开始有了这些“小可爱”的身影!   一、智能家居生活中的“它”   现在生活越来越好,对智能家庭生活的要求也越来越高,“它”可以实现智能远程控制,可以做到智能远程视频。   二、旅途中的”它“   你能想像,现在的智能安防机器人可以...
10月12日,兆易创新在投资者互动平台表示,产品单价的上涨原因包括涨价以及产品结构调整,但后者起到了很大的作用,比如不同规格的产品,公司产能会更多给到高规格的产品。明年市场对MCU的需求仍会比较旺盛,需求包括各个领域,如工业、大家电、汽车、消费。在今年整个行业供不应求以及国产替代背景下,目前兆易创新MCU产品在汽车、工业领域占比有比较大的...

史海拾趣

问答坊 | AI 解惑

基于ARM的嵌入式软件设计

针对嵌入式软件设计的大体概述…

查看全部问答∨

好玩又实用的机器人转笔刀

器人转笔刀,原动力来自铅笔屑     现在的学生真的很累,虽然已经有了电脑和网络为他们供给许多新鲜的娱乐方式,但其实最能让学生们感到有趣的事情,应当还是来自于学习过程中的一些小小的转变。虽然已经很多人不应用铅笔了,不过对于一 ...…

查看全部问答∨

wince系统是否支持多图层显示?

现在wince6.0 R3是否支持多图层显示?是不是Wince6.0 os 中只有一个图像的缓冲FIFO? 代码从哪里能看到…

查看全部问答∨

Nios里怎么做电子狗?

Nios里怎么做电子狗? 求代码和原理 代码最好有些注释,兄弟水平有限 谢谢…

查看全部问答∨

win CE 5.0 开发乱码问题

最近在symbol mc 3000上做一个软件,遇到了中文问题 开发环境是netbean+CreCE, 1、java程序在读写的时候报异常 java.io.UnsupportedEncodingException: gbk 2、中文字符显示乱码 各位有没有用JAVA做过WIN CE开发的。请指教啦!!! QQ:  & ...…

查看全部问答∨

存储技术的多样化与应用分析

网络存储在安防行业的应用     视频监控系统目前正处于以DVR数字硬盘录像机为代表的数字视频监控系统全面向以NVS服务器、网络视频服务器、IPCamera网络摄像机以及最近兴起的NVR叫络录像机为代表的网络视频监控系统转型阶段,在此过渡阶 ...…

查看全部问答∨

qemu里面键值的问题

在家里和在办公室调试,发现键盘按键值是两个不同的值,现在在办公室esc对应值为1 A对应为30为什么会是这样的?demo里2440bsp key.c里面这个   RTGUI_KEYUP RTGUI_KEYDOWN是什么决定的? if((key_value &  0x80)==0)  & ...…

查看全部问答∨

CortexM0__Routine_WDT示例代码程序下载

CortexM0__Routine_WDT示例代码程序下载…

查看全部问答∨

关于ARM9的清cache问题

求教在应用程序运行过程中 能不能实现清cache问题。看到说是用mcr命令可以实现 但是我在c中嵌入汇编后 没有反应啊!…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved