关于STM32 IIC多字节读取的问题

关于STM32 IIC多字节读取的问题,第1张

void IIC_Ack(void)

{

IIC_SCL=0;

SDA_OUT();

Delay_Us(2);

IIC_SCL=1;

Delay_Us(2);

IIC_SCL=0;

}

我也碰到相同的问题,现已解决。

问题是出 restart的时序上。

SCL为低时,拉高SDA,

SCL再拉高,

SDA拉低,

SCL拉低。

看是否能帮到你。

ReadAddr是个16bit的数据,可分为高8bit和低8bit

两个可能:

1高8位为寄存器地址的高8位,低8位为寄存器地址的低8位。就像if里面走的

2高8位为从机地址(slave地址)的一部分,也是7位的slave地址(所以要左移一位(ReadAddr/256)<<1),而且是以0xA0为基址的从机地址,所以从机地址应该是:(0XA0+((ReadAddr/256)<<1)),低8位为寄存器地址的低8位。就像else里面的走的

以上 是我的理解 可能有所偏差

我的理解是,读数据的时候,是从机控制总线,因此必须提前把sda释放(也就是拉高)。否则从机将不能改变总线。sda为1后,主机控制scl=1,然后,从机根据自己要发送的数据选择将sda置为1或0(即在scl=1时,从机改变sda)。

而在发送数据时,主机控制总线,在scl=0时,sda被主机改变;scl=1时,sda不变,并被从机读取。(scl=0时,主机改变sda)

应答时,相当于读取一位数据,同样是在scl=1时,由从机改变sda。

而起始、结束时,是由 主机 控制sda。在scl为1时,sda的任何改变都将被视为起始、终止信号。

个人理解,如有错误请赐教!

ps 当然也可以理解为 在读取时仍然是在scl=0时,从机改变sda,不过也不影响逻辑,怎样容易怎样理解呗

以上就是关于关于STM32 IIC多字节读取的问题全部的内容,包括:关于STM32 IIC多字节读取的问题、IIC无法从RDA5820中读取数据、IIC程序问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9676131.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存