说明:DS1990A为单总线通讯方式,数据线需上拉4.7K上拉电阻。
#include "stm32f10x_lib.h"
#include "ds1990a.h"
void SysDelayuS( u32 nTime );
void delay_us(u32 Nus);
void delay_us(u32 Nus)
{
SysDelayuS(Nus);
}
static void data_output_set(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //将数据设为输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
static void data_input_set(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //将数据设为读入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
//*************************************************
//发出复位脉冲
//入口:无
//出口: 0=失败,1=成功,失败表示总线被钳在低电平
void TouchReset(void)
{
u16 i=0;
data_output_set();
ds1990a_databit_low(); //复位脉冲
delay_us(500);//至少保持480us
ds1990a_databit_high(); //加速上升沿速度
delay_us(1);
data_input_set();//主机释放总线
//while( GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)); //等待DS18B20应答