求助关于STM8硬件I2C使芯片重写地址的问题
本帖最后由 伸手不及放手为空 于 2018-1-15 10:49 编辑目前使用一款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。
望大神们能指点一二。
顶起 本帖最后由 toofree 于 2018-1-25 10:44 编辑
现在有个问题,你的“I2C_SendData(0x61); //第2字节”,这行程序执行后,到了第几位了?
LDAC必须到第8位正脉冲结束之后,并且在第9位的ACK位时钟拉高之前,由高置低才行。
建议用示波器看一下真实波形,到底LDAC在哪位来的?
可以先读一下地址看能不能行,如果读不行的话,写肯定更不行了。
这是从Microchip官网下载的手册
IIC的基本操作是:
读地址,获取数据
写地址,写地址数据; 我觉得有可能是地址位不正确,或者数据未正常发出。
建议使用示波器,看看波形是否正确。
页:
[1]