OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3781|回复: 2

HTU21D程序I2C 访问过不去,有做过HTU21的大侠指点下

[复制链接]

2

主题

2

帖子

0

精华

新手入门

积分
30
金钱
30
注册时间
2015-8-19
在线时间
0 小时
发表于 2015-8-19 19:09:31 | 显示全部楼层 |阅读模式
5金钱
调试HTU21D 温湿度传感器I2C总线是 复位HTU21D老是过不去 什么原因请问,我这个I2C总线上挂的时钟芯片已经调试成功
void HTU21_Reset(void)
{
   /*****************************  
e_Error error = NO_ERROR;                    //error variable
U16 i;
vHRD_I2C_Start();
error |= eHRD_I2C_WriteByte (I2C_ADR_W);     // I2C Adr
error |= eHRD_I2C_WriteByte (SOFT_RESET);    // Command
vHRD_I2C_Stop();
for(i=0;i<=12000;i++);
return error;
*****************************/
uint8_t *data;
    uint8_t *num;
*num=1;
data[0]= SOFT_RESET;
   
I2C_WriteBuffer( data, I2C_ADR_W,  SOFT_RESET,num);

    delay_ms(10);
 
}


uint32_t I2C_WriteBuffer(uint8_t *data, uint8_t I2CAddr, uint16_t WriteAddr, uint8_t *NumByteToWrite)
{   
uint32_t I2C_Timeout, data_num = 0;
I2C_Timeout = I2C_LONG_TIMEOUT;
while(I2C_GetFlagStatus(I2C2, I2C_ISR_BUSY) != RESET)
{
if((I2C_Timeout--) == 0) 
{
return I2C_FAIL;
}
}
/* Configure slave address, nbytes, reload and generate start */
I2C_TransferHandling(I2C2, I2CAddr, 1, I2C_Reload_Mode, I2C_Generate_Start_Write);

/* Wait until TXIS flag is set */
I2C_Timeout = I2C_LONG_TIMEOUT;  
while(I2C_GetFlagStatus(I2C2, I2C_ISR_TXIS) == RESET)
{
if((I2C_Timeout--) == 0) 
{
return I2C_FAIL;
}
}

/* Send memory address */
I2C_SendData(I2C2, (uint8_t)WriteAddr);

/* Wait until TCR flag is set */
I2C_Timeout = I2C_LONG_TIMEOUT;
while(I2C_GetFlagStatus(I2C2, I2C_ISR_TCR) == RESET)
{
if((I2C_Timeout--) == 0) 
{
return I2C_FAIL;
}
}

I2C_TransferHandling(I2C2, I2CAddr, *NumByteToWrite, I2C_AutoEnd_Mode, I2C_No_StartStop);

while (data_num != (*NumByteToWrite))
{      
I2C_Timeout = I2C_LONG_TIMEOUT;  
while(I2C_GetFlagStatus(I2C2, I2C_ISR_TXIS) == RESET)
{
if((I2C_Timeout--) == 0) 
{
return I2C_FAIL;
}
}

/* Write data to TXDR */
I2C_SendData(I2C2, data[data_num]);

/* Update number of transmitted data */
data_num++;   
}  
/* Wait until TXIS flag is set */
I2C_Timeout = I2C_LONG_TIMEOUT;
while(I2C_GetFlagStatus(I2C2, I2C_ISR_STOPF) == RESET)
{
if((I2C_Timeout--) == 0) 
{
return I2C_FAIL;
}
}  

/* Clear STOPF flag */
I2C_ClearFlag(I2C2, I2C_ISR_STOPF);

/* If all operations OK, return sEE_OK (0) */
return I2C_OK;
}

生命不熄,学习不止
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165537
金钱
165537
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-21 23:44:19 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2016-4-2
在线时间
9 小时
发表于 2017-10-6 17:14:21 | 显示全部楼层
解决了吗,我的HTU21D也读不到数据
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-13 21:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表