大家好、在我使用"EUSCI_B_I2C_ENABLE (EUSCI_B1_BASE)"启用 I2C 后、UCBxSTATW 中的 BUSY 位始终置1;我是否做错了?
我在 SDA 和 SCL 上有10k 上拉电阻器,我测量了它们,它们都是高电平。
还尝试发送"HWREG16 (EUSCI_B1_BASE + OFS_UCBxCTLW0)|= UCTXSTP;"的停止
void Inicializacion (void) { WDT_A_HOLD (WDT_A_base); //Configuracion DCO Con FLL、12MHz //////////////////////////////////////////////////////////////////////// //可用于存储当前时钟值的变量 uint32_t clockValue = 0; //设置 DCO FLL 基准= REFO CS_initClockSignal (CS_FLLREF、CS_REFOCLK_select、CS_Clock_divider); //设置 ACLK = REFO CS_initClockSignal (CS_ACLK、CS_REFOCLK_select、CS_Clock_divider); //设置比率和所需的 MCLK 频率并初始化 DCO CS_initFLSettle (CS_MCLK_frequised_in_kHz、CS_MCLK_FLLREF_Ratio);//12MHz 执行{ //如果在超时后仍然无法清除振荡器故障标志, //在此处捕获并等待。 clockValue = CS_clearAllOscFlagsWithTimeout (1000); } while (clockValue!= 0); //clockValue = CS_getSMCLK ();//调试 GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P4、I2CSCL、GPIO_primary_module_function); GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P4、I2CSDA、 GPIO_PRIMARY_MODULE_FUNCTION); PMM_unlockLPM5 (); //I2C 400kbps //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 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 = 0; param.autoSTOPGeneration = EUSCI_B_I2C_NO_AUTO_STOP; //__delay_cycles (500); EUSCI_B_I2C_initMaster (EUSCI_B1_base、¶m); //指定从器件地址 EUSCI_B_I2C_setSlaveAddress (EUSCI_B1_BASE、SLAVE_ADDRESS); //将主设备设置为接收模式 EUSCI_B_I2C_setMode (EUSCI_B1_BASE、EUSCI_B_I2C_Transmit 模式); //启用 I2C 模块以启动操作 EUSCI_B_I2C_ENABLE (EUSCI_B1_BASE); _bis_SR_register (GIE); //启用中断 //init TLC while (EUSCI_B_I2C_isBusy (EUSCI_B1_BASE));//调试 }