历史上的今天
返回首页

历史上的今天

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

正在发生

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

2019-11-13 来源:eefocus

#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;

}


推荐阅读

史海拾趣

Crowd_Supply__Inc.公司的发展小趣事

在电子行业的众多初创公司中,Crowd Supply Inc.以其独特的理念和模式崭露头角。公司成立之初,便聚焦于开放式硬件和社区驱动的产品开发,这在当时的行业环境中还是一个较为新颖的概念。创始人团队由一群富有热情和创新精神的电子工程师和产品开发专家组成,他们通过线上平台汇聚了一群同样对电子硬件感兴趣的爱好者和开发者。初期,公司面临资金短缺、市场认可度低等挑战,但通过不断试错和社区反馈,逐渐找到了自己的发展方向。

FDK AMERICA公司的发展小趣事

随着全球电子市场的不断发展,FDK AMERICA公司意识到单靠国内市场已无法满足其发展需求。于是,公司积极寻求国际合作机会,与全球知名电子企业建立战略合作伙伴关系。通过合作,公司成功将产品打入国际市场,进一步扩大了市场份额。

广东奥科公司的发展小趣事

随着企业规模的扩大和影响力的提升,广东奥科公司开始积极承担社会责任,推动可持续发展。公司注重环保和节能技术的应用,致力于生产环保型电子产品,减少生产过程中的能源消耗和环境污染。同时,广东奥科公司还积极参与社会公益事业,为社会的发展贡献自己的力量。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实的基础。

这些故事展示了广东奥科公司在电子行业中的发展历程和取得的成就,也体现了公司不断创新、追求卓越的精神。未来,广东奥科公司将继续秉持这一精神,为电子行业的发展贡献更多的力量。

星海公司的发展小趣事

随着国内市场的饱和,星海公司开始实施国际化战略,积极拓展海外市场。公司积极参加国际展览和比赛,展示星海钢琴的品质和实力。同时,星海公司还与国际知名音乐院校和乐团建立合作关系,推动星海钢琴在国际市场的知名度和影响力。目前,星海钢琴已出口到世界60多个国家和地区,成为国际市场上备受瞩目的中国品牌。

GISMA Steckverbinder GmbH公司的发展小趣事

自1983年成立以来,GISMA Steckverbinder GmbH便专注于水下连接器的开发、设计和生产。作为一家由所有者直接管理的独立公司,GISMA从一开始就确立了为海洋工业、船舶及海洋技术提供高质量电气和光纤连接器的目标。这一明确的市场定位使得GISMA能够迅速在竞争激烈的电子行业中脱颖而出,逐步建立起自己的市场地位。

BEKA Associates Ltd公司的发展小趣事

随着全球电子市场的不断发展,BCD Semi(Diodes)积极寻求国际化拓展的机会。公司通过与国外知名企业的合作,成功进入了多个海外市场。在国际市场上,BCD Semi凭借其高品质的产品和专业的服务,赢得了客户的信赖和支持。同时,公司还积极参加国际电子展会和交流活动,与全球同行进行深入的交流与合作,不断提升自身的国际影响力。

问答坊 | AI 解惑

dac0832与lm324输出问题?帮忙看一下!!

本帖最后由 dontium 于 2015-1-23 11:32 编辑 电路如图!!我用的单电源供电,lm324没用的管脚是悬空的!不知道有没影响。问题是输出最大只有1.6V,而我的程序结果应该是0到5v 就算不能满量程也该在5V附近吧!!大侠们 帮忙看下吧!!谢了!!dac0 ...…

查看全部问答>

zigbee中语音的问题

最近小弟正在做一个利用zigbee协议的无线语音通信的东东,碰到了一些问题,例如在zigbee协议的home_automation_profile已经有了关于light、Closures等的ID,那关于voice的是不是自己定义一个值就行了?    麻烦这一领域里的师兄师姐帮助 ...…

查看全部问答>

关于vxwoks中zbuf的问题

前几天,在跑程序的时候遇到一个zbuf的异常,vxworks打印的调用链如下: data storage Exception current instruction address: 0x0050cb60 Machine Status Register: 0x00029230 Data Exception Address Register: 0x0069bf38 Condition Regi ...…

查看全部问答>

ARM7/9的flash然后实现加密?

据我所知,flash里面的程序可以通过编程器将其读出,这样不是很容易被别人盗取吗? 现在是否有什么好办法呢?…

查看全部问答>

啟動代碼的問題

LM每種型號芯片的啟動代碼一樣嗎?? 如果不同,編寫驅動代碼應該參照什麽? 各種啟動代碼裡面的地址如何確定???????? 各位大俠說說看…

查看全部问答>

Linux的开发软件SldView 谁有啊,能否给我发一下,不胜感激

想做Linux开发,在网上找了下 发现开发包都不是很好找 望大虾有的话能够发一下 先行谢过 qq:175232683…

查看全部问答>

【TI文献】智能能源规范 (Smart Energy Profile) 解决方案

智能能源规范 (Smart Energy Profile) 解决方案,欢迎大家下载!…

查看全部问答>

电源类的题目准备哪些元器件

本帖最后由 paulhyde 于 2014-9-15 03:38 编辑 各位大神,能分享一下你们的经验吗,你觉得今年的带赛题,电源类的应该准备那些元器件,最要有具体的型号,谢谢分享    …

查看全部问答>