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.

[参考译文] CCS/MSP430FR2311:使 I2C 正常工作时遇到问题

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/732681/ccs-msp430fr2311-trouble-getting-i2c-to-work

器件型号:MSP430FR2311

工具/软件:Code Composer Studio

您好!  

我尝试使用 DriverLib 来使用 I2C 模块。 我的代码与 masterTxSingle 示例非常相似、但在第一次转换后、应用程序停止。 我可以看到应用程序在第40行崩溃
特别是在"eusci_b_i2c"库中的"while (!(HWREG16 (baseAddress + OFS_UCBxIFG)& UCTXIFG)"循环中、MCU 发送以下0b10101100 (使用示波器读取)、之后 SCL 保持低电平。 我在发送前禁用了中断并清除了标志、但这会继续发生。 您能否查看我的代码、或者硬件中可能缺少什么内容? 我已经在 SCL 和 SDA 中连接了10千欧的上拉电阻器。

#include 

#define SLAVE_ADD 0xD6
#define CS_SMCLK_NEW_FREQUENCY IN_kHz 1000
#define CS_SMCLK_FLLREF_RA比30

uint32_t freq;
uint8_t Add_review;

int main (void){
//停止看门狗计时器
WDT_A_HOLD (WDT_A_base);

//设置比率和所需的 MCLK 频率并初始化 DCO
CS_initFLSettle (CS_SMCLK_frequised_in_kHz、CS_SMCLK_FLLREF_Ratio);
CS_initClockSignal (CS_MCLK、CS_DCOCLKDIV_SELECT、CS_CLOCK_DIVIDER_1);
CS_initClockSignal (CS_SMCLK、CS_DCOCLKDIV_SELECT、CS_CLOCK_DIVIDER_1);

FREQ=CS_getSMCLK();
add_review = slave_Add|0x01;

GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P1、GPIO_PIN2+GPIO_PIN3、GPIO_PRIMARY_MODULE_Function);
GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN0);
PMM_unlockLPM5 ();

EUSCI_B_I2C_initMasterParam i2cConfig ={0};
i2cConfig.selectClockSource = EUSCI_B_I2C_CLOCKSOURCE_SMCLK;
i2cConfig.i2cClk = CS_getSMCLK ();
i2cConfig.datarate = EUSCI_B_I2C_SET_DATA_RATE 100KBPS;
i2cConfig.byteCounterThreshold = 1;
i2cConfig.autoSTOPGeneration = EUSCI_B_I2C_NO_AUTO_STOP;
EUSCI_B_I2C_initMaster (EUSCI_B0_BASE、&i2cConfig);
EUSCI_B_I2C_setSlaveAddress (EUSCI_B0_BASE、SLAVE_ADD);
EUSCI_B_I2C_setMode (EUSCI_B0_BASE、EUSCI_B_I2C_Transmit 模式);
EUSCI_B_I2C_ENABLE (EUSCI_B0_BASE);

执行{
///EUSCI_B_I2C_masterSendStart (EUSCI_B0_BASE);
GPIO_toggleOutputOnPin (GPIO_PORT_P1、GPIO_PIN0);
EUSCI_B_I2C_masterSendSingleByte (EUSCI_B0_BASE、0x2F); //Lectura del DeviceID
///EUSCI_B_I2C_masterSendStart (EUSCI_B0_BASE);
while (EUSCI_B_I2C_isBusy (EUSCI_B0_BASE));
_DELAY_CYCLES (50);

//EUSCI_B_I2C_DISABLE (EUSCI_B0_BASE);
} while (1);

} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好

    您需要检查以下三点:
    从器件地址是对的?
    2.您可以尝试降低 CLK 的频率吗?
    3.如果没有任何帮助,您可以尝试使用两个 MSP430 launchpad 来测试代码 fishrt 吗?\

    此致
    Gary
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    第九位为1、这是一个 NACK。 换言之、从器件没有应答。

    μ I²C 从机地址有7位、因此0xD6不能是有效地址。 我想实际地址是0x6B?