7725|8

61

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM8SI2C从机可发不可接,什么问题? [复制链接]

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;
}

}

我写成这样子,发现现在是从机发数据是没问题,从机接收数据不行,没有进入中断。
此帖出自stm32/stm8论坛

最新回复

那如果是STM8s作为从机呢?主函数应该写什么才会使其进入中断  详情 回复 发表于 2017-8-9 23:57
点赞 关注
 

回复
举报

68

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 成功传输一次正确的数据后就进不去了。程序还正常运行。
此帖出自stm32/stm8论坛
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我想问一下,楼主要没有进入中断? 我要问的就是:发数据可以进入中断,接收数据怎么会进不了中断呢。

同样都是主机发了从地址的器件地址,匹配的时候,就进入了中断那个时候也是接收啊。
此帖出自stm32/stm8论坛
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 你再把问题说清楚一点?
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

5
 
#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。应该是没有问题的
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 问题就在这里I2C_CR2 = 0x02; 修改为I2C_CR2 |= 0x02;  原因是修改了,第一次成功后,没有再回复
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 这就是了,你第一次成功后了,你把应答给关掉了,还怎么接收啊。。。以后配寄存器要多一个心眼才是。
此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

8
 
从机程序该如何写,小弟求楼主请教请教
此帖出自stm32/stm8论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

9
 
ytmitxihc85 发表于 2010-8-13 11:17
问题就在这里I2C_CR2 = 0x02; 修改为I2C_CR2 |= 0x02;  原因是修改了,第一次成功后,没有 ...

那如果是STM8s作为从机呢?主函数应该写什么才会使其进入中断
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表