/* ********************************************************************************* 头文件 ********************************************************************************* */ #include "eeprom.h" #include "bsp.h" #include "stm32l1xx_flash.h" /* ************************************************************************************ 变量定义 ************************************************************************************ */ Init_Data Init_Data_Equipment; /*------------------------------------------------------------ Func: EEPROM数据按字节读出 Note: -------------------------------------------------------------*/ void EEPROM_ReadBytes(u16 Addr,u8 *Buffer,u16 Length) { u8 *wAddr; wAddr=(u8 *)(EEPROM_BASE_ADDR+Addr); while(Length--){ *Buffer++=*wAddr++; } } /*------------------------------------------------------------ Func: EEPROM数据读出 Note: -------------------------------------------------------------*/ void EEPROM_ReadWords(u16 Addr,u16 *Buffer,u16 Length) { u32 *wAddr; wAddr=(u32 *)(EEPROM_BASE_ADDR+Addr); while(Length--){ *Buffer++=*wAddr; wAddr+=2; } } /*------------------------------------------------------------ Func: EEPROM数据读出双字 Note: -------------------------------------------------------------*/ void EEPROM_ReadDWords(u16 Addr,u32 *Buffer,u16 Length) { u32 *wAddr; wAddr=(u32 *)(EEPROM_BASE_ADDR+Addr); while(Length--){ *Buffer++=*wAddr; wAddr+=4; } } /*------------------------------------------------------------ Func: EEPROM数据按字节写入 Note: -------------------------------------------------------------*/ void EEPROM_WriteBytes(u16 Addr,u8 *Buffer,u16 Length) { u8 *wAddr; wAddr=(u8 *)(EEPROM_BASE_ADDR+Addr); FLASH->PEKEYR=PEKEY1; //unlock FLASH->PEKEYR=PEKEY2; while(FLASH->PECR&FLASH_PECR_PELOCK); FLASH->PECR|=FLASH_PECR_FTDW; //not fast write while(Length--){ *wAddr++=*Buffer++; while(FLASH->SR&FLASH_SR_BSY); } FLASH->PECR|=FLASH_PECR_PELOCK; } /*------------------------------------------------------------ Func: EEPROM数据按字写入 Note: 字当半字用 -------------------------------------------------------------*/ void EEPROM_WriteWords(u16 Addr,u16 *Buffer,u16 Length) { u32 *wAddr; wAddr=(u32 *)(EEPROM_BASE_ADDR+Addr); FLASH->PEKEYR=PEKEY1; //unlock FLASH->PEKEYR=PEKEY2; while(FLASH->PECR&FLASH_PECR_PELOCK); FLASH->PECR|=FLASH_PECR_FTDW; //not fast write while(Length--){ *wAddr=*Buffer++; wAddr+=2; while(FLASH->SR&FLASH_SR_BSY); } FLASH->PECR|=FLASH_PECR_PELOCK; } /*------------------------------------------------------------ Func: EEPROM数据按双字写入 Note: -------------------------------------------------------------*/ void EEPROM_WriteDWords(u16 Addr,u32 *Buffer,u16 Length) { u32 *wAddr; wAddr=(u32 *)(EEPROM_BASE_ADDR+Addr); FLASH->PEKEYR=PEKEY1; //unlock FLASH->PEKEYR=PEKEY2; while(FLASH->PECR&FLASH_PECR_PELOCK); FLASH->PECR|=FLASH_PECR_FTDW; //not fast write while(Length--){ *wAddr=*Buffer++; wAddr+=4; while(FLASH->SR&FLASH_SR_BSY); } FLASH->PECR|=FLASH_PECR_PELOCK; } /* ********************************************************************************************************* * 函 数 名: Read_Equipment_Par() * 功能说明: EERPOM读取存储参数 * 输 入 :无 * 输 出 :Init_Data_Equipmend ********************************************************************************************************* */ Init_Data Read_Equipment_Par(void) { Init_Data Init_Data_Equipmend={'\0'}; EEPROM_ReadBytes(0, (u8*)Init_Data_Equipmend.Bc25_Ip,Bc25_Ip_len); EEPROM_ReadBytes(20, (u8*)Init_Data_Equipmend.Bc25_Port,Bc25_Port_len); EEPROM_ReadBytes(30, (u8*)Init_Data_Equipmend.ESP8266_AP_Ports,ESP8266_AP_Ports_len); EEPROM_ReadBytes(60, (u8*)Init_Data_Equipmend.ESP8266_AP_PWDs,ESP8266_AP_PWDs_len); EEPROM_ReadBytes(40, (u8*)Init_Data_Equipmend.ESP8266_AP_SSIDs,ESP8266_AP_SSIDs_len); EEPROM_ReadBytes(100, (u8*)Init_Data_Equipmend.Measure_Interval,Measure_Interval_len); EEPROM_ReadBytes(110, (u8*)Init_Data_Equipmend.Pub_Mode,Pub_Mode_len); EEPROM_ReadBytes(120, (u8*)Init_Data_Equipmend.Pub_Time,Pub_Time_len); EEPROM_ReadBytes(130, (u8*)Init_Data_Equipmend.Equipment_ID,Equipment_ID_len); EEPROM_ReadBytes(150, (u8*)Init_Data_Equipmend.appointment_time,appointment_time_len); EEPROM_ReadBytes(166, (u8*)Init_Data_Equipmend.measure_mode,measure_mode_len); EEPROM_ReadBytes(185, &Init_Data_Equipmend.par_change,1); EEPROM_ReadBytes(186, &Init_Data_Equipmend.Bc25_Send_Header,1); EEPROM_ReadBytes(240, (u8*)Init_Data_Equipmend.IOT_Username,IOT_Username_len); EEPROM_ReadBytes(260, (u8*)Init_Data_Equipmend.IOT_Password,IOT_Password_len); EEPROM_ReadBytes(280, (u8*)Init_Data_Equipmend.IOT_Theme_name,IOT_Theme_name_len); return Init_Data_Equipmend; } /* ********************************************************************************************************* * 函 数 名: Write_Equipment_Par() * 功能说明: 存储设备参数 * 输 入 :设备参数 Init_Data_Equipmend * 输 出 :无 ********************************************************************************************************* */ void Write_Equipment_Par(Init_Data Init_Data_Equipmend) { Clear_eeprom_par(); EEPROM_WriteBytes(0, (u8*)Init_Data_Equipmend.Bc25_Ip,strlen(Init_Data_Equipmend.Bc25_Ip)); EEPROM_WriteBytes(20, (u8*)Init_Data_Equipmend.Bc25_Port,strlen(Init_Data_Equipmend.Bc25_Port)); EEPROM_WriteBytes(30, (u8*)Init_Data_Equipmend.ESP8266_AP_Ports,strlen(Init_Data_Equipmend.ESP8266_AP_Ports)); EEPROM_WriteBytes(60, (u8*)Init_Data_Equipmend.ESP8266_AP_PWDs,strlen(Init_Data_Equipmend.ESP8266_AP_PWDs)); EEPROM_WriteBytes(40, (u8*)Init_Data_Equipmend.ESP8266_AP_SSIDs,strlen(Init_Data_Equipmend.ESP8266_AP_SSIDs)); EEPROM_WriteBytes(100, (u8*)Init_Data_Equipmend.Measure_Interval,strlen(Init_Data_Equipmend.Measure_Interval)); EEPROM_WriteBytes(110, (u8*)Init_Data_Equipmend.Pub_Mode,strlen(Init_Data_Equipmend.Pub_Mode)); EEPROM_WriteBytes(120, (u8*)Init_Data_Equipmend.Pub_Time,strlen(Init_Data_Equipmend.Pub_Time)); EEPROM_WriteBytes(130, (u8*)Init_Data_Equipmend.Equipment_ID,strlen(Init_Data_Equipmend.Equipment_ID)); EEPROM_WriteBytes(150, (u8*)Init_Data_Equipmend.appointment_time,appointment_time_len); EEPROM_WriteBytes(166, (u8*)Init_Data_Equipmend.measure_mode,1); EEPROM_WriteBytes(185, &Init_Data_Equipmend.par_change,1); EEPROM_WriteBytes(185, &Init_Data_Equipmend.Bc25_Send_Header,1); EEPROM_WriteBytes(140,&Par_store_flag,1); EEPROM_WriteBytes(240, (u8*)Init_Data_Equipmend.IOT_Username,strlen(Init_Data_Equipmend.IOT_Username)); EEPROM_WriteBytes(260, (u8*)Init_Data_Equipmend.IOT_Password,strlen(Init_Data_Equipmend.IOT_Password)); EEPROM_WriteBytes(280, (u8*)Init_Data_Equipmend.IOT_Theme_name,strlen(Init_Data_Equipmend.IOT_Theme_name)); } /* ********************************************************************************************************* * 函 数 名: clear_Init_Data_Equipment() * 功能说明: 清空运行参数 * 输 入 :无 * 输 出 :无 ********************************************************************************************************* */ void clear_Init_Data_Equipment(void) { memset(Init_Data_Equipment.Bc25_Ip,0,Bc25_Ip_len); memset(Init_Data_Equipment.Bc25_Port,0,Bc25_Port_len); memset(Init_Data_Equipment.ESP8266_AP_Ports,0,ESP8266_AP_Ports_len); memset(Init_Data_Equipment.ESP8266_AP_PWDs,0,ESP8266_AP_PWDs_len); memset(Init_Data_Equipment.ESP8266_AP_SSIDs,0,ESP8266_AP_SSIDs_len); memset(Init_Data_Equipment.Measure_Interval,0,Measure_Interval_len); memset(Init_Data_Equipment.Pub_Mode,0,Pub_Mode_len); memset(Init_Data_Equipment.Pub_Time,0,Pub_Time_len); memset(Init_Data_Equipment.Equipment_ID,0,Equipment_ID_len); memset(Init_Data_Equipment.appointment_time,0,appointment_time_len); memset(Init_Data_Equipment.measure_mode,0,measure_mode_len); memset(Init_Data_Equipment.IOT_Username,0,IOT_Username_len); memset(Init_Data_Equipment.IOT_Password,0,IOT_Password_len); memset(Init_Data_Equipment.IOT_Theme_name,0,IOT_Theme_name_len); Init_Data_Equipment.par_change=0; Init_Data_Equipment.Bc25_Send_Header=0; // Write_Equipment_Par(Init_Data_Equipment); } /* ********************************************************************************************************* * 函 数 名: Clear_eeprom_par() * 功能说明: 清空EEPROM * 输 入 :无 * 输 出 :无 ********************************************************************************************************* */ void Clear_eeprom_par(void) { uint8_t data=0x00; int i=0; for(i=0;i<300;i++) { EEPROM_WriteBytes(i,&data,1); } } /* ********************************************************************************************************* * 函 数 名: Write_Factory_Par() * 功能说明: 写入出厂参数 * 输 入 :无 * 输 出 :无 ********************************************************************************************************* */ void Write_Factory_Par(void) { clear_Init_Data_Equipment();//先清除存储器 sprintf(Init_Data_Equipment.Bc25_Ip,"%s","\"39.105.230.197\""); sprintf(Init_Data_Equipment.Bc25_Port,"%s","1883"); // sprintf(Init_Data_Equipment.Bc25_Ip,"%s","\"219.238.240.58\""); // sprintf(Init_Data_Equipment.Bc25_Port,"%s","9027"); sprintf(Init_Data_Equipment.ESP8266_AP_Ports,"%s","8080"); sprintf(Init_Data_Equipment.ESP8266_AP_PWDs,"%s","88888888"); sprintf(Init_Data_Equipment.ESP8266_AP_SSIDs,"%s","licawifi"); sprintf(Init_Data_Equipment.Measure_Interval,"%s","00001"); sprintf(Init_Data_Equipment.Pub_Mode,"%s","00"); sprintf(Init_Data_Equipment.Pub_Time,"%s","5"); sprintf(Init_Data_Equipment.Equipment_ID,"%s","123456789"); sprintf(Init_Data_Equipment.appointment_time,"%s","20221130114400"); sprintf(Init_Data_Equipment.measure_mode,"%s","0"); sprintf(Init_Data_Equipment.IOT_Username,"%s","\"lichao\""); sprintf(Init_Data_Equipment.IOT_Password,"%s","\"910517@lc\""); sprintf(Init_Data_Equipment.IOT_Theme_name,"%s","SM-1000M"); Init_Data_Equipment.par_change=0; Init_Data_Equipment.Bc25_Send_Header=0; Write_Equipment_Par(Init_Data_Equipment); Par_store_flag=0x01; EEPROM_WriteBytes(140,&Par_store_flag,1); } /* ********************************************************************************************************* * 函 数 名: get_meaidv() * 功能说明: 获取测量时间间隔S * 输 入 :无 * 输 出 :measurt_idv_set*60; ********************************************************************************************************* */ u32 get_meaidv(void) { uint32_t measurt_idv_set; measurt_idv_set= hexToDec(Init_Data_Equipment.Measure_Interval); return measurt_idv_set*60; } /* ********************************************************************************************************* * 函 数 名: get_pubidv() * 功能说明: 获取远传时间间隔S * 输 入 :无 * 输 出 :pub_idv_set*60 ********************************************************************************************************* */ u32 get_pubidv(void) { uint32_t pub_idv_set; pub_idv_set=hexToDec(Init_Data_Equipment.Pub_Time); return pub_idv_set*60 + 60*2; } /* ********************************************************************************************************* * 函 数 名: hexToDec() * 功能说明: 数字字符串转10进制 * 输 入 :字符串shex * 输 出 :转化后的数据mid ********************************************************************************************************* */ u16 hexToDec(char *shex) { u16 len,i,mid=0; len=strlen(shex); if(len>8)return 0; for(i=0;i= '0' && shex[i] <= '9') { if(i>0)mid*=10; //mid *= (u16)pow(10,1); mid += (shex[i] - '0'); } else return 0; } return mid; } /***************************** END OF FILE *********************************/