我目前正在尝试获得一对stm32l152 (发现工具包),以便通过I2C进行通信。(我不使用STM提供的标准外设库,因为我想自己实现i2c。)
我的配置如下:
奇怪的部分是:当我将2个GPIOB引脚配置为推拉(没有拉/下)时,我可以看到我的主人发送开始位,地址字节。在示波器上。
但我的奴隶并没有送回一份回执。我知道这一点是肯定的,因为主程序没有在SR1中断言ADDR位,我在作用域上没有看到ack,从服务器也没有进入中断(我在从服务器上启用了I2C事件中断)。
在仔细观察范围内的波形时,我意识到信号( SCL和SDA)并没有完全达到0伏特的逻辑值,而是1伏特。我猜想这可能是为什么奴隶不能从主机读取地址字节,因此没有发送回ack。
因此,我将2个GPIO引脚配置为开路引线(没有上/下拉)..but,现在我的主人无法发送开始位。当我设置开始位时,我遍历了代码,并看到SR1中的主位SB位是设置的。但我看不出SDA和SCL信号在范围内有任何反应(两者都高出3V)。
(我把SCL和SDA都拉到了3v,每一行使用10曲姆)。
发布于 2014-06-10 05:48:23
好吧,我想我找到了答案..。我查找了STM提供的标准外设库,并遵循了它们的配置顺序。在此之前,我使用了错误的配置GPIO端口的顺序.
测试后的工作顺序如下:
以前,我在步骤2之前执行步骤3,生成开始位时没有来自端口的输出。
希望这能帮助那些有同样问题的人。
https://stackoverflow.com/questions/24078696
复制相似问题