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.
大家好、
我遇到了无法在 TM4C 上初始化 I2C 的问题。 这是我的代码。 我想 i2c send 函数是可以的、但我认为我的问题是要初始化 i2c3_base。 我搜索了一些其他代码(示例或其他代码)、但无法使其为真。 请提供帮助。
#include
#include
#include
#include "inc/hw_i2c.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_gpio.h"
#include "driverlib/gpio.h"
#include "driverlib/i2c.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "utils/uartstdio.h"
typedef 枚举 I2CResultTypes
{
ACK_Received、
ACK_ERROR
}I2CResultType;
typedef 枚举 I2CTypes
{
I2C0、
I2C1、
I2C2、
I2C3
}I2CType;
typedef 枚举 I2cRegisters
{
VREG_A = 0x11、
VREG_B、
NVREG_A = 0x21、
NVREG_B、
}I2c 注册;
typedef 枚举 I2cAddes
{
ADDRESS0 = 0x28、
地址1 = 0x29、
地址2 = 0x2A、
地址3 = 0x2B、
地址4 = 0x2C、
地址5 = 0x2D、
地址6 = 0x2E、
地址7 = 0x2F
}I2c 地址;
I2CResultType I2C_Send (I2CType i2cPort、unsigned char slaveAddress、unsigned char regAddress、unsigned char 数据)
{
INT 结果;
I2CMasterIntClear (i2cPort);
I2CMasterSlaveAddrSet (i2cPort、slaveAddress、0);
I2CMasterDataPut (i2cPort、regAddress);
I2CMasterControl (i2cPort、I2C_MASTER_CMD_BURST_SEND_FINISH);
while (I2CMasterBusy (i2cPort));
结果= I2CMasterErr (i2cPort);
if (结果!= I2C_MASTER_ERR_NONE)
{
返回 ACK_ERROR;
}
I2CMasterDataPut (i2cPort、data);
I2CMasterControl (i2cPort、I2C_MASTER_CMD_BURST_SEND_FINISH);
while (I2CMasterBusy (i2cPort));
结果= I2CMasterErr (i2cPort);
if (结果!= I2C_MASTER_ERR_NONE)
{
返回 ACK_ERROR;
}
返回 ACK_received;
}
void MAX5479_SetValue2 (无符号字符值)
{
I2CResultType 结果= ACK_ERROR;
I2CType I2C = I2C3;
I2cAddress 地址= 0x29;
I2c 寄存器 regAddress =0x11;
结果= I2C_Send (I2C3、0x29、0x11、值);
如果(结果= ACK_received)
{
asm ("NOP");
}
其他
{
asm ("NOP");
}
}
空 I2CInit (空)
{
SysCtlPeripheralEnable (SYSCTL_Periph_I2C3);
SysCtlPeripheralReset (SYSCTL_Periph_I2C3);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);
//SysCtlPeripheralReset (SYSCTL_Periph_GPIOG);
GPIOPinTypeI2CSCL (GPIO_PORTG_BASE、GPIO_PIN_0);
GPIOPinTypeI2C (GPIO_PORTG_base、GPIO_PIN_1);
GPIOPinConfigure (GPIO_PG0_I2C3SCL);
GPIOPinConfigure (GPIO_PG1_I2C3SDA);
I2CMasterInitExpClk (I2C3_base、SysCtlClockGet ()、false);
}
内部
main (空)
{
volatile uint32_t ui32Loop;
SysCtlClockSet (SYSCTL_SYSDIV_3 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_25MHz);
I2CInit();
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOK);
//
//检查是否启用了外设访问。
//
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOK))
{
}
GPIOPinTypeGPIOOutput (GPIO_PORTK_base、GPIO_PIN_3);
while (1)
{
MAX5479_SetValue2 (20);
}
}
TM4C 系列有两个版本(123和129)、它们需要不同的代码处理。
编辑您的"主题/标题"(TM4C)以包含您的实际 MCU 版本(即 TM4C123)将证明您的优势。
感谢您-感谢您-下面是问题/意见:
问题:
[引用 user="halo_rmz"]我无法在 TM4C123上初始化 I2C
您是如何得出这一结论的? (未显示支持/理由。 是否无法证明"init"是正确的-并且(其他)出现了问题?)
[引用 user="halo_rmz"]我猜 i2c send 函数是可以的
您如何移动(超出)"猜测"? 您是否可以使用测试装置-理想情况下是示波器? 和已部署(更合适)的外部上拉电阻器? (MCU 的价值太高、无法证明其强大!) 正确的诊断取决于/要求、"事实"。
注释:
您的代码(非常明显)兼容并蓄-展现出极大的理解和良好的努力。 然而、"多条件"和"极大灵活性"的演示(正如您的代码所示)可能不会证明"理想"、从而"快速轻松"(即不会发生意外)项目成功! 详尽的多条件代码与"kiss"相差很远(非常远)。 (kiss =简单、战略性、高度专注、仅基本要素-旨在创建"易于衡量、狭隘的目标!")
此类(kiss)为"项目成功"提供了"最佳和最短"的途径。 代码"邀请问题"的"范围"以及来自多个来源的代码、极大地使任何调试变得复杂! 通常-必须(选择性)禁用 (许多)"此类详尽代码"的部分、以便(任何)有机会 "检测故障"。 "以更有限的代码库开始"-使(该)正常工作-(仅此)添加(许多)额外的"位/段?"是否会简单得多? 另请注意-这些额外的"位/片段"可以(很少)帮助您进行初始调试...
最重要的是,有这么多 (伪装/侵入) “非基本要素”... 何处(以及如何)... 您是否(甚至)开始?
商号/我会"亲吻"-(根据多年的经验)我很相信、"亲吻" 会、"速度、轻松和提升"您的成功-也会。
您会注意到您的问题、即 "TM4C I2C 问题" - 但您的问题是否更有可能证明您的问题" 过于宽泛"的方法和/或方法?"
[报价 USER="CB1_MOBIT)]您是否可以访问测试设备-理想情况下是一个范围? 和已部署(更合适)的外部上拉电阻器?[/quot]
也许(合理的)伟大的头脑-做-(有时)想得一样。 忽视上拉经常会降低、但海报"跑得越多"却显得突出、至少对本记者来说...