328 lines
12 KiB
C
328 lines
12 KiB
C
/*
|
||
*********************************************************************************
|
||
头文件
|
||
*********************************************************************************
|
||
*/
|
||
#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<len;i++)
|
||
{
|
||
if (shex[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 *********************************/
|
||
|
||
|