(一)基于STM32f103的I2C通信接口的EPPROM模块(24C256)读写程序详解

来源:互联网 发布:知乎pc客户端 编辑:程序博客网 时间:2024/05/19 19:40

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

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

  I2C 有四条连接线,SCL、SDA、VCC、GND。

  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个就是单片机完成数据读之后是否发出响应信号!程序如下:




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

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




           

阅读全文
3 1