《嵌入式技术及应用(STM32CubeMX版) 代码 Task18AT24C02_c.docx》由会员分享,可在线阅读,更多相关《嵌入式技术及应用(STM32CubeMX版) 代码 Task18AT24C02_c.docx(2页珍藏版)》请在第一文库网上搜索。
1、在任务18中,AT24C02.c文件的内容如下:12345678910111213141516171819202122232425262728293031323334353637383940414243/*AT24C02.CAT24C02访问程序功能:用硬件I2C控制AT24C02AT24C02的特性:容量:共2kb即256B,组织:分32页,每页8B,写数要分页写,否则会出现卷边现象设备地址8位,其中主地址7位,最后一位为数据传输方向,设备地址如下:1010A2A1AOR/W10100000=OXAO10100001=OXA1*/inc1ude*i2c.h”inc1udeAT24C02.hd
2、efineAT24C02_WR_ADDROXA0写地址0defineAT24C02_RD_ADDROXA1读地址0defineByteOfPage8每页字节数/*intAT24C02_Read(uint16_tReadAddr,uint8_t*pBuffer,uint16_t1en)功能:从AT24C02指定地址处开始读出指定个数的数据参数:ReadAddr:所要读取的地址对24c02为0255pBuffer:数据存放的地址Ien:所要读出的个数返回值:HA1-OK:读数成功-1:读数失败*/intAT24C02_Read(uint16_tReadAddr,uint8_t*pBuffer,ui
3、nt16_t1en)(HA1-StatusTypeDefres=HA1_ERROR;res=HA1_I2C_Mem_Read(&hi2c1,AT24C02_RD_ADDR,ReadAddr,I2C_MEMADD_SIZE_8BIT,pBuffer,1en,1000);if(res=HA1_ERROR)return-1;returnHA1_OK;intAT24C02JVrite(uint16_tWriteAddr,int8-t*pBuffer,uint16_t1en)功能:在AT24C02的指定地址开始写入指定个数的数据参数:44454647484950515253545556575859606
4、16263646566676869707172737475767778798081828384WriteAddr:所要写入的地址对24c02为0255pBuffer:数据存放的地址Ien:所要写入的数据个数返回值:HA1-OK:写数成功-1:写数失败*/intT24C02JVrite(uint16_tWriteAddr,uint8_t*pBuffer,uint16_t1en)uint8_tent;己写入的字节数uint8_tfstAdd;当前写入的首地址uint8_tnum;当前页的剩余字节数HA1.StatusTypeDefres;写操作的结果初始化fstAdd=WriteAddr;写入的首
5、地址为用户指定地址cnt=0;已写入0个数据num=ByteOfPage-fstAdd%ByteOfPage;/计算页内剩余字节数并赋给numwhi1e(cnt1en)(if(num1en-cnt)剩余字节数超过了当前页的容量当前页写入num个数据res=H1-I2CJ1eJVrite(fehi2c1,AT24C02_WR_ADDR,fstAdd,I2C_MEMADD_SIZE_8BIT,pBuffer+cnt,num,1000);if(res=HA1_ERROR)returnT;写数出错,则返回T后结束HA1_De1ay(10);写数正确,延时等待内部写结束cnt=cnt+num;更新计数值fstAdd=fstAdd+num;Hum=ByteOfPage;)e1se(当前页的容量大于剩余字节数当前页写入剩余字节数,并结束写res=H1-I2CJ1emJVrite(fehi2c1,AT24C02_WR_ADDR,fstAdd,I2C_MEMADD_SIZE_8BIT,pBuffer+cnt,1en-cnt,1000);HA1_De1ay(10);延时等待内部写结束break;跳出循环)if(res=HAjERROR)returnT;写数出错,则返回TreturnHA1_OK;写数正确,则返回HA1oK