This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Tiva LaunchPad 和TMP275(温感芯片)I2C通信 无法实现

Other Parts Discussed in Thread: TM4C123GH6PM

#include "stdint.h"
#include "stdbool.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_i2c.h"
#include "inc/hw_ints.h"
#include "driverlib/interrupt.h"
#include "driverlib/i2c.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/rom.h"
#include "driverlib/rom_map.h"
#include "driverlib/pin_map.h"

#define SLAVE_ADDRESS 0x4F//7位地址:1001111

void Init_I2C_Comm() {
	// 使能I2C1外设
	SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C1);

	// 使能PortA外设端口
	SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

	// 配置PA6、PA7为上拉端口
	GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_6 | GPIO_PIN_7,
			GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);

	// PA6配置为I2C协议时钟信号、 PA7配置为I2C协议数据信号
	GPIOPinConfigure(GPIO_PA6_I2C1SCL);
	GPIOPinConfigure(GPIO_PA7_I2C1SDA);
	GPIOPinTypeI2C(GPIO_PORTA_BASE, GPIO_PIN_6 | GPIO_PIN_7);
	GPIOPinTypeI2CSCL(GPIO_PORTA_BASE, GPIO_PIN_6);

	// 初始化I2C主机模块。设置总线速度和使能主机模块
	I2CMasterInitExpClk(I2C1_BASE, SysCtlClockGet(), false);

	// 使能I2C主机模块
	I2CMasterEnable(I2C1_BASE);
}


uint32_t I2C_TMP_MSB ;			// 保存通过I2C读取温度的8位高字节
uint32_t I2C_TMP_LSB;			// 保存通过I2C读取温度的8位低字节


int main(void) {
	SysCtlClockSet(
			SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN
					| SYSCTL_XTAL_16MHZ);
	SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
	GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
	Init_I2C_Comm();

	while (1) {
		I2CMasterSlaveAddrSet(I2C1_BASE, SLAVE_ADDRESS, false);	//true:主机初始化读;false:主机初始化写。
		I2CMasterDataPut(I2C1_BASE, 0x00);		//(主机基址,发送数据缓存)写pointer register
		I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_SINGLE_SEND);//(主机地址,设置所处状态)
		while (I2CMasterBusBusy(I2C1_BASE))
			;			//(if I2C busy return true;if I2C idle return false)
		I2CMasterSlaveAddrSet(I2C1_BASE, SLAVE_ADDRESS, true);
		GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 4);
		I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_RECEIVE_START);
		while (I2CMasterBusy(I2C1_BASE))
			;
		I2C_TMP_MSB = I2CMasterDataGet(I2C1_BASE);
		I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_RECEIVE_FINISH);
		while (I2CMasterBusy(I2C1_BASE))
			;
		I2C_TMP_LSB = I2CMasterDataGet(I2C1_BASE);
	}
}