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

最佳答案

在I2C中,启动条件需要一个从高到低的转换,如果您随后发送一个虚拟地址0,则将生成一个NACK(或者更确切地说,缺少任何响应将被解释为一个NACK)。在正常事务中,软件会通过生成一个重复的启动或停止条件来响应NACK,但是这必须在软件中完成,因此您只需在1.5毫秒内不做任何事情。此后,您可以使用设备的实际地址生成启动,如果设备正在运行,它将生成一个ACK。
我不熟悉HAL库驱动程序,坦率地说,文档是非常糟糕的,但它可能没有给您必要的控制,您将不得不访问I2C外设的寄存器级至少为这个过程。您可以尝试零长度I2C_MasterRequestWrite()调用地址零,然后延迟。示波器将有助于确保产生预期的信号定时。

10-07 16:45