是否有办法将STM32的I2C1连接的SDA和SCL引脚设置为低信号或高信号?
我使用的是安全芯片,我必须发送一个唤醒条件,条件如下:
如果SDA保持低电平超过60us,设备将退出低功耗模式,并在延迟1500 is后准备接收I2C命令。
我已经尝试用HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);
切换实际的引脚,但这不起作用。
我已经使用STM32CubeMX配置了我的项目。
谢谢你的帮助。
发布于 2019-03-12 08:01:02
在I2C中,启动条件需要从高到低转换,如果您随后发送虚拟地址0,则将生成NACK (或者更确切地说,缺少任何响应将被解释为NACK)。在正常事务中,软件将通过生成重复的启动或停止条件来响应NACK,但这必须在软件中完成,因此您所需做的就是在1.5ms内什么也不做。之后,您可以使用设备的实际地址生成START,如果设备正在运行,它将生成一个ACK。
我不熟悉HAL库驱动程序,坦率地说,文档很糟糕,但它可能没有给你必要的控制,至少对于这个过程,你必须在寄存器级别访问I2C外设。您可以尝试对地址零的长度为零的I2C_MasterRequestWrite()
调用,后跟一个延迟。在这里,示波器将有助于确保正在生成预期的信号定时。
发布于 2019-03-18 18:33:11
当您初始化I2C时,GPIO引脚模式被设置为交替模式,因此写入HAL命令将不会对其起作用。
在这方面,使用普通的HAL库不会对您有所帮助。您必须使用stm32寄存器自行配置I2C协议。
发布于 2020-02-04 08:30:29
我建议使用使用I2C通道的设备的从机地址的自己的地址设置如下代码。
I2C_InitStructure.I2C_OwnAddress1 = 0x30; // the unique slave address of the deviecs
因为主设备可以发送广播操作,而不是唯一操作。
https://stackoverflow.com/questions/55099496
复制相似问题