(一)基于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个就是单片机完成数据读之后是否发出响应信号!程序如下:
先到这里,不明白的可以提出来,其中的延迟函数去掉本人调试过基本没问题,但加上也不会错!!!
当然程序还没完,怕一次写太多!待续。。。
- (一)基于STM32f103的I2C通信接口的EPPROM模块(24C256)读写程序详解
- (二)基于STM32f103的I2C通信接口的EPPROM模块(24C256)读写程序详解
- STM32F103下模拟I2C的接口代码
- stm32F103模拟I2C读写24c02
- stm32F103模拟I2C读写24c02
- stm32F103模拟I2C读写24c02
- UBOOT I2C读写详解(基于mini2440)
- 24c256(转)
- 【库函数版本】基于STM32F103的MPU6050的原始数据读取程序详解
- AVR(M48)的i2c程序,读写at24c02
- STM32F103 I2C 宕机的问题
- 基于I2C总线技术的USB接口设计
- FreeRTOS的源代码个人分析(基于KEIL下STM32F103的Demo) 一
- 基于stm32f103的矩阵键盘
- 基于STM32F103的超声波测距
- 基于stm32F103的 A4988驱动
- 单片机读写某I2C接口的存储器件
- STM32F103 系列芯片读写AT45DB161芯片的程序和写入/读取字库文件的方法
- 只会增删查改?你还缺个数据库管理工具!
- Oracle使用Mybatis实现批量插入数据(Oracle)
- android 跳转到应用权限设置界面
- UVC 摄像头驱动(三)配置摄像头,实时数据采集
- 解决ScrollView嵌套RecyclerView的冲突,非常简单,只需要3个步骤!
- (一)基于STM32f103的I2C通信接口的EPPROM模块(24C256)读写程序详解
- 关于Springboot + hibernate 使用websocket的详细代码
- oracle触发器使用
- Linux gcc链接动态库出错:LIBRARY_PATH和LD_LIBRARY_PATH的区别
- bnuoj49098 神奇的身高
- 逻辑回归(Logistic)
- Linux系统监控命令
- 旋转数组 二分查找 查找一个目标值
- 如何将你的 MySQL 查询速度提升 300 倍