最近也在搞IIC,也是这个问题
查到帖子,如下:STM32 中的 I2C 接口被设计成为主从自适应接口,并充许多个主机共享一条 I2C 总线。I2C 接口在被使 能之后,会不断的检测 SCL 及 SDA 的电平与跳变。当发现有低脉冲出现在 SCL 或 SDA 上时,则认 为总线进入了 Busy 状态,其 Busy 标志会置‘1’,直到在总线上检测到一个符合要的停止条件之 后,才认为总线回到了空闲状态,这时由硬件清除 Busy 标志。当 I2C 接口认为总处于 Busy 状态且不 是由自己占用时,会拒绝向总线上发送信号,因为它认为此刻 I2C 总线正在被其它的主机所使用。这时 向 I2C 接口发命令,要求产生起始条件,会导致总线仲裁失败。要从这种状态退出,首先要保证总线是 处于空闲状态,即 SCL 和 SDA 都为高电平。然后,通过将 CR1 的 SWRST 置‘1’然后清‘0’来复 位 I2C 接口,以达到清除 Busy 标志回到空闲状态目的。
摘自香水城版主的https://bbs.21ic.com/icview-726814-1-1.html
建议还是用模拟的吧 |