[STM8] 求助关于STM8硬件I2C使芯片重写地址的问题

[复制链接]
1525|8
 楼主| 吕泽帅 发表于 2018-1-15 10:55 | 显示全部楼层 |阅读模式
目前使用一款MCP4728芯片,但他只有4个通道,而我需要扩展到8通道,也就是要在添加一个芯片,此时便需要对其中一片重写地址。
如下方图所示,需要在其第2字节第8位之后和ACK之前,将LDAC置0
那么现在的问题是倘若程序为:   
//上方程序省略
while(!I2C_CheckEvent(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));  
I2C_SendData(0x61); //第2字节
GPIO_WriteLow(GPIOC,GPIO_PIN_3);
while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));    //停留此处,不再向下执行
I2C_SendData(0x66);//第3字节
//下方程序省略

那么第2字节数据发完后,将LDAC引脚置0,此时其ACK便会被影响,程序卡住。若GPIO_WriteLow(GPIOC,GPIO_PIN_3);这一句不写程序正常向下执行。
请问有什么办法能使发送完第8位数据后,同时LDAC置0,而不影响ACK。
望大神们能指点一二。
QQ截图20180115104228.png QQ截图20180115104239.png
 楼主| 吕泽帅 发表于 2018-1-18 15:11 | 显示全部楼层
本帖最后由 吕泽帅 于 2018-1-18 15:13 编辑

问题已解决,在拉低引脚电平之前添加延时程序来校正波形,就ok了
  if(Rewriting_Selection==1)    I2C_SendData(0x65);
    nop_delay(58);//校正LDAC发送时间
    GPIO_WriteLow(GPIOC,GPIO_PIN_3);

MCP4728例程几乎没有,而硬件I2C本身就是个坑,自己写的这些天各种问题令我是十分头疼,既然成功了就把结果留下,希望今后有人再用时不用走弯路。以上。
 楼主| 吕泽帅 发表于 2018-1-15 11:44 | 显示全部楼层
df_flying 发表于 2018-1-15 17:44 | 显示全部楼层
这个建议还是IO模拟一个试试吧。。。硬件ACK这样做很容易丢掉的
wanduzi 发表于 2018-1-15 19:52 | 显示全部楼层
也可以搞个选择位,让这个选择位来操作是哪个。
 楼主| 吕泽帅 发表于 2018-1-17 11:44 | 显示全部楼层
。。。还有哪位大神 有好的办法,现在还未解决。。。
LianBinbing 发表于 2018-1-18 16:13 | 显示全部楼层
顶起!
jiekou001 发表于 2018-1-18 21:14 | 显示全部楼层
这个跟其他的I2C通信接口一致吗
 楼主| 吕泽帅 发表于 2018-1-23 10:36 | 显示全部楼层
jiekou001 发表于 2018-1-18 21:14
这个跟其他的I2C通信接口一致吗

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

本版积分规则

16

主题

43

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部