简单STM32 I2C从机实现

/ 2评 / 5

为了做一个扩展板,主机是通过I2C给从机MCU通信的,MCU就选定为STM32,为什么选这个呢,因为STM32便宜而且别人也好维护。
先打开了例程:

首先改成7Bit通信模式。

Buffer改成我的内容。

主程序先被我精简成这样。

改一改CallBack,让他接受一次又一次.

接受到的内容作为LED的延迟时间.

找了个Linux板子比如树莓派,这么操作。

LED的闪烁速度就我定了。逻辑分析仪一看,表现良好。

但是如果一个I2C从机就一个LED功能,未免太过简单,所以我们搞几个寄存器。就要改成接2字节,然后搞个状态逻辑。

当然,因为收到数据翻转LED的也要删掉哦。不然影响观察哦。

 
那么可以有这么几条指令啦。

解释下,第一条就是LED点亮,第二条就是LED熄灭,第三第四都是翻转。很好理解吧。读取就是个复杂的状态机机制,我目前总结出来的这几点,我还没完全调好,先这样吧。

  1. 如果一个器件有读有写,那么应该让这个期间第一次接受数据时候只要一个字节,然后再决定继续接受还是发送。
  2. 第一个字节总理解为地址。
  3. 读写不能共存,要不读,要不写,从机发送完后记得切换到可以接受数据的模式。
  1. y说道:

    如果有读有写,请问如何判断是读还是写,在何时判断?

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注