打印
[应用相关]

STM8S I2C问题

[复制链接]
1014|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Mattheww|  楼主 | 2017-9-26 09:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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;
}

}

我写成这样子,发现现在是从机发数据是没问题,从机接收数据不行,没有进入中断。
沙发
Erichk| | 2017-9-26 10:26 | 只看该作者
  成功传输一次正确的数据后就进不去了。程序还正常运行。

使用特权

评论回复
板凳
迪卡| | 2017-9-26 10:45 | 只看该作者
楼主要没有进入中断?

使用特权

评论回复
地板
冰河w| | 2017-9-26 11:01 | 只看该作者
发数据可以进入中断,接收数据怎么会进不了中断呢

使用特权

评论回复
5
Thorald| | 2017-9-26 11:04 | 只看该作者
主机发了从地址的器件地址,匹配的时候,就进入了中断那个时候也是接收

使用特权

评论回复
6
Bjorn| | 2017-9-26 11:20 | 只看该作者
#define I2CAddr 0x01
在主机
  //主机写数据,从机接,这个不行
   Soft_I2C_Start();
    Soft_I2C_Write(0x02);
    Soft_I2C_Write(0xAA);
    Soft_I2C_Stop();
    //主机接收数据。没有运行上一段程序,主机可以接收数据,运行上段,主机接收数据都是255
    Soft_I2C_Start();
    Soft_I2C_Write(0x03);
    var0=Soft_I2C_Read(1);
    Soft_I2C_Stop();
    这个软I2C在控制其它设备是没有问题的,主机用的芯片是STM32。应该是没有问题的

使用特权

评论回复
7
Rollo| | 2017-9-26 11:30 | 只看该作者
问题就在这里I2C_CR2 = 0x02; 修改为I2C_CR2 |= 0x02;&nbsp;&nbsp;原因是修改了,第一次成功后,没有再回复

使用特权

评论回复
8
Rangar| | 2017-9-26 18:18 | 只看该作者
第一次成功后了,你把应答给关掉了,还怎么接收啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

85

主题

500

帖子

0

粉丝