我的代码是:
void I2C1_Init()
{
    uint32_t actualClock;
    PLIB_I2C_BaudRateSet ( MY_I2C_ID, MY_CLOCK_FREQUENCY, MY_BAUD_RATE);
    actualClock = PLIB_I2C_BaudRateGet ( MY_I2C_ID, MY_CLOCK_FREQUENCY );
    if(abs(actualClock-MY_BAUD_RATE) > MY_BAUD_RATE/10);
    {
        while(1);
    }
    I2C1CONbits.A10M = 0;
    I2C1CONbits.SMEN = 0;
    I2C1CONbits.ON = 1;
}
void I2C1_Start()
{
    I2C1CONbits.SEN = 1;
    while(I2C1STATbits.P);
}
void I2C1_SendData(uint8_t Data)
{
    I2C1TRNbits.I2CTRN = Data;
    while(I2C1STATbits.TBF);
}
void I2C1_Stop()
{
    I2C1CONbits.PEN = 1;
}
#define OAR1_ADD0_Set ((uint16_t)0x0001)
#define OAR1_ADD0_Reset ((uint16_t)0xFFFE)
void Send7bitsAddress(uint8_t Address,uint8_t I2C_Direction)
{
    if(I2C_Direction == 0)
    {
        Address |= OAR1_ADD0_Set;
    }
    else
    {
        Address &= OAR1_ADD0_Reset;
    }
    I2C1TRNbits.I2CTRN = Address;
}
void I2C_Byte_Write(uint8_t SlaveAddress,uint8_t REG_Address,uint8_t REG_data)
{
    I2C1_Start();
    Send7bitsAddress(SlaveAddress,1);
    while(I2C1STATbits.R_W);
    while(I2C1STATbits.TBF);
    I2C1_SendData(REG_Address);
    while(I2C1STATbits.TBF);
    I2C1_SendData(REG_data);
    while(I2C1STATbits.TBF);
    I2C1_Stop();
}
void MPU_6050_Init(void)
{
    I2C_Byte_Write(MPU6050_SlaveAddress,PWR_MGMT_1,0x00);
    delay(50000);
    I2C_Byte_Write(MPU6050_SlaveAddress,SMPLRT_DIV,0x07);
    delay(50000);
    I2C_Byte_Write(MPU6050_SlaveAddress,MPU6050_CONFIG,0x06);
    delay(50000);
    I2C_Byte_Write(MPU6050_SlaveAddress,GYRO_CONFIG,0x08);
    delay(50000);
    I2C_Byte_Write(MPU6050_SlaveAddress,ACCEL_CONFIG,0x08);
}
int main ( void )
{
    SYS_DEVCON_PerformanceConfig(SYS_CLK_FREQUENCY);
    I2C1_Init();
    while(1)
    {
       MPU_6050_Init();
    }
 
  /*
   Initialize the application. */
/* SYS_Initialize(NULL);
    while (true)
    {
        // Maintain the application's state machine.
        SYS_Tasks();
    }
 */
    /* Should not come here during normal operation */
    PLIB_ASSERT(false, "leaving main");
    
    return (EXIT_FAILURE);
}
但总是卡死在了while(1)的那句话,我想也想不明白我已经设置了100K的SCL频率,但还是有超过10%的误差。
第二个问题是卡在了while(I2C1STATbits.TBF);这句话,就是得不到应答。
求大神解救呀,希望我的问题能得到解决。

 
					
				
 
			
			
			
						
			 我要赚赏金
 我要赚赏金 STM32
STM32 MCU
MCU 通讯及无线技术
通讯及无线技术 物联网技术
物联网技术 电子DIY
电子DIY 板卡试用
板卡试用 基础知识
基础知识 软件与操作系统
软件与操作系统 我爱生活
我爱生活 小e食堂
小e食堂

