求助STM32 I2C主机与一个从机通讯成功 与多个从机通讯失败

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求助STM32 I2C主机与一个从机通讯成功 与多个从机通讯失败相关的知识,希望对你有一定的参考价值。

参考技术A 1、比如先调通串口通信,各芯片例程都有。2、通信实现后按照modbus协议的框架发送数据,数据就是你要实现的具体操作或者参数设置。3、下位机对这一帧数据接收完成后进行解析,再做具体操作。modbus只是一种通用协议的框架,有很多优点,你自己写一个协议也行,只是别人不知道怎么解析它。 查看原帖>>

I2C 从机发送完数据后,接收不到主机(接收到倒数第二个数据后)发送的停止条件

STM32调试I2C。主机接收数据,从机发送数据。主机在接收到倒数第二个数据后发送NA和P,但是从机接收不到P(EV中断进不去),查看寄存器发现AF也未清零(ER中断clear清了无效)。求助啊!

你的时序太死板,不能判断从机是否释放总线(从机空闲)。从机可能在发送数据时需要提前准备数据,并可能校验CRC,这个时间可能会比较长,超出了设定的频率。一般人写的程序非常死板,不考虑从机的性能和移植性,加入的时序延时可能这个从机可以正常通讯,换一个从机就傻眼了。
再说,收不到P可以直接按NACK做算法,直接结束这次通讯,返回初始状态,不会有任何问题
参考技术A 可以查一下例程,接收2个和以下字节数据的情况需要注意读取SR2和SR1的次序。追问

在线调试看从机的AF已经清零了,就是P无法中断。可是SDA 和SCL都处于高电平,说明从机已经将SDA线释放了啊,为何没有P中断呢?

追答

停止条件是在倒数第二个字节接受完后发送。

参考技术B 你的发送与接收的时序肯定有问题的,查一下,,还有硬件也有可能..追问

时序应该是没有问题的。示波器看,当发送接收玩最后一个数据后,SDA 和SCL都处于高电平。但从机就是进不了P中断,主机也无法继续下一次的通信

追答

接收完最后一位数据后,从机进入中断干麻呀?就按I2C的协议进行收发数据就行了,,收发数据不用进中断的呀..

以上是关于求助STM32 I2C主机与一个从机通讯成功 与多个从机通讯失败的主要内容,如果未能解决你的问题,请参考以下文章

I2C 从机发送完数据后,接收不到主机(接收到倒数第二个数据后)发送的停止条件

STM32通信硬件 I2C

STM32+cubemx0011 HAL库开发:I2C总线访问加速度传感器ADXL345

stm32-浅谈IIC

STM32 IIC

STM32中i2c数据发不出去