首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >STM32 I2C将SDA设置为低

STM32 I2C将SDA设置为低
EN

Stack Overflow用户
提问于 2019-03-11 18:12:46
回答 3查看 1.2K关注 0票数 1

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

我使用的是安全芯片,我必须发送一个唤醒条件,条件如下:

如果SDA保持低电平超过60us,设备将退出低功耗模式,并在延迟1500 is后准备接收I2C命令。

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

我已经使用STM32CubeMX配置了我的项目。

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

发布于 2019-03-12 08:01:02

在I2C中,启动条件需要从高到低转换,如果您随后发送虚拟地址0,则将生成NACK (或者更确切地说,缺少任何响应将被解释为NACK)。在正常事务中,软件将通过生成重复的启动或停止条件来响应NACK,但这必须在软件中完成,因此您所需做的就是在1.5ms内什么也不做。之后,您可以使用设备的实际地址生成START,如果设备正在运行,它将生成一个ACK。

我不熟悉HAL库驱动程序,坦率地说,文档很糟糕,但它可能没有给你必要的控制,至少对于这个过程,你必须在寄存器级别访问I2C外设。您可以尝试对地址零的长度为零的I2C_MasterRequestWrite()调用,后跟一个延迟。在这里,示波器将有助于确保正在生成预期的信号定时。

票数 1
EN

Stack Overflow用户

发布于 2019-03-18 18:33:11

当您初始化I2C时,GPIO引脚模式被设置为交替模式,因此写入HAL命令将不会对其起作用。

在这方面,使用普通的HAL库不会对您有所帮助。您必须使用stm32寄存器自行配置I2C协议。

票数 0
EN

Stack Overflow用户

发布于 2020-02-04 08:30:29

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55099496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档