• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: 其他
  • 标签: HDC1080  

资源简介

这个是HDC1080温湿度传感器的驱动代码,里面包含了一个.c文件和一个.h文件,此驱动方便移植只需少量修改就能应用到自己的工程里面。此驱动已经经过测试。https://blog.csdn.net/qq_27718231/article/details/107546132这个博客链接里面有我的测试结果。

资源截图

代码片段和文件信息

#include “hdc1080.h“
#include “main.h“


#define HDC1080_MDELAY(n)         LL_mDelay(n)       /* 用户提供一个毫秒延时 */
#define HDC1080_UDELAY(n)         Hdc1080_Udelay(n)  /* 微秒延时默认使用内部不精确延时,可使用外部精确延时 */   


#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)


/*
 * 函数名称: Hdc1080_LL_Init
 * 函数说明: 对HDC1080硬件初始化(I2C初始化)
 * 输入参数: 无
 * 返回参数: 无
 */
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);

}
/*
 * 函数名称: Hdc1080_Udelay
 * 函数说明: 内部微秒延时(不精确)
 * 输入参数: 无
 * 返回参数: 无
 */
static void Hdc1080_Udelay(uint8_t us)
{
  while(us--)
  {
    uint32_t n=16;
    while(n--);  
  }
}
/*
 * 函数名: 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);
}

/*
 * 函数名: I2C_Stop
 * 描述  : I2C停止信号
 * 输入  : 无
 * 返回  : 无
 */
static void I2C_Stop(void)
{
SDA_OUT();
SDA_L;
SCL_H;
HDC1080_UDELAY(10);
SDA_H;
HDC1080_UDELAY(10);
SCL_L;
}

/*
 * 函数名: I2C_Ack
 * 描述  : 应答信号(主机发送)
 * 输入  : 无
 * 返回  : 无
 */
static void I2C_Ack(void)
{
SDA_L;
HDC1080_UDELAY(10);
SCL_H;
HDC1080_UDELAY(10);
SCL_L;
HDC1080_UDELAY(10);
}

/*
 * 函数名: I2C_NoAck
 * 描述  : 非应答信号(主机发送)
 * 输入  : 无
 * 返回  : 无
 */
static void I2C_NoAck(void)
{
SDA_H;
HDC1080_UDELAY(10);
SCL_H;
HDC1080_UDELAY(10);
SCL_L;
HDC1080_UDELAY(10);
}

/*
 * 函数名: Wait_Ack
 * 描述  : 规定时间内检测从机发来的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;  
}

/*
 * 函数名: Send_Byte
 * 描述  : 发送一字节数据到SDA信号线上
 * 输入  : 无
 * 返回  : 0-发送成功,1-发送失败
 */
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


评论

共有 条评论