主题中讨论的其他器件:TMP102
因此、我修复了 I2C 上的第一个问题、我首先要获取的是在 while 环路中查看
在我的逻辑分析仪上传输虚拟字节。 我的当前代码如下所示
#include "driverlib.h" #include #include /*全局定义*/ #define CS_MCLK_NEVed_frequency in_kHz 16000 /**<以 kHz 为单位的 MCLK 目标频率*/ #define CS_MCLK_FLLREF_Ratio 488/**< MCLK/FLLRef 比率*/ int main (void) { volatile uint32_t i; uint8_t transmitData; WDT_A_HOLD (WDT_A_base); GPIO_setAsInputPinWithPullUp电 阻(GPIO_PORT_P3、GPIO_PIN2 | GPIO_PIN6); GPIO_setPeripheralModuleFunctionInputPin ( GPIO_PORT_P3、 GPIO_PIN2 + GPIO_PIN6、 GPIO_PRIMARY_MODULE_FUNCTION ); /* *禁用 GPIO 上电默认高阻抗模式以激活 *先前配置的端口设置 * PMM_unlockLPM5 (); //初始化传输数据包 transmitData = 0x01; //初始化主设备 EUSCI_B_I2C_initMasterParam param ={0}; param.selectClockSource = EUSCI_B_I2C_CLOCKSOURCE_SMCLK; param.i2cClk = CS_getSMCLK (); param.datarate = EUSCI_B_I2C_SET_DATA_RATE_400KBPS; param.byteCounterThreshold = 1; param.autoSTOPGeneration = EUSCI_B_I2C_NO_AUTO_STOP; EUSCI_B_I2C_initMaster (EUSCI_B1_base、¶m); //指定从器件地址 EUSCI_B_I2C_setSlaveAddress (EUSCI_B1_BASE、 0x48 ); //设置为发送模式 EUSCI_B_I2C_setMode (EUSCI_B1_BASE、 EUSCI_B_I2C_Transmit 模式 ); //启用 I2C 模块以启动操作 EUSCI_B_I2C_ENABLE (EUSCI_B1_BASE); while (1) { EUSCI_B_I2C_masterSendSingleByte (EUSCI_B1_BASE、 0xAA //首先发送地址的 MSB ); for (i=100000;i>0; i--); } }
通常希望在逻辑分析仪上看到一个试图寻址0x48的传输序列、由于外设未连接、所有这些都以一个 NAK 结束。
我得到的是单次传输、如下面的屏幕截图所示
然后 SCL 线路保持低电平。
通过调试代码、我发现程序卡在 eusci_b_i2c.c 文件的第192行、函数 EUSCI_B_I2C_masterSendSingleByte ()的以下指令
//轮询发送中断标志。 while (!(HWREG16 (baseAddress + OFS_UCBxIFG)& UCTXIFG));
这是因为未连接外设吗? 如何解决此问题? 提前感谢!

