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

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。。。不过写的应该没问题
ts2000 回答时间: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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版