HAL_Project/Project -APP-V1.0/Hardware/24C02/24c02.c.orig

116 lines
5.5 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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<len; i++) { //循环写入数据
m24c02WriteOneByte(addr,ptr[i]); //写一字节数据
addr++; //地址+1
}
}
/*-------------------------------------------------*/
/*函数名从EEprom读取所有证书参数信息 */
/*参 数:无 */
/*返回值:无 */
/*-------------------------------------------------*/
void eepromReadInfo(void) {
memset(&RealyCB,0,RELAY_STRUCT_LEN); //清空结构体
eepromReadData(0,&RealyCB,RELAY_STRUCT_LEN);
log_info("继电器1状态为:%s",RealyCB.Relay1_State ? "OFF" : "ON");
log_info("继电器2状态为:%s",RealyCB.Relay2_State ? "OFF" : "ON");
log_info("继电器3状态为:%s",RealyCB.Relay3_State ? "OFF" : "ON");
log_info("继电器4状态为:%s",RealyCB.Relay4_State ? "OFF" : "ON");
CAT1_printf("AT+MPUB=\"/iot/data/up/%s\",0,0,\"{\\22header\\22:\\22iot.prop.post\\22,\\22body\\22:{\\22sw1\\22:%d,\\22sw2\\22:%d,\\22sw3\\22:%d,\\22sw4\\22:%d}}\"\r\n",
MqttInfo_Struct.ClientID,
RealyCB.Relay1_State?0:1,
RealyCB.Relay2_State?0:1,
RealyCB.Relay3_State?0:1,
RealyCB.Relay4_State?0:1);
}