是否可以将STM32的I2C1连接的SDA和SCL引脚设置为低信号或高信号?
我使用安全芯片,并且必须发送唤醒条件,并具有以下条件:
如果SDA保持低电平超过60us的时间,则设备将退出低功耗模式,并且 延迟1500us之后,便可以接收I2C命令了。
我已经尝试用HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);
切换实际的图钉,但这不起作用。
我已经用STM32CubeMX配置了项目。
感谢您的帮助。
答案 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
因为可以向主机发送广播操作而不是唯一操作。