STM32 - -6 - -I2C读写AT24C02
STM32----6----I2C读写AT24C02
文章发表于:2011-05-09 13:51
STM32作为主机I2C,读写24C02 EEPROM
1、 时钟和数据的传输:开始和停止条件,数据在SCL的高电平期间有效,在SCL的低电平期间改变。 2、 开始条件:在SCL高电平期间,SDA产生一个下降沿 3、 停止条件:在SCL高电平期间,SDA产生一个上升沿
4、 应答:成功接收到数据(地址和数据),产生一个应答位(在第9个时钟周期,将SDA拉低) 下面是源程序:原理上说,下面程序再移植时,只要将数据类型变化,可以应用到任何处理器 AT24c02.h
#ifndef __24CXX_H #define __24CXX_H #include \
/*************************************************************** - 说明:以下参数是AT24Cxx的寻址空间,C0x ,X 表示XK 如C01表示1K - 127表示2^7 1Kbit/8=128Byte 128字节 - 255表示2^8 2Kbit/8=256Byte 256字节 - 512表示2^9 4Kbit/8=512Byte 512字节 -
***************************************************************/ #define AT24C01 127 #define AT24C02 255 #define AT24C04 511 #define AT24C08 1023 #define AT24C16 2047 #define AT24C32 4095 #define AT24C64 8191 #define AT24C128 16383 #define AT24C256 32767
/************************************************************** --板子使用的是24c02,所以定义EE_TYPE为AT24C02
**************************************************************/ #define EE_TYPE AT24C02
/************************************************************** --EEPROM的操作函数 --24CXX驱动函数
**************************************************************/
u8 AT24CXX_ReadOneByte(u16 ReadAddr); //指定地址读取一个字节
void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite); //指定地址写入一个字节
void AT24CXX_WriteLenByte(u16 WriteAddr,u32 DataToWrite,u8 Len);//指定地址开始写入指定长度的数据
u32 AT24CXX_ReadLenByte(u16 ReadAddr,u8 Len); //指定地址开始读取指定长度数据
void AT24CXX_Write(u16 WriteAddr,u8 *pBuffer,u16 NumToWrite); //从指定地址开始写入指定长度的数据
void AT24CXX_Read(u16 ReadAddr,u8 *pBuffer,u16 NumToRead); //从指定地址开始读出指定长度的数据
u8 AT24CXX_Check(void); //检查器件 void AT24CXX_Init(void); //初始化IIC #endif
----------------------------------------------------------------------------------------------------------------------------------------- AT24c02.c
#include \ #include \
/*************************************************************************** - 功能描述:STM32f103 EEPORM初始化函数 - 隶属模块:STM32 EEPROM操作 - 函数属性:外部,使用户使用 - 参数说明:无 - 返回说明:无
- 函数功能:实现I2C的初始化。
***************************************************************************/ void AT24CXX_Init(void) { IIC_Init(); }
/*************************************************************************** - 功能描述:STM32f103 任意读取EEPORM一个字节的函数 - 隶属模块:STM32 EEPROM操作
- 函数属性:外部,使用户使用
- 参数说明:ReadAddr为所读取EEPROM字节的地址 - 返回说明:无
- 函数功能:返回所要读取的地址的数据
- 函数说明:要任意读取EEPROM地址中的一个字节的步骤为: (1)发送开始START信号
(2)发送器件器件地址,最后一位为0
(3)从机检测到主机发送的地址与自己的地址相同时发送一个应答信号ACK,而主机等待ACK (4)发送待操作的字节地址 (5)等待一个ACK
(6)重新发送START起始信号
(7)发送7位器件地址,最后一位为1,表示读EEPROM。 (8)等待ACK,读取一个字节。 (9)I2C停止,返回读取的数据。
这里注意AT24C0x系列的地址有两字节和一字节之分,这里把两种情况都包含了 ***************************************************************************/ u8 AT24CXX_ReadOneByte(u16 ReadAddr) {
u8 temp=0; IIC_Start(); if(EE_TYPE>AT24C16) {
IIC_Send_Byte(0XA0); //发送写命令 IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr>>8);//发送高地址 IIC_Wait_Ack(); } else
IIC_Send_Byte(0XA0+((ReadAddr/256)<<1)); //发送器件地址0XA0,写数据 IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr%6); //发送低地址 IIC_Wait_Ack(); IIC_Start();
IIC_Send_Byte(0XA1); //进入接收模式 IIC_Wait_Ack();
temp=IIC_Read_Byte(0); IIC_Stop();//产生一个停止条件
return temp; }
/*************************************************************************** - 功能描述:STM32f103 任意写EEPORM一个字节的函数 - 隶属模块:STM32 EEPROM操作 - 函数属性:外部,使用户使用
- 参数说明:WriteAddr :写入数据的目的地址 ,DataToWrite:要写入的数据 - 返回说明:无
- 函数功能:返回所要读取的地址的数据
- 函数说明:要任意读取EEPROM地址中的一个字节的步骤为: (1)发送开始START信号
(2)发送器件器件地址,最后一位为0
(3)从机检测到主机发送的地址与自己的地址相同时发送一个应答信号ACK (4)发送待操作的字节地址 (5)等待一个ACK (6)发送字节数据 (7)等待一个ACK
(8)I2C停止,返回读取的数据。
***************************************************************************/ void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite) { IIC_Start(); if(EE_TYPE>AT24C16) {
IIC_Send_Byte(0XA0); //发送写命令 IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr>>8);//发送高地址 IIC_Wait_Ack(); } else {
IIC_Send_Byte(0XA0+((WriteAddr/256)<<1)); //发送器件地址0XA0,写数据 }
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr%6); //发送低地址 IIC_Wait_Ack();
IIC_Send_Byte(DataToWrite); //发送字节 IIC_Wait_Ack();
IIC_Stop();//产生一个停止条件 delay_ms(10); }
/*************************************************************************** - 功能描述:STM32f103 任意写EEPORM指定地址开始写入长度为Len的数据 - 隶属模块:STM32 EEPROM操作 - 函数属性:外部,使用户使用
- 参数说明:WriteAddr …… 此处隐藏:3067字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [法律文档]苏教版七年级语文下册第五单元教学设计
- [法律文档]向市委巡视组进点汇报材料
- [法律文档]绵阳市2018年高三物理上学期第二次月考
- [法律文档]浅析如何解决当代中国“新三座大山”的
- [法律文档]延安北过境线大桥工程防洪评价报告 -
- [法律文档]激活生成元素让数学课堂充满生机
- [法律文档]2014年春学期九年级5月教学质量检测语
- [法律文档]放射科标准及各项计1
- [法律文档]2012年广州化学中考试题和答案(原版)
- [法律文档]地球物理勘查规范
- [法律文档]《12系列建筑标准设计图集》目录
- [法律文档]2018年宁波市专技人员继续教育公需课-
- [法律文档]工会委员会工作职责
- [法律文档]2014新版外研社九年级英语上册课文(完
- [法律文档]《阅微草堂笔记》部分篇目赏析
- [法律文档]尔雅军事理论2018课后答案(南开版)
- [法律文档]储竣-13827 黑娃山沟大开挖穿越说明书
- [法律文档]《产品设计》教学大纲及课程简介
- [法律文档]电动吊篮专项施工方案 - 图文
- [法律文档]实木地板和复合地板的比较
- 探析如何提高电力系统中PLC的可靠性
- 用Excel函数快速实现体能测试成绩统计
- 教师招聘考试重点分析:班主任工作常识
- 高三历史选修一《历史上重大改革回眸》
- 2013年中山市部分职位(工种)人力资源视
- 2015年中国水溶性蛋白市场年度调研报告
- 原地踏步走与立定教学设计
- 何家弘法律英语课件_第十二课
- 海信冰箱经销商大会——齐俊强副总经理
- 犯罪心理学讲座
- 初中英语作文病句和错句修改范例
- 虚拟化群集部署计划及操作流程
- 焊接板式塔顶冷凝器设计
- 浅析语文教学中
- 结构力学——6位移法
- 天正建筑CAD制图技巧
- 中华人民共和国财政部令第57号——注册
- 赢在企业文化展厅设计的起跑线上
- 2013版物理一轮精品复习学案:实验6
- 直隶总督署简介




