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.
工具/软件:Code Composer Studio
我很难将 I2C LCD 显示屏连接到 TM4C123G。 我正在尝试将其连接到 Grove Base BoosterPack 上的 J14。
Ralph -我仍然感到困惑- Fire/I 已经"成功连接"(123个及以前基于 LX4F 的 LPad)多次连接到由"I2C 和 SPI 和 UART"控制的(外部)器件-从未/从未需要此类" Booster Pack"。 (赦免,但“升压”——大声响铃——“超售”) 任何此类所谓“升压”的价值和/或目的是什么?
简单的"适当/足够功率的通过"和2个 I2C 信号(带上拉电阻)"是否证明"任何此类 I2C 器件都需要?"
我尝试将其连接到 J10。 引脚为6和7。
#define LCD_SLAVE_ADDR 0x51
这是我的 init 函数:
//初始化 I2C 模块1 // TI 示例代码 void InitI2C1 (void) 的细微修改版本{ //启用 I2C 模块1 SysCtlPeripheralEnable (SYSCTL_Periph_I2C1); //复位模块 SysCtlPeripheralReset (SYSCTL_Periph_I2C1); //启用包含 I2C 1的 GPIO 外设 SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA); //为端口 B2和 B3上的 I2C1功能配置引脚复用。 GPIOPinConfigure (GPIO_PA6_I2C1SCL);//引脚6 GPIOPinConfigure (GPIO_PA7_I2C1SDA);//PIN7 //为这些引脚选择 I2C 功能。 GPIOPinTypeI2CSCL (GPIO_Porta_base、GPIO_PIN_6); GPIOPinTypeI2C (GPIO_Porta_base、GPIO_PIN_7); //启用并初始化 I2C1主机模块。 使用的系统时钟 // I2C1模块。 最后一个参数设置 I2C 数据传输速率。 //如果为 false,则数据速率设置为100kbps,如果为 true,则数据速率将设置为 //设置为400kbps。 I2CMasterInitExpClk (I2C1_base、SysCtlClockGet ()、false); //清除 I2C FIFO HWREG (I2C1_base + I2C_O_FIFOCTL)= 80008000; }
以下是我的发送函数:
//向指定的从 器件发送 I2C 命令 void I2Csend (uint8_t slave_addr、uint8_t num_of _args、...) { uint8_t i; //告诉主模块何时将在总线上放置什么地址 //与从设备通信。 I2CMasterSlaveAddrSet (I2C1_base、slave_addr、false); //存储变量数量的参数列表 va_list vargs; //将 va_list 指定为"open"和最后一个固定参数 //so vargs 知道从何处开始查找 va_start (vargs、num_of _args); //将要发送的数据放入 FIFO 中 I2CMasterDataPut (I2C1_base、va_arg (vargs、uint32_t)); //如果只有一个参数,我们只需要使用 //单发送 I2C 函数 if (num_of _args == 1) { //从 MCU 发起数据发送 I2CMasterControl (I2C1_base、I2C_MASTER_CMD_SINGLE_SEND); //等待 MCU 完成传输。 while (I2CMasterBusy (I2C1_base)); //"close"变量参数列表 va_end (vargs); } //否则,我们开始在上传输多个字节 //I2C 总线 其他 { //从 MCU 发起数据发送 I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_START); //等待 MCU 完成传输。 while (I2CMasterBusy (I2C1_base)); //send num_of _args-2数据片段、使用 ///burse_send_contt 命令的 I2C 模块 for (i = 1;i <(num_of _args - 1);i++) { //将下一段数据放入 I2C FIFO 中 I2CMasterDataPut (I2C1_base、va_arg (vargs、uint32_t)); //发送刚刚放置到 FIFO 中的下一个数据 I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_CONT); //等待 MCU 完成传输。 while (I2CMasterBusy (I2C1_base)); } //将最后一段数据放入 I2C FIFO 中 I2CMasterDataPut (I2C1_base、va_arg (vargs、uint32_t)); //发送刚刚放置到 FIFO 中的下一个数据 I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_FINISH); //等待 MCU 完成传输。 while (I2CMasterBusy (I2C1_base)); //"Close"变量 args 列表 va_end (vargs); } }
这是我的写入函数:
空 WriteChar (uint8_t 字符) { I2CSend (LCD_SLAVE_ADDR、1、字符); }
我在 main 中调用它:
InitI2C1(); 字符 A ='A'; WriteChar (a);
但是、仍然没有输出。
海报彼得的问题是,“医生所要求的。” 著名的“不起作用”证明远程助手“无用”crüe……
使用任何此类"无升压电池组"似乎会增加成本、且(高度)价值值得怀疑。 真的-找到和使用两个 I2C 互连有多困难? (与往常一样-实际(外部)上拉 Rs 证明最有用-通常是强制性的。)