你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm8 模拟i2c

[复制链接]
00xiaodong 提问时间:2015-6-15 16:41 /
我用stm8s105k4的IO模拟i2c协议,与MS9282通信。stm8是主机,MS9282是从机。
主机对从机读,能够从MS9282的寄存器读到数据,但是却不能对MS9282写数据,求大神指点。
另附代码:
void Write_16(ui addr,ui reg,ui data)
{
                                uc reg_h,reg_l,data_h,data_l;
        I2C_Start();
                               
        I2C_Write(addr);
        if(I2C_GetAck())
        {
                                        I2C_Stop();
        }
                               
                                reg_l=reg&0xff;
                                I2C_Write(reg_l);
                                 if(I2C_GetAck())
        {
                                        I2C_Stop();
        }
                               
                                reg_h=reg>>8;
        I2C_Write(reg_h);
        if(I2C_GetAck())
        {
                                        I2C_Stop();
        }
                               
                                I2C_Start();
                               
                                I2C_Write(addr);
        if(I2C_GetAck())
        {
                                        I2C_Stop();
        }
                               
                                data_l=data&0xff;
                                I2C_Write(data_l);
        if(I2C_GetAck())
        {
                                        I2C_Stop();
        }
                               
                                data_h=data>>8;
                                I2C_Write(data_h);
        if(I2C_GetAck())
        {
                                        I2C_Stop();
        }
                               
        I2C_Stop();
}


ui Read_16(ui addr,ui reg)
{                               
                                ui dat;
                                uc reg_h,reg_l,data_h,data_l;
        I2C_Start();
        I2C_Write(addr);
        if(I2C_GetAck())
        {
                I2C_Stop();
        }
                                reg_l=reg&0xff;
                                I2C_Write(reg_l);
                                 if(I2C_GetAck())
        {
                I2C_Stop();
        }
                                reg_h=reg>>8;
        I2C_Write(reg_h);

        if(I2C_GetAck())
        {
                I2C_Stop();
        }
                                I2C_Start();
                                I2C_Write(addr |=0x01);
        if(I2C_GetAck())
        {
                I2C_Stop();
        }
                                data_l=I2C_Read();
                                I2C_PutAck(0);
                                data_h=I2C_Read();
                                I2C_PutAck(1);
        I2C_Stop();
                                dat=(data_h<<8)|data_l;
                                return dat;
}

收藏 评论6 发布时间:2015-6-15 16:41

举报

6个回答
MCU之路 回答时间:2015-6-16 11:41:27
没用过
alvin_ 回答时间:2015-6-16 11:58:54
没用过,帮顶~不过,stm8自己没有I2C吗?
小蚂蚁快溜跑 回答时间:2015-6-16 12:55:35
stm8有自己的I2C。。。不过写的应该没问题
小小超 回答时间:2015-6-16 14:00:24
能用模拟的。估计你写的时序不对。
00xiaodong 回答时间:2015-6-16 17:43:08
回复各位:stm8有i2c,不过我板子上的单片机的i2c坏了,所以才采用模拟的。
我模拟的时序在同一块板子上能够对EEPROM进行读写(EEPROM是8位寄存器),而这个MS9282是16位寄存器,就是这点区别。
glacier 回答时间:2017-8-7 16:35:40
那你可以上传一下9282的PDF我们才能看下你IIC是否正确

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版