打印
[STM8]

STM8S I2C从机可发不可接,什么问题?

[复制链接]
4757|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wendyfox|  楼主 | 2010-8-12 17:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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;
}

}

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

使用特权

评论回复
板凳
jgphu| | 2010-8-12 17:55 | 只看该作者
我想问一下,楼主要没有进入中断? 我要问的就是:发数据可以进入中断,接收数据怎么会进不了中断呢。

同样都是主机发了从地址的器件地址,匹配的时候,就进入了中断那个时候也是接收啊。

使用特权

评论回复
地板
jgphu| | 2010-8-12 17:58 | 只看该作者
你再把问题说清楚一点?

使用特权

评论回复
5
wendyfox|  楼主 | 2010-8-13 09:17 | 只看该作者
#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。应该是没有问题的

使用特权

评论回复
6
wendyfox|  楼主 | 2010-8-13 11:17 | 只看该作者
问题就在这里I2C_CR2 = 0x02; 修改为I2C_CR2 |= 0x02;  原因是修改了,第一次成功后,没有再回复

使用特权

评论回复
7
jgphu| | 2010-8-13 13:04 | 只看该作者
这就是了,你第一次成功后了,你把应答给关掉了,还怎么接收啊。。。以后配寄存器要多一个心眼才是。

使用特权

评论回复
8
ajiantc| | 2011-4-15 21:37 | 只看该作者
真的是很难检查出这样的小错误。。。。。看到了这个帖子的回复,一看自己的程序。。。wokao。。

使用特权

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

本版积分规则

16

主题

33

帖子

0

粉丝