当前位置: 首页 > 知识库问答 >
问题:

STM32 I2C将SDA设为低电平

阎慈
2023-03-14

有什么方法可以将STM32的I2C1连接的SDA和SCL引脚设置为低电平或高电平信号?

我使用安全芯片,我必须发送唤醒条件,条件如下:

如果SDA保持在低电平的时间超过60us,设备将退出低功率模式,延迟1500us后,它将准备接收I2C命令。

我已经尝试使用HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);切换实际引脚,但这不起作用。

我已经用STM32CubeMX配置了我的项目。

谢谢你的帮助。

共有3个答案

丁星火
2023-03-14

我建议使用I2C通道的设备的从地址的自身地址设置如下代码。

I2C_InitStructure.I2C_OwnAddress1 = 0x30; // the unique slave address of the deviecs

因为主机可以发送广播操作而不是唯一操作。

丌官哲彦
2023-03-14

当你初始化I2C时,GPIO管脚模式被设置为交替模式,所以写HAL命令对它不起作用。

使用普通的HAL库在这方面帮不了你。您必须使用stm32寄存器自行配置I2C协议。

晋安国
2023-03-14

在I2C中,START条件需要从高到低的转换,如果您然后发送一个虚拟地址0,将生成一个NACK(或者更确切地说,没有任何响应将被解释为NACK)。在正常事务中,软件会通过生成重复的START或STOP条件来响应NACK,但是这必须在软件中完成,因此您所要做的就是1.5ms。此后,您可以使用设备的实际地址生成START,如果设备正在运行,它将生成一个确认字符。

我不熟悉HAL库驱动程序,坦率地说,文档非常糟糕,但它可能没有给您必要的控制,您必须在寄存器级别访问I2C外围设备,至少在这个过程中是这样。您可以尝试一个零长度的I2C_MasterRequestWrite()调用,以寻址零,然后是一个延迟。在这里,示波器可用于确保产生预期的信号定时。

 类似资料:
  • 问题内容: 在numpy中我有一个数组 将超低值设置为零的最快,最简单的方法是什么 效率不是最重要的。 问题答案: 嗯 我对此并不满意,但这似乎可行: 您可以根据自己的问题选择容忍度。我通常使用一个数量级以上 但这取决于问题。

  • 我将构建一个波斯应用程序(RTL)。我的应用程序包括一个列表视图和一个导航抽屉。 我在应用程序标签中添加了清单 在方法中:

  • 问题内容: 当设备的电池电量不足时,我想关闭我的应用程序。我在清单中添加了以下代码。 并在接收器中遵循以下代码 我正在模拟器上运行该应用程序,并使用telnet更改了电池电量。它会更改电池电量,但不会显示任何吐司或记录。 我想念什么?任何帮助表示赞赏!谢谢。 问题答案: 在代码中而不是在文件中注册您的接收器。 或使用接收器收听电池电量。

  • TL;博士;如何使用PDFBox生成文档真实性下的“低分辨率”PDF 我正在尝试使用Java创建PDF,并尝试在文档安全性下将printing属性的值设置为低分辨率。 我之所以这么做,是因为我正在开发的应用程序偶然发现了这个chrome bughttps://bugs.chromium.org/p/chromium/issues/detail?id=1307219我试图了解它的哪一部分设置了这样的

  • 我有一个2d numpy数组(28x28),希望将随机值设置为值小于50的所有索引。我尝试了一些方法: 这并不正确,因为所有选择的指数都获得相同的随机值。我想要不同的随机值。 上面的代码解决了这个问题,但我认为它不能有效地工作,因为它在处理大数据集时变得非常慢。 有没有更好的功能?

  • 问题内容: 我们都知道Java在(被认为是“常用” )范围内为数字缓存(以及一些其他类型)。 缓存的设计如下: 我知道可以通过为JVM提供参数来扩展值: 我不明白的是为什么我们不允许覆盖该值? 请注意,我并不是想找到一种解决方法,而是要理解为什么出于某些晦涩的原因而不允许这样做。 问题答案: 发现对此已经存在未解决的RFP。 乔·达西(Joe Darcy)对这个问题发表了评论: 可以想象也可以缓存