116 lines
5.5 KiB
C
116 lines
5.5 KiB
C
#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);
|
||
}
|
||
|