TI中文支持网
TI专业的中文技术问题搜集分享网站

TM4C I2C SHT30

自己写了一下SHT30温湿度传感器的读取值函数,但是读不上来数呀。大侠,帮忙看看哪的问题。代码如下,先谢谢了

#include <stdint.h>

 #include <stdbool.h>

 #include "inc/hw_ints.h"

 #include "inc/hw_memmap.h"

 #include "inc/hw_types.h"

#include "driverlib/rom.h"

#include "driverlib/pin_map.h"

#include "driverlib/sysctl.h"

 #include "driverlib/systick.h"

#include "driverlib/gpio.h"

#include "driverlib/i2c.h"

#include "sht30_init.h"

#define  i2cAddWrite           0x88

#define  i2cAddRead            0x89

#define CMD_MEAS_PERI_4_HI   0x2334

#define CMD_FETCH_COMM       0xE000

typedef struct {  uint8_t dostate;  

                          uint8_t count;

                           uint8_t putData[6];   }i2c_parameter   i2c0;

void sht30_init(void)

{  

    uint8_t i;

  SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0);

//  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);  

GPIOPinConfigure(GPIO_PB2_I2C0SCL);   

GPIOPinConfigure(GPIO_PB3_I2C0SDA);   

GPIOPinTypeI2CSCL(GPIO_PORTB_BASE, GPIO_PIN_2);   

 GPIOPinTypeI2C(GPIO_PORTB_BASE,  GPIO_PIN_3 );  

 I2CMasterInitExpClk(I2C0_BASE, SysCtlClockGet(), false);

   I2CMasterEnable(I2C0_BASE);   

 for(i=0;i<50;i++)  

 {    SysCtlDelay(SysCtlClockGet()/3000);

 }

}

int read_Periodidata(void)

 {  

uint8_t j,rop;

//写连续读指令0x2334

I2CMasterSlaveAddrSet(I2C0_BASE, i2cAddWrite, false);  

 I2CMasterDataPut(I2C0_BASE, 0x23);  

I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_START);  

while(I2CMasterBusBusy(I2C0_BASE));  

  I2CMasterDataPut(I2C0_BASE, 0x34);  

 I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH);  

while(I2CMasterBusBusy(I2C0_BASE));

//开始读取温湿度

I2CMasterSlaveAddrSet(I2C0_BASE, i2cAddWrite, false);

I2CMasterDataPut(I2C0_BASE, 0xe0);  

 I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_START);  

 while(I2CMasterBusBusy(I2C0_BASE));

I2CMasterDataPut(I2C0_BASE, 0x00);  

I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_CONT);  

 while(I2CMasterBusBusy(I2C0_BASE));  

 I2CMasterSlaveAddrSet(I2C0_BASE, i2cAddRead, true);  

I2CMasterControl(I2C0_BASE,I2C_MASTER_CMD_BURST_RECEIVE_START);

for(j = 0; j < 5; j++)  

 {   

while(I2CMasterBusBusy(I2C0_BASE));  

  i2c0.putData[j] = I2CMasterDataGet(I2C0_BASE);   

 if(j==(5-1))     

 I2CMasterControl(I2C0_BASE,I2C_MASTER_CMD_BURST_RECEIVE_FINISH);  

  else     

 I2CMasterControl(I2C0_BASE,I2C_MASTER_CMD_BURST_RECEIVE_CONT);

  }  

while(I2CMasterBusBusy(I2C0_BASE));

  rop = I2CMasterErr(I2C0_BASE);

  return rop;

 

 }

 

 

 

 

 

 

 

 

user4935483:

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);端口B在主函数开始已经使能。上传一下SHT30数据手册,现在没有思路了

xyz549040622:

回复 user4935483:

代码有点长 ,没有细看。建议你在官方例程的基础上修改。应该八九不离十就可以了,再不行就抓波形,看看是波形没出来,还是波形错误。

user4935483:

回复 xyz549040622:

I2CMasterSlaveAddrSet(I2C0_BASE, i2cAddWrite, false);  

 I2CMasterDataPut(I2C0_BASE, i2cAddWrite);

  I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_START);  

 while(I2CMasterBusBusy(I2C0_BASE));到while这就一直等待了,不知道为啥

 

xyz549040622:

回复 user4935483:

主机一直处于忙的状态,数据就没发出去,检查初始化的问题。

赞(0)
未经允许不得转载:TI中文支持网 » TM4C I2C SHT30
分享到: 更多 (0)