在程序开始之前,要先进行I/O端口的配置,包括I/O端口方向设置和I/O
操作函数的定义,本设计使用PG8作为两个DS 18B20与STM犯的数据端口,
输入模式定义为上拉/下拉输入模式,输出模式定义为通用推挽模式。
首先进行时钟的初始化,本设计选用STM32系统SysTick定时器来完成延
时的计算。然后进行DS 18B20的初始化,包括DS 18B20的复位和检测。如果失
败,延时is继续进行初始化,如果成功,直接进入DS 18B20温度采集循环程序。
在循环程序中,对两个DS 18B20顺序发送命令,通过预先得到的ROM进行匹
配,读取每个DS 18B20暂存器中的数据,并计算出实际的温度值。
下面给出进行温度采集的主函数进行简单程序说明。
short DS 18B20_Get Temp(u8 ID)
{
u8 temp, n, num;
u8 TL, TH;
short tem;
num=ID一1;
DS18B20_Start Q; // DS18B20开始转换温度
DS18B20_ RstQ; //DS18B20复位
DS18B20_ Check();//检测DS 18B20是否存在
DS18B20_ Write_ Byte(Ox55);//发送匹配ROM命令
for(n=O;n<8;n++)
DS18B20_ Write_ Byte(DS18B20_ ROM[num][n]);//发送64 bit ROM
DS18B20_ Write_ Byte(Oxbe);//发送读RAM命令
TL=DS18B20_ Read_ Byte();//读取LSB
TH=DS 18B20_ Read_ Byte();//读取MSB
//进行温度转换
if(TH>7)
TH=}TH;
TL=}TL;
temp=0;
}
else
temp=1;
tem=TH;
tem+=8;
tem+=TL;
tem=(float)tem*0.625;
if(temp)
return tem;
else
return -tem;
//温度为负
//温度为正
//获得高八位
//获得底八位
//转换
//返回温度值
|