单片机常见问题以及解决方法

在单片机中的l2C中,打个比方EEPROM是主机,stm32是从机,主机发完数据,那么stm32需要发送应答,(我指的是没有使用自动I2C模块,自己用gpio调试的),发送应答是自己控制发送是否应答,我可不可以接受到了数据,但是发送非应答。如果stm32当主机,那stm32需要接受应答,接受应答我是这样理解,当stm32发送之后,接受应答,这时候主机拉高释放,从机如果接受到数据,就自动拉高,反之不拉高。当时stm32发送应答我是真的不理解懵逼,如果发送应答是由用户来控制,那么我可以接受到之后,发生非应答。😭😭真的不理解。

应答信号我记得是拉低啊
应答信号有三个一个是从机发出的ack,表明接收到指令。第二个是主机发送的ack,表明收到数据。第三个是noack(),读数据时会用到,表明再不读了,准备结束了
协议的意思就是大家约定好,按照这个约定做。
如果你做从机 你当然可以收完后不按协议发ACK,但这个时候你要考虑主机,一般主机为了考虑可靠性,在没法确定通信正常结束的时候会重试几次。
如果你做主机 假设再连续读的过程中你读完一个字节,如果不发ACK,那从机有可能认为通信出错会关闭通信,你再继续读的话就没反应了。如果你读完最后一个字节不发noack虽然不好但至少你读到你需要的数据了