繁体   English   中英

Arduino Nano 和 STM32 Blue Pill 上的 I2C 无法检测到所有设备

[英]I2C on Arduino Nano and on STM32 Blue Pill cannot detect all devices

我对 I2C 设备有一个奇怪的问题。 我在同一条 I2C 总线上使用了 RTC(DS3231 + 24LC32 EEPROM)、基于 SSH1106 的 1.3 英寸 OLED 显示器和 Si5351 时钟发生器。 它们各自的地址是0x680x570x3C0x60

在 Arduino 上,模块使用 5V 接口和 Vcc,I2C 扫描仪正确检测到所有设备(均为 3.3 伏设备,模块包含低压降稳定器和电平转换,应该在 5V 和 3.3V I2C 总线下都能正常工作)。 i2c_scanner草图中,所有设备都被正确检测到。 当我在一个草图中使用 RTC、U8Glib2 库用于 OLED 和 Si5351 设置时,显示器没有初始化,Si5351A 没有产生任何信号。

我认为这是由于堆栈溢出,因为 Arduino 设备只有 2KB RAM,编译器报告动态变量使用了 1980 字节 RAM。 当我重写整个草图以使用简化的 U8x8 库(不使用 RAM 缓冲区来显示数据)时,我得到了能够显示必要信息和驱动 Si5351A 的工作程序。

然后我从面包板上取出两个模块 Si5351 和 OLED 并将它们连接到 STM32 板(Blue Pill)。 有趣的是,在我连接 Si5351A 之前,i2c_scanner 检测到了 OLED(地址0x3C )。 连接 Si5351 后,它停止检测 OLED:-(

知道这怎么可能吗? 特别是,为什么在 AVR 版本的 Wires 库中它可以工作,但在 STM32 版本中却不行? 以及为什么地址为 0x3C0x60的设备之间似乎存在冲突(后者似乎在寻址0x3C时“覆盖”了 ACK 位,如果它真的是 I2C 总线,这应该是不可能的......)

另外,OLED 显示器的模块 PCB 指示其 I2C 地址应为0x7E ( 0x3C << 1 ),因此 7 位和 8 位地址之间似乎存在一些混淆。

我试图在各种社区讨论和教程中找到解释,但无济于事。

我感到很困惑..

可能是:十进制的 60 也是十六进制的 0x3C ...您没有提供所有代码,所以我猜您可能会写 60 而不是 0x60。

谢谢,阿米特

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM