基于STM32的-DS18b20-驱动程序_第1页
基于STM32的-DS18b20-驱动程序_第2页
基于STM32的-DS18b20-驱动程序_第3页
基于STM32的-DS18b20-驱动程序_第4页
基于STM32的-DS18b20-驱动程序_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

//=========================DS18b20.h=========================///*-----------------------------------------------

DS18b20驱动程序------------------------------------------------*/#ifndef__DS18B20_H

#define__DS18B20_Htypedefenum{FAILED=0,PASSED=!FAILED}TestStatus;#defineDQ_GPIO

GPIOD

#defineDQ_GPIO_PinGPIO_Pin_5//REGISTERCOMMANDS

#defineREGISTER_9_BITS

0x1F

#defineREGISTER_10_BITS0x3F

#defineREGISTER_11_BITS0x5F

#defineREGISTER_12_BIT20x7F//ROMCOMMANDS

#defineROM_Search_Cmd

0xF0

#defineROM_Read_Cmd

0x33

#defineROM_Match_Cmd

0x55

#defineROM_Skip_Cmd

0xCC

#defineROM_AlarmSearch_Cmd0xEC//DS18b20FUNCTIONCOMMANDS

#defineConvert_T

0x44

#defineWrite_Scratchpad

0x4E

#defineRead_Scratchpad

0xBE

#defineCopy_Scratchpad

0x48

#defineRecall_EEPROM

0x88

#defineRead_PowerSupply

0x84#defineDQ_Write_1()

GPIO_SetBits(DQ_GPIO,DQ_GPIO_Pin)

//写1

#defineDQ_Write_0()

GPIO_ResetBits(DQ_GPIO,DQ_GPIO_Pin)//写0

#defineDQ_ReadBit()

GPIO_ReadInputDataBit(DQ_GPIO,DQ_GPIO_Pin)//读DQ上的值externvoidGPIO_DQ_Out_Mode(void);//DQ输出模式

externvoidGPIO_DQ_Input_Mode(void);

//DQ输入模式externvoidTx_ResetPulse(void);

//发送复位脉冲

externvoidRx_PresencePulse(void);//接受应答信号externvoidWrite_OneByte_ToDS18b20(unsignedchardata);//写一个字节到18b20

externunsignedcharRead_OneByte_FromDS18b20(void);//从18b20读一个字节

externvoidRead_Temperature(unsignedchar*sign,unsignedchar*interger,

unsignedint*decimal);//读温度

//写配置参数TH,TL和初始化配置寄存器

externvoidWrite_EEPROM(unsignedcharTh,unsignedcharTl,unsignedcharRegister_Con);voidDS18B20_Init(void);//初始化#endif/*DS18B20*///=================================================================////=========================DS18b20.c================================//#include"stm32f10x_lib.h"

#include"DS18b20.h"

#include"SysTick_Delay.h"/******************************************

函数名称:GPIO_DQ_Out_Mode

能:设置DQ引脚为开漏输出模式

数:无

返回值

:无

*******************************************/

voidGPIO_DQ_Out_Mode(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin=DQ_GPIO_Pin;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;//开漏输出

GPIO_Init(DQ_GPIO,&GPIO_InitStructure);

}/******************************************

函数名称:GPIO_DQ_Input_Mode

能:设置DQ引脚为浮空输入模式

数:无

返回值

:无

*******************************************/

voidGPIO_DQ_Input_Mode(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin=DQ_GPIO_Pin;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入

GPIO_Init(DQ_GPIO,&GPIO_InitStructure);

}

tmp=~tmp+1;

}

else

{

sign=0;

}

*interger=(tmp>>4)&0x00FF;

//整数部分

*decimal=(tmp&0x000F)*625;//小数部分

}/******************************************

函数名称:Write_EEPROM

能:写配置参数

数:Th-报警温度上限

Tl-报警温度下限

Register_Con-控制寄存器的值

返回值

:读出的数据

*******************************************/

voidWrite_EEPROM(unsignedcharTh,unsignedcharTl,unsignedcharRegister_Con)

{

DS18B20_Init();

Write_OneByte_ToDS18b20(ROM_Skip_Cmd);

Write_OneByte_ToDS18b20(Write_Scratchpad);

Write_OneByte_ToDS18b20(Th);//Th=7F

Write_OneByte_ToDS18b20(Tl);//Tl=FF最高位符号位

Write_OneByte_ToDS18b20(Register_Con);//12位模式

Delay_Nms(700);

DS18B20_Init();

Write_OneByte_ToDS18b20(ROM_Skip_Cmd);

Write_OneByte_ToDS18b20(Copy_Scratchpad);//将寄存器的配置值写入EEPROM

Delay_Nms(300);

}/******************************************

函数名称:DS18B20_Init

能:初始化DS18b20

数:无

返回值

:无

*******************************************/

voidDS18B20_Init(void)

{

Tx_ResetPulse();

Rx_PresencePulse();

}//=================================================================////========================要用到的其他文件============================////===========================Systick_Delay.h==========================///*--------------------------------------------------

利用SysTick进行精确定时---------------------------------------------------*/#ifndef__SYSTICKDELAY_H

#define__SYSTICKDELAY_H

#include"stm32f10x_lib.h"externvoidDelay_Nms(u16Nms);

externvoidDelay_Nus(u32Nus);

#endif

/*SYSTICKDELAY_H*///=================================================================////=========================Systick_Delay.c============================//#include"stm32f10x_lib.h"

#include"SysTick_Delay.h"//延时Nms

//注意Nms的范围

//Nms<=0xffffff*8/SYSCLK

//对72M条件下,Nms<=1864

voidDelay_Nms(u16Nms)

{

SysTick->LOAD=(u32)Nms*9000;//给重装载寄存器赋值,9000时,将产生1ms的时基

SysTick->CTRL|=0x01;

//开始倒数

while(!(SysTick->CTRL&(1<<16)));

//等待时间到达

SysTick->CTRL=0X00000000;

//关闭计数器

SysTick->VAL=0X00000000;

//清空计数器

}

//延时us

voidDelay_Nus(u32Nus)

{

SysTick->LOAD=Nus*9;

//时间加载

SysTick->C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论