
最近在调试使用IIC作为从机接收和发送数据,用两个STM8的MCU进行通信,但是现在有一个问题,当主机先打开电源,从机再打开电源,主机可以正常接收到从机发送来的数据,但是如果从机不断电,主机断电再上电,主机则无法接收到数据。主机采用模拟的方式,重复读取数据。从机程序如下:@far @interrupt void I2C_IRQHandle(void) { if((I2C_SR1 & 0X02) == 0x02) // 判读地址是否匹配 addr = 1; { temp1 = I2C_SR1; temp3 = I2C_SR3; } else if((I2C_SR1&0x40) == 0x40) { i = 0; addr = I2C_DR; } else if((I2C_SR1&0x80) == 0x80) //发送数据 txe = 1 { if(addr == 0x80) I2C_DR = s1[i]; if(addr == 0x90) I2C_DR = s2[i]; i++; if(i == SIZE) { i = 0; } } else if(I2C_SR2&0x04) { nCounter++; I2C_SR2 &= ~0x04; I2C_CR2 |= 0x02; } }, 请问下各位大神,这是什么原因呢? |
基本上,若程序在某种情况下可以依照我们所希望的正常运行
我会先假设程序是可行的
1. 先确认主从电源及共地 (没3V接5V这事吧??)
2. 去下载官方程序,跑跑看. 没问题去debug吧
另外,
1. 主从是在同一块板上吗
是的话,怎不把电源接一起或是拉个EN脚让主机控制呢?
2. IIC是一次性控制还是持续通讯的?
若是通讯到一半断电又不初始化,
主从状态寄存器不匹配,我认为也是会有问题的。