小编foo*_*oob的帖子

为I2C配置STM32输出端口

我目前正在尝试使用一对stm32l152(发现工具包)通过I2C进行通信.(我没有使用STM提供的标准外设库,因为我想尝试自己实现i2c ..)

我的配置如下:

  • 7位寻址模式(无双地址,仅OAR1)

  • 100khz的速度

  • 启用ACK(在从站上)

  • ACK被禁用(在主设备上,因为在任何时候主设备/从设备之间只传输1个字节)

  • 在主/从上,使用GPIOB(PB10)作为SCL,GPIOB(PB11)作为SDA

这是奇怪的部分:当我将2个GPIOB引脚配置为推挽式(无上拉/下拉)时,我能够看到我的主机在示波器上发送起始位,地址字节..

但我的奴隶并没有发回确认.我肯定知道这一点,因为主机没有在SR1中断言ADDR位,我看到示波器上没有确认,并且从机没有进入中断(我在从机上启用了I2C事件中断).

仔细观察示波器上的波形,我意识到信号(SCL,SDA)没有完全达到0Volts的逻辑低电平,而是处于1伏特.我猜这可能是为什么奴隶无法从主机读取地址字节,因此没有发回ack.

所以我将2个GPIO引脚配置为漏极开路(无上拉/下拉)..但现在我的主机无法发出起始位..我单步执行代码,看到SR1中主机的SB位置1时设置START位..但我没有看到示波器上的SDA和SCL信号有任何响应(两者都高达3V).

(我在每条线上使用10kohms将SCL和SDA拉到3v).

stm32 i2c stm32l152

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

i2c ×1

stm32 ×1

stm32l152 ×1