打印
[STM8]

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

[复制链接]
965|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
目前使用一款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。
望大神们能指点一二。

来自 2楼
吕泽帅|  楼主 | 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这样做很容易丢掉的

使用特权

评论回复
5
wanduzi| | 2018-1-15 19:52 | 只看该作者
也可以搞个选择位,让这个选择位来操作是哪个。

使用特权

评论回复
6
吕泽帅|  楼主 | 2018-1-17 11:44 | 只看该作者
。。。还有哪位大神 有好的办法,现在还未解决。。。

使用特权

评论回复
7
LianBinbing| | 2018-1-18 16:13 | 只看该作者
顶起!

使用特权

评论回复
8
jiekou001| | 2018-1-18 21:14 | 只看该作者
这个跟其他的I2C通信接口一致吗

使用特权

评论回复
9
吕泽帅|  楼主 | 2018-1-23 10:36 | 只看该作者
jiekou001 发表于 2018-1-18 21:14
这个跟其他的I2C通信接口一致吗

一致

使用特权

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

本版积分规则

16

主题

43

帖子

1

粉丝