STM8S105S4 I2C这样配置可以从机发数据,从机接数据就不行,是什么问题
//I2C端口初始化
GPIO_Init(GPIOE,GPIO_PIN_1|GPIO_PIN_2, GPIO_MODE_OUT_OD_HIZ_SLOW);
void I2C_init(void)
{
I2C_CCRH = 0; //标准I2C接口
I2C_CCRL = 80 ;
I2C_FREQR = 16;
I2C_OARL = (I2CAddr<<1);
I2C_OARH = 0x40;
I2C_ITR = 0x06;
I2C_CR1 = 0x01;
I2C_CR2 |= 0x04;
}
@far @interrupt void I2C_Handler (void)
{
u8 state1,state2,state3;
state1 = I2C_SR1;
state2 = I2C_SR2;
state3 = I2C_SR3;
//地址匹配
if((state1&0x02)!=0){I2C_CR2 |= 0x04;}
//接收到数据,需要处理
if( (state1& 0x40) != 0)
{
I2C_CR2 |= 0x04;
temp1 = I2C_DR;
SetOutput(temp1);
}
//从机需要发送数据
if((state1 & 0x80) != 0)
{
I2C_DR = num++;
}
if((state2 & 0x04) != 0)I2C_SR2 &= ~0x04; //应答失败,清除该位
if((state1 & 0x10) != 0)
{
I2C_CR2 = 0x02;
}
}
我写成这样子,发现现在是从机发数据是没问题,从机接收数据不行,没有进入中断。 |