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.

[参考译文] TM4C123GH6PGE:关于基于 I2C 的 D6f-ph0505ad3

Guru**** 2343770 points
Other Parts Discussed in Thread: TM4C123GH6PGE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/605940/tm4c123gh6pge-regarding-i2c-based-d6f-ph0505ad3

器件型号:TM4C123GH6PGE

你(们)好

我目前正在  tm4c123gh6pge 板中进行 I2C 通信、主要是...

我想通过 I2C 通信收集传感器(D6F-PH0505AD3)到 tm4c123gh6pge 的压力值。 但是、我将获取未知值作为响应、并执行了如下代码

SysCtlPeripheralEnable (SYSCTL_Periph_I2C3);
SysCtlPeripheralReset (SYSCTL_Periph_I2C3);
GPIOPinConfigure (GPIO_PD0_I2C3SCL);
GPIOPinConfigure (GPIO_PD1_I2C3SDA);
GPIOPinTypeI2CSCL (GPIO_PORTD_BASE、GPIO_PIN_0);
GPIOPinTypeI2C (GPIO_PORTD_base、GPIO_PIN_1);
I2CMasterInitExpClk (I2C3_base、SysCtlClockGet ()、true);
I2CSlaveEnable (I2C3_base);
HWREG (I2C3_base + I2C_O_FIFOCTL)= 0x01;

I2CMasterSlaveAddrSet (I2C3_base、slave_address、true);
I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_START);
while (I2CMasterBusy (I2C3_base));

I2CMasterDataPut (I2C3_base、0x0B);                                                               //压力传感器初始化
I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_CONT);
while (I2CMasterBusy (I2C3_base));

I2CMasterDataPut (I2C3_base、0x00);
I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_FINISH);
while (I2CMasterBusy (I2C3_base));

//////////////// INTILIZED////////////////////////////////////////

while (1)

I2CMasterSlaveAddrSet (I2C3_base、slave_address、true);                                    //压力传感器的串行控制设置以写入数据
I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_START);
while (I2CMasterBusy (I2C3_base));

I2CMasterDataPut (I2C3_base、0x00);
I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_CONT);
while (I2CMasterBusy (I2C3_base));

I2CMasterDataPut (I2C3_base、0XD0);
I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_CONT);
while (I2CMasterBusy (I2C3_base));

I2CMasterDataPut (I2C3_base、0x40);
I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_CONT);
while (I2CMasterBusy (I2C3_base));

I2CMasterDataPut (I2C3_base、0X18);
I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_CONT);
while (I2CMasterBusy (I2C3_base));

I2CMasterDataPut (I2C3_base、0x06);
I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_FINISH);
while (I2CMasterBusy (I2C3_base));

I2CMasterSlaveAddrSet (I2C3_base、slave_address、true);
I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_STOP);
while (I2CMasterBusy (I2C3_base));

SysCtlDelay (SysCtlClockGet ()/30);
////地址写入////////////////////////////////////////////////////////////
I2CMasterSlaveAddrSet (I2C3_base、slave_address、true);                                                   //压力传感器的串行控制设置以读取数据
I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_START);
while (I2CMasterBusy (I2C3_base));

I2CMasterDataPut (I2C3_base、0x00);
I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_CONT);
while (I2CMasterBusy (I2C3_base));

I2CMasterDataPut (I2C3_base、0XD0);
I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_CONT);
while (I2CMasterBusy (I2C3_base));

I2CMasterDataPut (I2C3_base、0X51);
I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_CONT);
while (I2CMasterBusy (I2C3_base));

I2CMasterDataPut (I2C3_base、0x2C);
I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_CONT);
while (I2CMasterBusy (I2C3_base));

I2CMasterDataPut (I2C3_base、0x07);
I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_FINISH);
while (I2CMasterBusy (I2C3_base));

I2CMasterSlaveAddrSet (I2C3_base、slave_address、true);
I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_STOP);
while (I2CMasterBusy (I2C3_base));

SysCtlDelay (SysCtlClockGet ()/30);
////写入
I2CMasterSlaveAddrSet (I2C3_base、slave_address、true);                                                      //请求从 read_buffer0读取数据
I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_START);
while (I2CMasterBusy (I2C3_base));

I2CMasterDataPut (I2C3_base、0x07);
I2CMasterControl (I2C3_base、I2C_MASTER_CMD_SINGLE_SEND);
while (I2CMasterBusy (I2C3_base));

I2CMasterSlaveAddrSet (I2C3_base、SLAVE_Address1、true);
I2CMasterControl (I2C3_base、I2C_MASTER_CMD_BURST_SEND_START);
while (I2CMasterBusy (I2C3_base));


SysCtlDelay (SysCtlClockGet ());
SysCtlDelay (SysCtlClockGet ());

I2CMasterSlaveAddrSet (I2C3_base、SLAVE_Address1、true);                                               //从 read_buffer0读取数据
I2CMasterControl (I2C3_base、I2C_MASTER_CMD_SINGLE_Receive);
while (I2CMasterBusy (I2C3_base));
SLAVE_DATA=I2CMasterDataGet (I2C3_base);

I2CMasterSlaveAddrSet (I2C3_base、SLAVE_Address1、true);
I2CMasterControl (I2C3_base、I2C_MASTER_CMD_SINGLE_Receive);
while (I2CMasterBusy (I2C3_base));
Slave_data1=I2CMasterDataGet (I2C3_base);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Ravi、
    以下主题的海报具有类似的情况、从传感器接收到意外值。
    e2e.ti.com/.../2223960
    尽管通信标准不同、但该帖子可能会告诉您需要检查哪些内容、解决方案可能适用于您的案例。
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    虽然海报说明使用了"tm4c123gh6pge"-这不是 LPAD 上的 MCU -但必须注意的是、"123-LPAD"(令人愉悦且永远)将海报的 PDO 和 PD1 (他的 I2C 选择引脚)绑定到 PB6和 PB7!

    作为一家咨询和诊断公司-我们经常看到"123-LPAD"设计(大量)重复了这些设计、"旋转自己的电路板!"    因此、"这种不明智的、多 PIN、 .Cross-Connect 的传播"的可能性越来越大!

    因为我的眼睛可能已经"被过度征税"(从之前的 Rube Goldberg 图审阅),所以我认为没有一个"I2CMasterDataGet ()"函数调用出现在我的视图中!   这肯定会说明"未知的价值"(不知道如何张贴、也不知道通过模糊的报告向所有人展示-以及...)

    外部上拉 Rs (在 JTAG 上)和使用正确放置的"I2CMasterDataGet ()"-可能(开始)推动海报走向成功...

    [编辑] 12:50 CST -现在注意到对 "I2CMasterDataGet ()"的"两个"调用-但 (仅限于) 在最后5行海报代码中。   这两个呼叫(按原样隔离)是否足够?

    “ I2CMasterDataPut()”函数的“大量”调用“海报的从属设备需要”进行完整配置和设置,“数据获得”不需要?   如果是这样-我之前的诊断是错误的-但是(一些)明确宣布了计划的流程和目标(应该)-以防止 那些提供帮助的人-从"盲路进入"中删除。