STM32 I2C将SDA设置为低

时间:2019-03-11 10:12:46

标签: c embedded microcontroller stm32

是否可以将STM32的I2C1连接的SDA和SCL引脚设置为低信号或高信号?

我使用安全芯片,并且必须发送唤醒条件,并具有以下条件:

  

如果SDA保持低电平超过60us的时间,则设备将退出低功耗模式,并且   延迟1500us之后,便可以接收I2C命令了。

我已经尝试用HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);切换实际的图钉,但这不起作用。

我已经用STM32CubeMX配置了项目。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

在I2C中,START条件要求从高电平到低电平的转换,如果您随后发送虚拟地址0,则将生成NACK(或者缺少任何响应将被解释为NACK)。在正常的事务中,软件将通过产生重复的START或STOP条件来响应NACK,但是,这必须在软件中完成,因此您所要做的只是1.5ms。之后,您可以使用设备的实际地址生成START,并且如果设备正在运行,它将生成ACK。

我不熟悉HAL库驱动程序,坦率地说文档太烂了,但是它可能无法为您提供必要的控制,并且您至少必须在寄存器级别访问I2C外设。这个程序。您可以尝试零长度的I2C_MasterRequestWrite()调用来寻址零地址,然后进行延迟。示波器在这里很有用,以确保生成预期的信号时序。

答案 1 :(得分:0)

初始化I2C时,GPIO引脚模式设置为ALTERNATE MODE,因此无法编写HAL命令。

使用常规的HAL库不会对此有所帮助。您必须使用stm32寄存器自行配置I2C协议。

答案 2 :(得分:0)

我建议使用I2C通道集的设备使用从站地址的自己地址,如以下代码所示。

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

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