• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

STM32与AT24C512通信

drepa 2017-08-21 浏览量:1035

如题,采用模拟I2C总线通信,为什么一定要设置SDA一时输入一时输出呢?全部设为输出也没什么问题吧?

1.JPG

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 本来如果是对IIC总线要求不严格的器件,或是自带推挽输出和上拉输入的器件,如DS3231,就不需要切换输入输出模式。而AT24CXX这种EEPROM是开漏输出+浮空输入,即SDA引脚没有任何的上下拉,是需要主机自带上拉才能正常通信的,那么就需要主机端设置上拉输入或者推挽输出,这样,就不需要切换输入输出模式了,楼主这个程序应该是设置成浮空输入了,因此切换输出的时候就会通信不正常,即SDA引脚收到的数据全都是0x00。至于楼上说的IIC协议的SDA引脚要切换输入输出模式,那是照本宣科,你们要知道,在8位机时代,拿89C51为例子,这个单片机哪来的输入输出模式啊?输出输出唯二的区别就是:输入模式有斯密特触发器,而输出模式只有MOS管,其本质的不同,不过是上下拉能力不同而已。

    • 发布于 2017-08-22
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:7
  • 你的SDA线上,要有数据的输出,也要读入数据。所以要进行输入与输出的转换。

    你再看看I2C的说明与协议时序就知道了。

    • 发布于2017-08-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 不行,如果在读入数据的时候,你的IO模式为输出,那么IO内部的输出MOS是接通的,它会输出一个固定的电平,影响IDR寄存器中的内容,你读到的数据很可能是错的EKREE%)O)48{A%3SVJNEB60.png
    • 发布于2017-08-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 不行,I2C协议数据线只有一根--SDA,要实现双向通讯,在MCU端,就只能切换GPIO的输入输出方向,从而实现数据位的读和写。
    • 发布于2017-08-21
    • 举报
    • 评论 0
    • 0
    • 0

  • IIC总线本来就是一条线时间一条线数据的,数据仅用一条线,自然有时要收有时要发

    stm32上IIC总线的详细介绍请参考http://blog.sina.cn/dpool/blog/s/blog_981380d00102uzwu.html

    • 发布于2017-08-22
    • 举报
    • 评论 0
    • 0
    • 0

  • stm32设置开漏模式就不需要这样了
    • 发布于2017-08-22
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

STM32与AT24C512通信