STM32 I2C将SDA设置为低电平

mctunoxg  于 2023-11-16  发布在  其他
关注(0)|答案(3)|浏览(127)

有没有办法将STM 32的I2C1连接的SDA和SCL引脚设置为低电平或高电平信号?
我使用安全芯片,我必须发送一个唤醒条件,条件如下:
如果SDA保持低电平的时间超过60 us,器件将退出低功耗模式,延迟1500 us后,器件将准备好接收I2C命令。
我已经尝试用HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);切换实际的引脚,但这不起作用。
我已经用STM32CubeMX配置了我的项目。
谢谢你的帮助。

wwtsj6pe

wwtsj6pe1#

在I2C中,START条件要求从高电平到低电平的转换,如果您随后发送虚拟地址0,则将生成NACK在正常事务中,软件将通过生成重复的开始或停止条件来响应NACK,然而这必须在软件中完成,所以你所要做的就是在1.5ms内什么都不做。之后你可以用设备的实际地址生成START,如果设备正在运行,它会生成一个ACK。
我不熟悉HAL库驱动程序,坦率地说,文档非常糟糕,但它可能没有给予您必要的控制,至少在这个过程中,你必须在寄存器级别访问I2C外设。你可以尝试零-length I2C_MasterRequestWrite()调用地址为零,然后是延迟。示波器在这里很有用,可以确保生成预期的信号时序。

nwsw7zdq

nwsw7zdq2#

初始化I2C时,GPIO引脚模式设置为ALTERNATE MODE,因此写入HAL命令将不起作用。
使用普通的HAL库在这方面帮不了你,你必须使用stm32寄存器自己配置I2C协议。

umuewwlo

umuewwlo3#

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

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

字符串
因为主设备可以发送广播操作而不是唯一操作。

相关问题