/**
******************************************************************************
* @file Project/User/Files/sht2x.c
* @authorZhouJinfei
* @version 1.0.3
* @date 2015-02-08
* @brief TAHS-SHT2X
******************************************************************************
* @attention
*
*
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "main.h"
/* Private defines -----------------------------------------------------------*/
#define SHT2X_SCL_GPIO GPIOC
#define SHT2X_SCL_GPIO_PIN GPIO_PIN_6
#define SHT2X_SCL_WH_M() GPIO_Init(SHT2X_SCL_GPIO, SHT2X_SCL_GPIO_PIN, GPIO_MODE_OUT_PP_HIGH_FAST)
#define SHT2X_SCL_WL_M() GPIO_Init(SHT2X_SCL_GPIO, SHT2X_SCL_GPIO_PIN, GPIO_MODE_OUT_PP_LOW_FAST)
#define SHT2X_SCL_WH() GPIO_WriteHigh(SHT2X_SCL_GPIO, SHT2X_SCL_GPIO_PIN)
#define SHT2X_SCL_WL() GPIO_WriteLow(SHT2X_SCL_GPIO, SHT2X_SCL_GPIO_PIN)
#define SHT2X_SDA_GPIO GPIOC
#define SHT2X_SDA_GPIO_PIN GPIO_PIN_7
#define SHT2X_SDA_WH_M() GPIO_Init(SHT2X_SDA_GPIO, SHT2X_SDA_GPIO_PIN, GPIO_MODE_OUT_PP_HIGH_FAST)
#define SHT2X_SDA_WL_M() GPIO_Init(SHT2X_SDA_GPIO, SHT2X_SDA_GPIO_PIN, GPIO_MODE_OUT_PP_LOW_FAST)
#define SHT2X_SDA_RV_M() GPIO_Init(SHT2X_SDA_GPIO, SHT2X_SDA_GPIO_PIN, GPIO_MODE_IN_PU_NO_IT)
#define SHT2X_SDA_WH() GPIO_WriteHigh(SHT2X_SDA_GPIO, SHT2X_SDA_GPIO_PIN)
#define SHT2X_SDA_WL() GPIO_WriteLow(SHT2X_SDA_GPIO, SHT2X_SDA_GPIO_PIN)
#define SHT2X_SDA_RV() GPIO_ReadInputPin(SHT2X_SDA_GPIO, SHT2X_SDA_GPIO_PIN)
/* Private function prototypes -----------------------------------------------*/
uint16_t SHT2X_Temperature;
uint16_t SHT2X_Humidity;
/* Private functions ---------------------------------------------------------*/
void SHT2X_I2C_Delay(uint16_t t)
{
t *= 3;
while(--t);
}
void SHT2X_I2C_Start(void)
{
//SDA=1,SCL=1;
SHT2X_SDA_WH_M();
SHT2X_SCL_WH_M();
SHT2X_I2C_Delay(100);
//SDA=0;
SHT2X_SDA_WL();
SHT2X_I2C_Delay(100);
//SCL=0;
SHT2X_SCL_WL();
SHT2X_I2C_Delay(100);
}
void SHT2X_I2C_Stop(void)
{
//SDA=0,SCL=0;
SHT2X_SDA_WL_M();
SHT2X_SCL_WL_M();
SHT2X_I2C_Delay(100);
//SDA=1;
SHT2X_SDA_WH();
SHT2X_I2C_Delay(100);
//SCL=1;
SHT2X_SCL_WH();
SHT2X_I2C_Delay(100);
}
uint8_t SHT2X_I2C_Byte_Write(uint8_t dat)
{
SHT2X_SCL_WL();
for(uint8_t i=0;i<8;i )
{
if(dat&0x80)
{
SHT2X_SDA_WH_M();
}
else
{
SHT2X_SDA_WL_M();
}
SHT2X_I2C_Delay(25);
SHT2X_SCL_WH();
SHT2X_I2C_Delay(50);
SHT2X_SCL_WL();
SHT2X_I2C_Delay(25);
dat<<=1;
}
//ACK
SHT2X_SCL_WH();
SHT2X_SDA_RV_M();
SHT2X_I2C_Delay(25);
if(SHT2X_SDA_RV())
{
SHT2X_SCL_WL();
SHT2X_I2C_Delay(50);
return 0;
}
else
{
SHT2X_SCL_WL();
SHT2X_I2C_Delay(50);
return 1;
}
}
uint8_t SHT2X_I2C_Byte_Read(uint8_t ack)
{
uint8_t dat=0x00;
SHT2X_SCL_WL();
SHT2X_SDA_RV_M();
for(uint8_t i=0;i<8;i++)
{
dat<<=1;
SHT2X_SCL_WH();
SHT2X_I2C_Delay(50);
if(SHT2X_SDA_RV())
{
dat|=0x01;
}
else
{
dat&=0xfe;
}
SHT2X_SCL_WL();
SHT2X_I2C_Delay(50);
}
//ACK
if(ack==0)
{
SHT2X_SDA_WL_M();
}
else
{
SHT2X_SDA_WH_M();
}
SHT2X_I2C_Delay(50);
SHT2X_SCL_WH();
SHT2X_I2C_Delay(50);
SHT2X_SCL_WL();
SHT2X_SDA_WH_M();
SHT2X_I2C_Delay(50);
return dat;
}
void SHT2X_Delay(uint16_t t)
{
while(t--)
{
for(int i=0;i<100;i++);
}
}
/**
* @brief SHT2X_Reset
* @param
* @retval
*****************************************************************************/
void SHT2X_Reset(void)
{
SHT2X_I2C_Start();
SHT2X_I2C_Byte_Write(0x80); //
SHT2X_I2C_Byte_Write(0xFE); //
SHT2X_I2C_Stop();
}
/**
* @brief SHT2X_ReadValue
* @param
* @retval
*****************************************************************************/
void SHT2X_Read(uint8_t order)
{
SHT2X_I2C_Start();
if(SHT2X_I2C_Byte_Write(0x80))
{
if(SHT2X_I2C_Byte_Write(order))
{
do
{
SHT2X_Delay(1000);
SHT2X_I2C_Start();
}
while(SHT2X_I2C_Byte_Write(0x81) == 0); //*/
uint8_t d1=SHT2X_I2C_Byte_Read(0);
uint8_t d2=SHT2X_I2C_Byte_Read(0);
uint8_t d3=SHT2X_I2C_Byte_Read(1);
SHT2X_I2C_Stop();
SHT2X_Delay(1000);
/*
d1=0x63;
d2=0x52;
d3=0x63;
SHT2X_Temperature=(uint16_t)(d1<<8|d2);
SHT2X_Humidity=(uint16_t)(d3<<8|0x00);
return;
*/
if(order==0xf3)
{
SHT2X_Temperature=(uint16_t)(d1<<8|d2);
}
else
{
SHT2X_Humidity=(uint16_t)(d1<<8|d2);
}
}
}
}
/**
* @brief SHT2X_ReadValue
* @param
* @retval
*****************************************************************************/
void SHT2X_ReadValue(void)
{
SHT2X_Read(0xF5);
SHT2X_Delay(1000);
SHT2X_Delay(1000);
SHT2X_Delay(1000);
SHT2X_Delay(1000);
SHT2X_Delay(1000);
SHT2X_Read(0xF3);
SHT2X_Delay(1000);
SHT2X_Delay(1000);
SHT2X_Delay(1000);
SHT2X_Delay(1000);
SHT2X_Delay(1000);
}
/**
* @brief SHT2X_Configuration(void)
* @param
* @retval
*****************************************************************************/
void SHT2X_Configuration(void)
{
GPIO_DeInit(SHT2X_SCL_GPIO);
GPIO_DeInit(SHT2X_SDA_GPIO);
SHT2X_SCL_WH_M();
SHT2X_SDA_WH_M();
SHT2X_Reset();
}
/***************************************************************END OF FILE****/