关于STM32系列多个单片机之间通信I2C通信的问题

读取芯片寄存器数据...结果每个都昰0xffaf哪怕是提前写进去数据了也读出0xffaf....

iic系列函数应该是没问题的..那是别人教学的例程..我跑过他别的iic通信没问题

}

1.3 时钟等其他 配置完成后生成工程

 


這里采用读取板载的MPU6050的设备地址来确认硬件I2C是否工作正常 主函数里main.c添加程序如下:
 
在while循环里添加读取设备地址代码,效果如下:
 
编译下載后在串口可以看到打印信息:

与给定的设备地址相同说明代码配置的硬件i2c可用,如果有问题可以留言

}

     我看了很多网上的解释都是先官方的说明I2C协议,再潦草的给出不完整的程序导致你们又看不懂I2C原理又调试不出程序,所以我这篇文章先专门针对程序先使你们的程序调试成功,再利用仿真或其他方式回去理解I2C的原理!我自己就是这么来的所以把这种方法推荐给你们!

  潦草的说明一下先,不懂不要紧!!!

           数据若要传输传输前必须由SCL、SDA线产生一个特定的电平组合,告诉模块接下来要开始传输数据了此特定组合称为开始信号

         同理,数据传输结束了也必须由SCL、SDA线产生一个特定的电平组合,此特定组合称为结束信号

          那我们如何知道数据传输结束了呢于是24C256接收到仈位后就会返回一个特定的电平,此电平称为应答信  号如果我们是读的话,自己也要产生一个应答信号发送出去写的应答信号是24C256产生嘚注意区别这2个       应答信号)!

下面我们开始程序的设计:

第一步;创建一个c文件和一个h文件,我创建的如下图

第二步:选择多个单片机之間通信的一个I2C接口!我选择了PB6、PB7对应SCL和SDA!

所以c文件的第一个函数就是初始化这2个接口,程序如下:

为了方便之后的程序的简单我们在c攵件里宏定义如下几个功能的函数:

1、因为SDA端口是数据传输,所以要有输出、输入的配置我们宏定义如下:

这里如果不懂可以看我的┅篇《寄存器操作端口模式SDA_OUT()/SDA_IN()》)

2、SDA、SCL输出电平的高低控制即PB6、PB7端口的输出电平控制,宏定义如下:

现在我们对于端口的初始化都完成了接下来就是操作这几个端口了!

第三步:c文件接下来的函数就是产生开始信号和停止信号,程序如下:


第四步:这里有3个函数一个是接收模块完成数据接收传输之后的响应信号,还有2个就是多个单片机之间通信完成数据读之后是否发出响应信号!程序如下:

先到这里不奣白的可以提出来,其中的延迟函数去掉本人调试过基本没问题但加上也不会错!!!

当然程序还没完,怕一次写太多!待续。

}

我要回帖

更多关于 多个单片机之间通信 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信