STM8S103是模拟从机,主机I2C给它不断的发数据,我能通过示波器看到有地址数据在SDA线上了,但是STM8S103始终检测不到其地址信号
I2C_SR1.ADDR 一直是0. 但是 STM8S103能检测到BUS busy,即I2C_SR3.BUSY=1。
这是为啥?
主机里设定的从机地址是0x02,STM8S103设定的自身地址也是0x02 (0x01, 0x04都试过不行)。
STM8S103作为从机 I2C_CCRH, I2C_CCRL需要设定吗?我也按照与主机相同的频率设定了。
我没有用库,我直接写程序配置的寄存器。初始配置:
CLK_PCKENR1 |= 0x01; // 打开I2C工作clock
I2C_FREQR |= 11; //输入外设时钟频率为11MHz
I2C_CR1 = 0x00; //禁止I2C外设
I2C_TRISER = 12; ///1000ns/90ns=11 11+1
I2C_CCRL = 105;
I2C_CCRH = 0;
I2C_CR1 |= 0x03; //开启I2C外设
I2C_CR2 |= 0x04; //当前接收字节返回应答
I2C_OARL = (0x02); //自身地址
I2C_OARH = 0x40; |