Embedded I2C无法启动

Embedded I2C无法启动,embedded,i2c,sdcc,stm8,Embedded,I2c,Sdcc,Stm8,我正在使用stm8s控制器和SDCC编译器。我正在连接基于SD130S7 I2C的RTC和控制器。我在交流中遇到了一个问题。我认为问题在于I2C本身没有启动 我正在使用STM8S103的开发板 我检查了逻辑分析仪,发现SDA引脚上只有一个脉冲 我很困惑为什么SDA有脉搏而SCL没有。(因为SCL是时钟,时钟应该首先出现) 您在Initialization only-SCL中发布的代码仅在总线事务期间处于活动状态。您最好使用STM8标准外设库或至少检查其代码。它包括一些例子。如果“已知良好”代码不

我正在使用stm8s控制器和SDCC编译器。我正在连接基于SD130S7 I2C的RTC和控制器。我在交流中遇到了一个问题。我认为问题在于I2C本身没有启动

我正在使用STM8S103的开发板

我检查了逻辑分析仪,发现SDA引脚上只有一个脉冲

我很困惑为什么SDA有脉搏而SCL没有。(因为SCL是时钟,时钟应该首先出现)


您在Initialization only-SCL中发布的代码仅在总线事务期间处于活动状态。您最好使用STM8标准外设库或至少检查其代码。它包括一些例子。如果“已知良好”代码不工作,则可能不是软件问题。在我的开发板上,我注意到它连接了一个低电平led,该led连接在I2C_SDA引脚上。可能是因为这个,我没有收到信号。但这真的是i2c失败的原因吗?我在使用STM8s标准库时遇到很多错误。我认为这是因为我错过了正确的道路。
void init_i2c_master(void)
{

    CLK_PCKENR1 |= 0x01;    //enable i2c clocks

    I2C_CR1 &= ~(0x01);     //Disable the i2c before configuration starts
    I2C_FREQR = 16;//  Set the internal clock 16 frequency (MHz).
    I2C_OARH = 0xC0;        //set 7 bit addressing mode
    I2C_TRISER = 16 + 1;
    I2C_CCRL = (uint8_t)(16*5);
    I2C_CCRH = 0;
    I2C_CR1 |= 0x01;        //enable i2c peripheral
    I2C_CR2 |= 0x04;
    I2C_CR2 &= ~0x08;
    I2C_ITR |= (0x01 | 0x02);
}