Other Parts Discussed in Thread: MSP430F5529
您好!
我在与 DS3231 RTC 芯片通信时遇到一些问题。 下面是我的代码。
我在 Launchpad 上使用 UCB.S 和 UCB1SDA 引脚。
实时时钟的地址为0xD0、其中包括 R/W 位。 我不确定是否应该将其向左移动并仅发送7位地址。
因此、我注释掉 i2cAdd = i2cAdd >> 1。 不管怎样、我尝试发送8位(包括 R/W)和7位、但仍然无法与芯片通信。 我在这里丢失了什么吗?
顺便说一下、我注意到当函数"USCI_B_I2C_masterSendMultiByteNext (USCI_B1_base、data);"被调用时、代码卡在函数 WriteRTCByte 中
请参阅以下代码
谢谢。
AJ
void InitializeRTC (void) { //将 I2C 引脚分配给 USCI_B1 GPIO_setPeripheralModuleFunctionInputPin ( GPIO_PORT_P4、GPIO_PIN1 + GPIO_PIN2); //初始化主设备 USCI_B_I2C_initMasterParam param ={0}; param.selectClockSource = USCI_B_I2C_CLOCKSOURCE_SMCLK; param.i2cClk = UCS_getSMCLK (); param.datarate = USCI_B_I2C_SET_DATA_RATE_100KBPS; USCI_B_I2C_initMaster (USCI_B1_base、¶m); //启用 I2C 模块以启动操作 USCI_B_I2C_ENABLE (USCI_B1_BASE); }//end void InitializeRTC (void) /********* / void WriteRTCByte (uint8_t i2cAdd、uint8_t rtcAdd、uint8_t data) { //i2cAdd = i2cAdd >> 1; //指定从器件地址 USCI_B_I2C_setSlaveAddress (USCI_B1_BASE、i2cADD); //设置发送模式 USCI_B_I2C_setMode (USCI_B1_BASE、USCI_B_I2C_Transmit 模式); USCI_B_I2C_masterSendMultiByteStart (USCI_B1_base、rtcADD); USCI_B_I2C_masterSendMultiByteNext (USCI_B1_base、data); USCI_B_I2C_masterSendMultiByteStop (USCI_B1_BASE); while (USCI_B_I2C_isBusBusBusy (USCI_B1_base)); }//结束 void WriteRTCByte (uint8_t i2cADD、uint8_t rtcADD、uint8_t DATA) /********* / uint8_t ReadRTCByte (uint8_t i2cADD、uint8_t rtcADD) { uint8_t i2cByte; //i2cAdd = i2cAdd >> 1; //指定从器件地址 USCI_B_I2C_setSlaveAddress (USCI_B1_BASE、i2cADD); //设置发送模式 USCI_B_I2C_setMode (USCI_B1_BASE、USCI_B_I2C_Transmit 模式); USCI_B_I2C_masterSendMultiByteStart (USCI_B1_base、rtcADD); while (USCI_B_I2C_isBusy (USCI_B1_BASE)); //指定从器件地址 USCI_B_I2C_setSlaveAddress (USCI_B1_BASE、(i2cADD | 0x01)); //设置接收模式 USCI_B_I2C_setMode (USCI_B1_base、USCI_B_I2C_Receive_mode); USCI_B_I2C_masterReceiveSingleStart (USCI_B1_BASE); i2cByte = USCI_B_I2C_masterReceiveSingle (USCI_B1_base); while (USCI_B_I2C_isBusy (USCI_B1_base)); return (i2cByte); //end uint8_t ReadRTCByte (uint8_t i2cADD、uint8_t rtcADD) /********* /