#include "main.h" //包含需要的头文件 /*-------------------------------------------------*/ /*函数名:从24c02指定的地址读一字节数据 */ /*参 数:ReadAddr:需要读数据的地址 */ /*返回值:读到的数据 */ /*-------------------------------------------------*/ uint8_t m24c02ReadOneByte(uint8_t ReadAddr) { uint8_t receive; //定义一个变量用于保存接收到的数据 iicStart(); //IIC开始信号 iicSendByte(M24C02_WADDR); //发送24c02器件地址+写操作 iicWaitAck(); //等待应答 iicSendByte(ReadAddr); //发送需要读数据的地址 iicWaitAck(); //等待应答 iicStart(); //IIC开始信号 iicSendByte(M24C02_RADDR); //发送24c02器件地址+读操作 iicWaitAck(); //等待应答 receive=iicReadByte(0); //读一字节数据,保存在receive变量中 iicStop(); //停止信号 HAL_Delay(5); //延迟 return receive; //返回读取的数据 } /*-------------------------------------------------*/ /*函数名:指定地址写入一个数据 */ /*参 数:WriteAddr :写入数据的目的地址 */ /*参 数:DataToWrite:要写入的数据 */ /*返回值:无 */ /*-------------------------------------------------*/ void m24c02WriteOneByte(uint8_t WriteAddr,uint8_t DataToWrite) { iicStart(); //开始信号 iicSendByte(M24C02_WADDR); //发送器件地址+写操作 iicWaitAck(); //等待应答 iicSendByte(WriteAddr); //发送写入数据的目的地址 iicWaitAck(); //等待应答 iicSendByte(DataToWrite); //发送要写入的数据 iicWaitAck(); //等待应答 iicStop(); //停止信号 HAL_Delay(5); //延迟 } /*-------------------------------------------------*/ /*函数名:从指定的地址读指定数量数据 */ /*参 数:ReadAddr:需要读数据的地址 */ /*参 数:Redata:保存数据的缓冲区 */ /*参 数:Redatalen:读多少数据 */ /*返回值:无 */ /*-------------------------------------------------*/ void m24c02ReadSequential(uint8_t ReadAddr,uint8_t *Redata,uint16_t Redatalen) { uint16_t i; //定义一个变量用于for循环 iicStart(); //IIC开始信号 iicSendByte(M24C02_WADDR); //发送器件地址+写操作 iicWaitAck(); //等待应答 iicSendByte(ReadAddr); //发送需要读数据的地址 iicWaitAck(); //等待应答 iicStart(); //IIC开始信号 iicSendByte(M24C02_RADDR); //发送器件地址+读操作 iicWaitAck(); //等待应答 for(i=0; i<(Redatalen-1); i++) { //循环读取前Redatalen-1个字节 Redata[i]=iicReadByte(1); //读一字节数据,发送ACK信号 } Redata[Redatalen-1]=iicReadByte(0); //读最后一字节数据,不发送ACK信号 iicStop(); //停止信号 HAL_Delay(5); //延迟 } /*-------------------------------------------------*/ /*函数名:从EEprom指定的地址读数据 */ /*参 数:addr:需要读数据的地址 */ /*参 数:data:保存数据缓冲区 */ /*参 数:len:要读取的数据长度 */ /*返回值:无 */ /*-------------------------------------------------*/ void eepromReadData(uint8_t addr,void *data, uint16_t len) { uint8_t *ptr; //定义一个指针用于读取数据 ptr = data; //ptr指向需要读取数据的缓冲区 m24c02ReadSequential(addr,ptr,len); //读取数据 } /*-------------------------------------------------*/ /*函数名:EEprom指定地址写入指定字节的数据 */ /*参 数:addr:地址 */ /*参 数:data:写入的数据 */ /*参 数:len:写入多少数据 */ /*返回值:无 */ /*-------------------------------------------------*/ void eepromWriteData(uint8_t addr, void *data, uint16_t len) { uint16_t i; //用于for循环 uint8_t *ptr; //定义一个指针用于写入数据 ptr = data; //ptr指向需要写入数据的缓冲区 for(i=0; i