資源簡介
這個是HDC1080溫濕度傳感器的驅(qū)動代碼,里面包含了一個.c文件和一個.h文件,此驅(qū)動方便移植只需少量修改就能應(yīng)用到自己的工程里面。此驅(qū)動已經(jīng)經(jīng)過測試。https://blog.csdn.net/qq_27718231/article/details/107546132這個博客鏈接里面有我的測試結(jié)果。

代碼片段和文件信息
#include?“hdc1080.h“
#include?“main.h“
#define?HDC1080_MDELAY(n)?????????LL_mDelay(n)???????/*?用戶提供一個毫秒延時?*/
#define?HDC1080_UDELAY(n)?????????Hdc1080_Udelay(n)??/*?微秒延時默認(rèn)使用內(nèi)部不精確延時,可使用外部精確延時?*/???
#define?SDA_IN()??????????????LL_GPIO_SetPinMode(GPIOE?LL_GPIO_PIN_14?LL_GPIO_MODE_INPUT)
#define?SDA_OUT()?????????????LL_GPIO_SetPinMode(GPIOE?LL_GPIO_PIN_14?LL_GPIO_MODE_OUTPUT)
#define?READ_SDA()????????????LL_GPIO_IsInputPinSet(GPIOE?LL_GPIO_PIN_14)
#define?SDA_H?????????????????LL_GPIO_SetOutputPin(GPIOE?LL_GPIO_PIN_14)
#define?SDA_L?????????????????LL_GPIO_ResetOutputPin(GPIOE?LL_GPIO_PIN_14)
#define?SCL_H?????????????????LL_GPIO_SetOutputPin(GPIOE?LL_GPIO_PIN_15)
#define?SCL_L?????????????????LL_GPIO_ResetOutputPin(GPIOE?LL_GPIO_PIN_15)
/*
?*?函數(shù)名稱:?Hdc1080_LL_Init
?*?函數(shù)說明:?對HDC1080硬件初始化(I2C初始化)
?*?輸入?yún)?shù):?無
?*?返回參數(shù):?無
?*/
static?void?Hdc1080_LL_Init(void)
{
??LL_GPIO_InitTypeDef?GPIO_InitStruct={0};
??
??LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOE);
??/*?PE14->SDA?PE15->SCL?*/
??LL_GPIO_SetOutputPin(GPIOE?LL_GPIO_PIN_14);
??LL_GPIO_SetOutputPin(GPIOE?LL_GPIO_PIN_15);
??
??GPIO_InitStruct.Pin=LL_GPIO_PIN_14|LL_GPIO_PIN_15;
??GPIO_InitStruct.Mode=LL_GPIO_MODE_OUTPUT;
??GPIO_InitStruct.Pull=LL_GPIO_PULL_NO;
??GPIO_InitStruct.Speed=LL_GPIO_SPEED_FREQ_MEDIUM;
??GPIO_InitStruct.OutputType=LL_GPIO_OUTPUT_PUSHPULL;
??LL_GPIO_Init(GPIOE?&GPIO_InitStruct);
}
/*
?*?函數(shù)名稱:?Hdc1080_Udelay
?*?函數(shù)說明:?內(nèi)部微秒延時(不精確)
?*?輸入?yún)?shù):?無
?*?返回參數(shù):?無
?*/
static?void?Hdc1080_Udelay(uint8_t?us)
{
??while(us--)
??{
????uint32_t?n=16;
????while(n--);??
??}
}
/*
?*?函數(shù)名:?I2C_Start
?*?描述??:?I2C起始信號
?*?輸入??:?無
?*?返回??:?無
?*/
static?void?I2C_Start(void)
{
SDA_H;
SCL_H;
HDC1080_UDELAY(10);
SDA_L;
HDC1080_UDELAY(10);
SCL_L;
HDC1080_UDELAY(10);
}
/*
?*?函數(shù)名:?I2C_Stop
?*?描述??:?I2C停止信號
?*?輸入??:?無
?*?返回??:?無
?*/
static?void?I2C_Stop(void)
{
SDA_OUT();
SDA_L;
SCL_H;
HDC1080_UDELAY(10);
SDA_H;
HDC1080_UDELAY(10);
SCL_L;
}
/*
?*?函數(shù)名:?I2C_Ack
?*?描述??:?應(yīng)答信號(主機(jī)發(fā)送)
?*?輸入??:?無
?*?返回??:?無
?*/
static?void?I2C_Ack(void)
{
SDA_L;
HDC1080_UDELAY(10);
SCL_H;
HDC1080_UDELAY(10);
SCL_L;
HDC1080_UDELAY(10);
}
/*
?*?函數(shù)名:?I2C_NoAck
?*?描述??:?非應(yīng)答信號(主機(jī)發(fā)送)
?*?輸入??:?無
?*?返回??:?無
?*/
static?void?I2C_NoAck(void)
{
SDA_H;
HDC1080_UDELAY(10);
SCL_H;
HDC1080_UDELAY(10);
SCL_L;
HDC1080_UDELAY(10);
}
/*
?*?函數(shù)名:?Wait_Ack
?*?描述??:?規(guī)定時間內(nèi)檢測從機(jī)發(fā)來的Ack
?*?輸入??:?無
?*?返回??:?0-收到,1-未收到
?*/
static?uint8_t?Wait_Ack(void)
{
uint8_t?tiemout=0;
SDA_H;
HDC1080_UDELAY(10);
SDA_IN(); ???
SCL_H;
HDC1080_UDELAY(10); ?
while(READ_SDA())
{
tiemout++;
if(tiemout>250)
{
I2C_Stop();
return?1;
}
}
SCL_L;
??SDA_OUT();
return?0;??
}
/*
?*?函數(shù)名:?Send_Byte
?*?描述??:?發(fā)送一字節(jié)數(shù)據(jù)到SDA信號線上
?*?輸入??:?無
?*?返回??:?0-發(fā)送成功,1-發(fā)送失敗
?*/
static?uint8_t?Send_Byte(uint8_t?data)
{
uint8_t?i;
for(i=0;?i<8;?i++)
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????7950??2020-07-23?22:22??hdc1080.c
?????文件????????187??2020-07-23?19:27??hdc1080.h
-----------?---------??----------?-----??----
?????????????????8137????????????????????2
評論
共有 條評論