基础版本

This commit is contained in:
bathfire
2026-04-27 16:55:02 +08:00
commit 64b3e488da
269 changed files with 383851 additions and 0 deletions
+436
View File
@@ -0,0 +1,436 @@
/*C*****************************************************************************
* NAME: fRamDrive.c
*-------------------------------------------------------------------------------
*******************************************************************************/
/*_____ I N C L U D E S ______________________________________________________*/
//#define FRAM_INIT
#include "config.h" //全局声明
volatile s_uniGlobal_Typedef s_uniGlobal;
//参数初始化====================================================================
//密码
const u8 initFRam_Flag = 0x38;
const PrintInfo_Type InitPrintInfo={
" Ho So Giao Dich ",//交易记录
"TEN CUA HANG: ",//地址
"DIA CHI: ",//税号
"MA SO THUE: ",//
" ",
" ",
"SO VOL: ",//抢号
"SO TIEN: ",//金额
"SO LIT: ",//加油量
"DONGIA: ",//单价
" ",
"NGAY: ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
"CAM ON & HEN GAP LAI QUY KHACH !",
};
const MD_Port_Data_Type InitMD_Port_Data = {
//BaudRate StopBits Parity_Even POSType GunNumber MBCountTime Display_Type
{ 9600, 1, 0, 0, 0, 10, 0 ,MD_RS485,{0,0,0,0,0,0,0,0,0,0}},
{//Num Addr State Standby[35]
{0, 0, 0, },
{0, 0, 0, },
{0, 0, 0, },
{0, 0, 0, },
{0, 0, 0, },
{0, 0, 0, },
{0, 0, 0, },
{0, 0, 0, },
{0, 0, 0, },
{0, 0, 0, },
{0, 0, 0, },
{0, 0, 0, },
{0, 0, 0, },
{0, 0, 0, },
{0, 0, 0, },
{0, 0, 0, },
}
};
/*typedef struct
{
char CMD_SOCKA[50];
char IMEI[20];
char APN[40];
char WiFIName[40];
char WiFIPassWord[20];
}WirelessData_Type;*/
//Tast URL http://test.joyfueling.com:8012/
// http://3.92.208.210:7011/
const POSData_Type InitPOSData={
//
//{"AT+SOCKA=TCP,3.92.208.210,7011\r\n"},POS_Connect_Typ_Station};
{"joyfuel.joyfueling.com,7011","","","KFB-2.4G","KFB123456"},POS_Connect_Typ_Station};
const u8 InitMD_Port_Num_Top = 0;
const ROM_UpData_Type InitROM_UpData = {{0x06},900};//主程序最大450K
const u32 InitPREXDATA_WaitUpNummber = 0;
const u32 InitPREXDATA_TTC = 0;
const PREXDATA_Type initPrintLastRecord= {0,0,0,0,0,0,0,0,0};
const POSNetSetState_TypeDef InitPOSNetSetState;
const MD_Multiplex_Port_Data_Type InitMD_Multiplex_Port_Data;//端口5,多路复用口PREXDATA_NowFrameLen
const WhiteList_Type InitWhiteList;
const PREXDATA_Upload_Type InitPREXDATA_Upload;
//==============================================================================
const framDataIndex FDITab[] =
{ ///FRAM数据1区(数据操作相对不频烦)
/// pInitData; upData pData firstAdr; len; Group Tpye; //(注意,校验增加在数据包尾)
{(u8*)&initFRam_Flag, (u8*)(&buf_FRam_Flag), (u8*)(&TXHData.FRam_Flag), FRam_Flag_FADR, FRam_Flag_LEN, FRam_Flag_Group, CF_FRam_Flag},
{(u8*)&InitROM_UpData, (u8*)(&buf_ROM_UpData), (u8*)(&TXHData.ROM_UpData), ROM_UpData_FADR, ROM_UpData_LEN, ROM_UpData_Group, CF_ROM_UpData},
{(u8*)&InitMD_Port_Data, (u8*)(&buf_MD_Port_Data), (u8*)(&TXHData.MD_Port_Data), MD_Port_Data_FADR, MD_Port_Data_LEN, MD_Port_Data_Group, CF_MD_Port_Data},
{(u8*)&InitPOSData, (u8*)(&buf_POSData), (u8*)(&TXHData.POSData), POSData_FADR, POSData_LEN, POSData_Group, CF_POSData},
{(u8*)&InitMD_Port_Num_Top, (u8*)(&buf_MD_Port_Num_Top), (u8*)(&TXHData.MD_Port_Num_Top), MD_Port_Num_Top_FADR, MD_Port_Num_Top_LEN, MD_Port_Num_Top_Group, CF_MD_Port_Num_Top},
{(u8*)&InitPREXDATA_WaitUpNummber,(u8*)(&buf_PREXDATA_WaitUpNummber), (u8*)(&TXHData.PREXDATA_WaitUpNummber),PREXDATA_WaitUpNummber_FADR, PREXDATA_WaitUpNummber_LEN, PREXDATA_WaitUpNummber_Group, CF_PREXDATA_WaitUpNummber},
{(u8*)&InitPREXDATA_TTC, (u8*)(&buf_PREXDATA_TTC), (u8*)(&TXHData.PREXDATA_TTC), PREXDATA_TTC_FADR, PREXDATA_TTC_LEN, PREXDATA_TTC_Group, CF_PREXDATA_TTC},
{(u8*)&InitPrintInfo, (u8*)(&buf_PrintInfo), (u8*)(&TXHData.PrintInfo), PrintInfo_FADR, PrintInfo_LEN, PrintInfo_Group, CF_PrintInfo},
{(u8*)&initPrintLastRecord, (u8*)(&buf_PrintLastRecord), (u8*)(&TXHData.PrintLastRecord), PrintLastRecord_FADR, PrintLastRecord_LEN, PrintLastRecord_Group, CF_PrintLastRecord},
{(u8*)&InitPOSNetSetState, (u8*)(&buf_POSNetSetState), (u8*)(&TXHData.POSNetSetState), POSNetSetState_FADR, POSNetSetState_LEN, POSNetSetState_Group, CF_POSNetSetState},
{(u8*)&InitMD_Multiplex_Port_Data,(u8*)(&buf_MD_Multiplex_Port_Data), (u8*)(&TXHData.MD_Multiplex_Port_Data),MD_Multiplex_Port_Data_FADR, MD_Multiplex_Port_Data_LEN, MD_Multiplex_Port_Data_Group, CF_MD_Multiplex_Port_Data},
{(u8*)&InitWhiteList, (u8*)(&buf_WhiteList), (u8*)(&TXHData.WhiteList), WhiteList_FADR, WhiteList_LEN, WhiteList_Group, CF_WhiteList},
{(u8*)&InitPREXDATA_Upload, (u8*)(&buf_PREXDATA_Upload), (u8*)(&TXHData.PREXDATA_Upload), PREXDATA_Upload_FADR, PREXDATA_Upload_LEN, PREXDATA_Upload_Group, CF_PREXDATA_Upload},
};
////==============================================================================
//F*****************************************************************************
//* NAME: FRamDataCheck
//* PURPOSE: 校验函数
//* PARAMS: pData需要检验的数组地址,len数据长度
//* return: 无
//******************************************************************************
u8 FRamDataCheck(volatile u8* pData, u16 len)
{
u8 result;
result = *pData;
while(len--)
{
result += *pData++;
};
return result;
}
/****************************************************
函数名:FM_IO_Configuration
功能 :FM存储部分用到的IO初始化
参数 :无
返回值:无
****************************************************/
void FM_IO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA ,ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
/*!< Configure SPI1 pins: SCK MOSI*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/*!< Configure SPI1: MISO */
//GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //modi
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/****************************************************
函数名:FM_SPI_Configuration
功能 :FM存储部分用到的SPI初始化
参数 :无
返回值:无
****************************************************/
void FM_SPI_Configuration(void)
{
/* SPI1 configuration */
SPI_InitTypeDef SPI_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
SPI_I2S_DeInit(SPI1);
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//???
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;//8?????
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;//?????SCK?1
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;//??????2???????
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//NSS????
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;//???
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;//????
SPI_InitStructure.SPI_CRCPolynomial = 7;//CRC???
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;//????
SPI_Init(SPI1, &SPI_InitStructure);
SPI_Cmd(SPI1, ENABLE);
}
/****************************************************
函数名:FM_SPI2_SendByte
功能 :FM存储部分用到的SPI发送函数
参数 dt 要发送的数据
返回值:无
****************************************************/
u8 FM_SPI1_SendByte(u8 dt)
{
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1, dt);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
return SPI_I2S_ReceiveData(SPI1);
}
/****************************************************
函数名:FM_ReadData
功能 :读取指定地址的数据
参数 *pBuff:读取缓存
addr :读取的地址
Len :数据长度
返回值:无
****************************************************/
void FM_ReadData(u8 *pBuff,u32 addr,u16 Len)
{
u16 i = 0;
CLI();
FM_CS_EN;
FM_SPI1_SendByte(0x03);
FM_SPI1_SendByte((u8)(addr>>16));
FM_SPI1_SendByte((u8)(addr>>8));
FM_SPI1_SendByte((u8)addr);
for(i = 0;i < Len;i ++)
{
*pBuff = FM_SPI1_SendByte(0x00);
pBuff ++;
}
FM_CS_DIS;
SEI();
}
/****************************************************
函数名:FM_WriteData
功能 :写取指定地址的数据
参数 *pBuff:数据缓存
addr :写入的地址
Len :数据长度
返回值:无
****************************************************/
void FM_WriteData(u8 *pBuff,u32 addr,u16 Len)
{
u16 i = 0;
CLI();
FM_CS_EN;
FM_SPI1_SendByte(0x06);
FM_CS_DIS;
FM_CS_EN;
FM_SPI1_SendByte(0x02);
FM_SPI1_SendByte((u8)(addr>>16));
FM_SPI1_SendByte((u8)(addr>>8));
FM_SPI1_SendByte((u8)addr);
for(i = 0;i < Len;i ++)
{
FM_SPI1_SendByte(*pBuff);
pBuff ++;
}
FM_CS_DIS;
SEI();
}
/****************************************************
函数名:FM_Init
功能 FM存储部分初始化
参数 :无
返回值:无
****************************************************/
u16 iiii = 0;//搞不清楚,必须是全局变量才行(可能存在隐患,标注一下)
void FM_Init(void)
{
u16 i = 0,j = 0;
u8* pBuff;
u8 Temp_Buff[1300];
u8 Temp = 0;
u32 Fristflag = 0,delay = 0;
FM_IO_Configuration(); //FM相关IO初始化
FM_SPI_Configuration(); //FM相关SPI初始化
//for(delay = 0;delay<0xfffff;delay++);//无意义延时,等待铁电稳定
delay_ms(10);
pBuff = (u8*)&Fristflag;
{
FM_CS_EN;
FM_SPI1_SendByte(0x06); //写使能
FM_CS_DIS;
FM_CS_EN;
FM_SPI1_SendByte(0x01); //清除保护位
FM_SPI1_SendByte(0x00);
FM_CS_DIS;
}
if((FDITab[FramItemEnd - 1].firstAdr + FDITab[FramItemEnd - 1].len * FDITab[FramItemEnd - 1].Group) > 0x20000)
{
__breakpoint(0); // halt program execution here
while(1);
}
#ifdef FRAM_INIT //初始化
for(iiii = 0;iiii< FramItemEnd;iiii ++) //开机写入默认存储内容
{
for(i = 0;i < FDITab[iiii].Group;i ++)
{
for(j = 0;j < FDITab[iiii].len-checkLen_1;j ++)
Temp_Buff[j]=*(FDITab[iiii].upData+j) = *(FDITab[iiii].pInitData+j);
Temp = FRamDataCheck(Temp_Buff,FDITab[iiii].len - checkLen_1);
FM_WriteData(uniGlobal.Global,FDITab[iiii].firstAdr+FDITab[iiii].len*i, FDITab[iiii].len-checkLen_1);
FM_WriteData(&Temp, FDITab[iiii].firstAdr+FDITab[iiii].len+FDITab[iiii].len*i-checkLen_1,checkLen_1);
}
}
#endif
if(SWF8 == SWF_ON)
{
FM_Data_Init();
}
for(iiii = 0;iiii< FramItemEnd;iiii ++) //开机获取存储内容
{
for(i = 0;i < FDITab[iiii].Group;i ++)
{
if(FMItemRead(iiii,i) == 0)
{
}
}
}
TXHData.SystemErr = TXHData.PREXDATA_WaitUpNummber;
}
void PCBEncryption(void)
{
STM32CPU.v.id[0] = *(u32*)0x1fff7a10;
STM32CPU.v.id[1] = *(u32*)(0x1fff7a10 + 4);
STM32CPU.v.id[2] = *(u32*)(0x1fff7a10 + 8);
TXHData.Encryption[0] = CRC_Check(&STM32CPU.v.byte[0],6);
TXHData.Encryption[1] = CRC_Check(&STM32CPU.v.byte[1],6);
TXHData.Encryption[2] = CRC_Check(&STM32CPU.v.byte[2],8);
TXHData.Encryption[3] = CRC_Check(&STM32CPU.v.byte[3],8);
FM_WriteData((u8*)TXHData.Encryption,Encryption_FADR,sizeof(TXHData.Encryption));
}
void PCBEncryption_Check(void)
{
STM32CPU.v.id[0] = *(u32*)0x1fff7a10;
STM32CPU.v.id[1] = *(u32*)(0x1fff7a10 + 4);
STM32CPU.v.id[2] = *(u32*)(0x1fff7a10 + 8);
FM_ReadData((u8*)TXHData.Encryption,Encryption_FADR,sizeof(TXHData.Encryption));
if(TXHData.Encryption[0] != CRC_Check(&STM32CPU.v.byte[0],6)) TXHData.ErrState.Flag.e_errPCBCheck = 1;
if(TXHData.Encryption[1] != CRC_Check(&STM32CPU.v.byte[1],6)) TXHData.ErrState.Flag.e_errPCBCheck = 1;
if(TXHData.Encryption[2] != CRC_Check(&STM32CPU.v.byte[2],8)) TXHData.ErrState.Flag.e_errPCBCheck = 1;
if(TXHData.Encryption[3] != CRC_Check(&STM32CPU.v.byte[3],8)) TXHData.ErrState.Flag.e_errPCBCheck = 1;
}
void FM_Data_Init(void)
{
u16 i = 0,j = 0;
u8 Temp_Buff[1300];
u8 Temp = 0;
u8 BackTemp = 0;
FMItemRead(CF_ROM_UpData,0);
BackTemp = TXHData.ROM_UpData.ROM_UpData_State.State;//IAP初始化的时候用过了,不能重复初始化
for(iiii = 0;iiii< FramItemEnd;iiii ++) //开机写入默认存储内容
{
for(i = 0;i < FDITab[iiii].Group;i ++)
{
for(j = 0;j < FDITab[iiii].len-checkLen_1;j ++)
Temp_Buff[j]=*(FDITab[iiii].upData+j) = *(FDITab[iiii].pInitData+j);
Temp = FRamDataCheck(Temp_Buff,FDITab[iiii].len - checkLen_1);
FM_WriteData(uniGlobal.Global,FDITab[iiii].firstAdr+FDITab[iiii].len*i, FDITab[iiii].len-checkLen_1);
FM_WriteData(&Temp, FDITab[iiii].firstAdr+FDITab[iiii].len+FDITab[iiii].len*i-checkLen_1,checkLen_1);
}
}
TXHData.ROM_UpData.ROM_UpData_State.State = BackTemp;
FMItemWrite(CF_ROM_UpData,0);
}
u8 FMItemWrite(FramItem Type, u16 Group)
{
u16 i = 0,j = 0,k = 0;
u8 Temp_Buff[1300];
u8 Temp = 0;
if(Group >= FDITab[Type].Group)
return 0;
if(TXHData.PowerDown.State == 0 && FMItemRead(CF_FRam_Flag,0) == 1)
{
for(i = 0;i < FDITab[Type].len;i ++)
{
*(FDITab[Type].upData + i) = *(FDITab[Type].pData + i + (FDITab[Type].len-1)*Group);
Temp_Buff[i] = *(FDITab[Type].upData + i);
}
for(j = 0;j < 6;j ++)
{
FM_WriteData(uniGlobal.Global,FDITab[Type].firstAdr+FDITab[Type].len*Group,FDITab[Type].len-1);
Temp = FRamDataCheck(Temp_Buff,FDITab[Type].len - checkLen_1);
FM_WriteData(&Temp,FDITab[Type].firstAdr+FDITab[Type].len+FDITab[Type].len*Group-1,checkLen_1);
if(FMItemRead(Type,Group) == 1)
{
return 1;
}
delay_ms(100);
}
}
// pGun.ErrState[0].Flag.e_errFramParameter = 1; //存储器错误公共错误,只判断一个
// pGun.ErrState[1].Flag.e_errFramParameter = 1; //存储器错误公共错误,只判断一个
return 0;
}
u8 FMItemRead(FramItem Type, u16 Group)
{
volatile u16 ii = 0,j = 0;
u8 Temp_Buff[1300];
u8 Temp = 0;
if(Group >= FDITab[Type].Group)
return 0;
for(j = 0;j < 6;j ++)
{
/****************************/
FM_ReadData(uniGlobal.Global,FDITab[CF_FRam_Flag].firstAdr,1);
*(Temp_Buff) = *(FDITab[CF_FRam_Flag].upData);
if(*(Temp_Buff) == 0x38)
{
FM_ReadData(uniGlobal.Global,FDITab[Type].firstAdr+FDITab[Type].len*Group,FDITab[Type].len);
for(ii = 0;ii < FDITab[Type].len;ii ++)
*(Temp_Buff+ii) = *(FDITab[Type].upData+ii);
Temp = FRamDataCheck(Temp_Buff,FDITab[Type].len - checkLen_1);
if(Temp == Temp_Buff[FDITab[Type].len - checkLen_1])
{
for(ii = 0;ii < FDITab[Type].len - checkLen_1;ii ++)
{
*(FDITab[Type].pData+ii+(FDITab[Type].len-1)*Group) = *(FDITab[Type].upData+ii);
}
return 1;
}
}
delay_ms(100);
}
// pGun.ErrState[0].Flag.e_errFramParameter = 1; //存储器错误公共错误,只判断一个
// pGun.ErrState[1].Flag.e_errFramParameter = 1; //存储器错误公共错误,只判断一个
return 0;
}
+191
View File
@@ -0,0 +1,191 @@
#ifndef _FRam_H_
#define _FRam_H_
/******************************************************************************
* NAME: fRam.h
*******************************************************************************/
/*_____ M A C R O S __________________________________________________________*/
//端口
#define FM_CS_EN GPIO_ResetBits(GPIOA, GPIO_Pin_3);GPIO_SetBits(GPIOA, GPIO_Pin_4);
#define FM_CS_DIS GPIO_SetBits(GPIOA, GPIO_Pin_3);
//FM 命令
#define FM_WREN 0X06 //读写使能
#define FM_READ 0X03 //读命令
#define FM_WRITE 0X02 //写命令
#define CLI() __set_PRIMASK(1)
#define SEI() __set_PRIMASK(0)
/*_____ M A C R O S __________________________________________________________*/
//CONFIG(配置)
#define FRAM_SPACE_SIZE (0X800) ///定义铁电最大保存容量
#define FristStart_Addr 100
//******************************************************************************
// 存储器内容
#define uniGlobal s_uniGlobal.u
#define checkLen_1 1 ///如果数据组带有校验,增加1byte
//******************************************************************************
// FRAM_DATA_MAP
//加密验证数据
///全局缓冲中的值
///结构体定义
#define Encryption_FADR (80)
//存储器完好标致
///全局缓冲中的值
#define buf_FRam_Flag uniGlobal.FRam_Flag
///结构体定义
#define FRam_Flag_FADR (FristStart_Addr)
#define FRam_Flag_LEN (sizeof(buf_FRam_Flag) + checkLen_1)
#define FRam_Flag_Group 1 //组数
///全局缓冲中的值
#define buf_ROM_UpData uniGlobal.ROM_UpData
///结构体定义
#define ROM_UpData_FADR (FRam_Flag_FADR + FRam_Flag_LEN * FRam_Flag_Group)
#define ROM_UpData_LEN (sizeof(buf_ROM_UpData) + checkLen_1)
#define ROM_UpData_Group 1 //组数
//员工数据
///全局缓冲中的值
#define buf_MD_Port_Data uniGlobal.MD_Port_Data
///结构体定义
#define MD_Port_Data_FADR (ROM_UpData_FADR + ROM_UpData_LEN * ROM_UpData_Group)
#define MD_Port_Data_LEN (sizeof(buf_MD_Port_Data) + checkLen_1)
#define MD_Port_Data_Group 4 //组数
//员工数据
///全局缓冲中的值
#define buf_POSData uniGlobal.POSData
///结构体定义
#define POSData_FADR (MD_Port_Data_FADR + MD_Port_Data_LEN * MD_Port_Data_Group)
#define POSData_LEN (sizeof(buf_POSData) + checkLen_1)
#define POSData_Group 1 //组数
//员工数据
///全局缓冲中的值
#define buf_MD_Port_Num_Top uniGlobal.MD_Port_Num_Top
///结构体定义
#define MD_Port_Num_Top_FADR (POSData_FADR + POSData_LEN * POSData_Group)
#define MD_Port_Num_Top_LEN (sizeof(buf_MD_Port_Num_Top) + checkLen_1)
#define MD_Port_Num_Top_Group 1 //组数
///全局缓冲中的值
#define buf_PREXDATA_WaitUpNummber uniGlobal.PREXDATA_WaitUpNummber
///结构体定义
#define PREXDATA_WaitUpNummber_FADR (MD_Port_Num_Top_FADR + MD_Port_Num_Top_LEN * MD_Port_Num_Top_Group)
#define PREXDATA_WaitUpNummber_LEN (sizeof(buf_PREXDATA_WaitUpNummber) + checkLen_1)
#define PREXDATA_WaitUpNummber_Group 1 //组数
///全局缓冲中的值
#define buf_PREXDATA_TTC uniGlobal.PREXDATA_TTC
///结构体定义
#define PREXDATA_TTC_FADR (PREXDATA_WaitUpNummber_FADR + PREXDATA_WaitUpNummber_LEN * PREXDATA_WaitUpNummber_Group)
#define PREXDATA_TTC_LEN (sizeof(buf_PREXDATA_TTC) + checkLen_1)
#define PREXDATA_TTC_Group 1 //组数
///全局缓冲中的值
#define buf_PrintInfo uniGlobal.PrintInfo
///结构体定义
#define PrintInfo_FADR (PREXDATA_TTC_FADR + PREXDATA_TTC_LEN * PREXDATA_TTC_Group)
#define PrintInfo_LEN (sizeof(buf_PrintInfo) + checkLen_1)
#define PrintInfo_Group 1 //组数
///全局缓冲中的值
#define buf_PrintLastRecord uniGlobal.PrintLastRecord
///结构体定义
#define PrintLastRecord_FADR (PrintInfo_FADR + PrintInfo_LEN * PrintInfo_Group)
#define PrintLastRecord_LEN (sizeof(buf_PrintLastRecord) + checkLen_1)
#define PrintLastRecord_Group 64 //组数
///全局缓冲中的值
#define buf_POSNetSetState uniGlobal.POSNetSetState
///结构体定义
#define POSNetSetState_FADR (PrintLastRecord_FADR + PrintLastRecord_LEN * PrintLastRecord_Group)
#define POSNetSetState_LEN (sizeof(buf_POSNetSetState) + checkLen_1)
#define POSNetSetState_Group 1 //组数
///全局缓冲中的值
#define buf_MD_Multiplex_Port_Data uniGlobal.MD_Multiplex_Port_Data
///结构体定义
#define MD_Multiplex_Port_Data_FADR (POSNetSetState_FADR + POSNetSetState_LEN * POSNetSetState_Group)
#define MD_Multiplex_Port_Data_LEN (sizeof(buf_MD_Multiplex_Port_Data) + checkLen_1)
#define MD_Multiplex_Port_Data_Group 1 //组数
///全局缓冲中的值
#define buf_WhiteList uniGlobal.WhiteList
///结构体定义
#define WhiteList_FADR (MD_Multiplex_Port_Data_FADR + MD_Multiplex_Port_Data_LEN * MD_Multiplex_Port_Data_Group)
#define WhiteList_LEN (sizeof(buf_WhiteList) + checkLen_1)
#define WhiteList_Group 1 //组数
///全局缓冲中的值
#define buf_PREXDATA_Upload uniGlobal.PREXDATA_Upload
///结构体定义
#define PREXDATA_Upload_FADR (WhiteList_FADR + WhiteList_LEN * WhiteList_Group)
#define PREXDATA_Upload_LEN (sizeof(buf_PREXDATA_Upload) + checkLen_1)
#define PREXDATA_Upload_Group 1 //组数
typedef struct
{
union
{
u8 Global[1000]; //全局最大个数
u8 FRam_Flag;
MD_Port_Data_Type MD_Port_Data;
POSData_Type POSData;
u8 MD_Port_Num_Top;
ROM_UpData_Type ROM_UpData;
u32 PREXDATA_WaitUpNummber;
u32 PREXDATA_TTC;
PrintInfo_Type PrintInfo;
PREXDATA_Type PrintLastRecord;//越南打印每把枪最后一笔数据
POSNetSetState_TypeDef POSNetSetState;
MD_Multiplex_Port_Data_Type MD_Multiplex_Port_Data;//端口5,多路复用口
WhiteList_Type WhiteList;
PREXDATA_Upload_Type PREXDATA_Upload;
}u;
u8 CheckAdd;
}s_uniGlobal_Typedef; //存储器读写缓存共用体
typedef enum
{
CF_FRam_Flag,
CF_ROM_UpData,
CF_MD_Port_Data,
CF_POSData,
CF_MD_Port_Num_Top,
CF_PREXDATA_WaitUpNummber,
CF_PREXDATA_TTC,
CF_PrintInfo,
CF_PrintLastRecord,
CF_POSNetSetState,
CF_MD_Multiplex_Port_Data,
CF_WhiteList,
CF_PREXDATA_Upload,
FramItemEnd,
}FramItem;
//********************************************************************************
typedef struct
{
u8* pInitData;//初始化指针
u8* upData; //共用体数据缓存区指针
u8* pData; //pGun数据指针
u32 firstAdr; //第一地址
u16 len; //长度
u16 Group;
u8 Tpye; //类型
}framDataIndex;
void FM_Init(void);
u8 FMItemWrite(FramItem Type, u16 Group);
u8 FMItemRead(FramItem Type, u16 Group);
void FM_Data_Init(void);
void PCBEncryption(void);
void PCBEncryption_Check(void);
#endif
+445
View File
@@ -0,0 +1,445 @@
#ifndef _FRam_H_
#define _FRam_H_
/******************************************************************************
* NAME: fRam.h
*******************************************************************************/
/*_____ M A C R O S __________________________________________________________*/
//端口
#define FM_CS_EN GPIO_ResetBits(GPIOC, GPIO_Pin_6);
#define FM_CS_DIS GPIO_SetBits(GPIOC, GPIO_Pin_6);
#define FM_WP_EN GPIO_ResetBits(GPIOC, GPIO_Pin_7);
#define FM_WP_DIS GPIO_SetBits(GPIOC, GPIO_Pin_7);
//FM 命令
#define FM_WREN 0X06 //读写使能
#define FM_READ 0X03 //读命令
#define FM_WRITE 0X02 //写命令
#define CLI() __set_PRIMASK(1)
#define SEI() __set_PRIMASK(0)
/*_____ M A C R O S __________________________________________________________*/
//CONFIG(配置)
#define FRAM_SPACE_SIZE (0X800) ///定义铁电最大保存容量
#define FristStart_Addr 0
//******************************************************************************
// 存储器内容
#define uniGlobal s_uniGlobal.u
//******************************************************************************
// FRAM_DATA_MAP
//******************************************************************************
#define checkLen_1 0 ///如果数据组带有校验,增加1byte
//==============================================================================
//单价
///全局缓冲中的值
#define buf_Price uniGlobal.Price
///结构体定义
#define Price_FADR 100
#define Price_SADR FRAM_SPACE_SIZE/2+100
#define Price_LEN (sizeof(buf_Price) + checkLen_1)
#define Price_arrayNb gunNumber
//==============================================================================
//班累
///全局缓冲中的值
#define buf_M_SquadTop uniGlobal.M_SquadTop
///结构体定义
#define M_SquadTop_FADR (Price_FADR + Price_LEN)
#define M_SquadTop_SADR (Price_SADR + Price_LEN)
#define M_SquadTop_LEN (sizeof(buf_M_SquadTop) + checkLen_1)
#define M_SquadTop_arrayNb gunNumber
//==============================================================================
//班累
///全局缓冲中的值
#define buf_V_SquadTop uniGlobal.V_SquadTop
///结构体定义
#define V_SquadTop_FADR (M_SquadTop_FADR + M_SquadTop_LEN)
#define V_SquadTop_SADR (M_SquadTop_SADR + M_SquadTop_LEN)
#define V_SquadTop_LEN (sizeof(buf_V_SquadTop) + checkLen_1)
#define V_SquadTop_arrayNb gunNumber
//==============================================================================
//班累
///全局缓冲中的值
#define buf_S_SquadTop uniGlobal.S_SquadTop
///结构体定义
#define S_SquadTop_FADR (V_SquadTop_FADR + V_SquadTop_LEN)
#define S_SquadTop_SADR (V_SquadTop_SADR + V_SquadTop_LEN)
#define S_SquadTop_LEN (sizeof(buf_S_SquadTop) + checkLen_1)
#define S_SquadTop_arrayNb gunNumber
//体积总累
///全局缓冲中的值
#define buf_MassTop uniGlobal.MassTop
///结构体定义
#define MassTop_FADR (S_SquadTop_FADR + S_SquadTop_LEN)
#define MassTop_SADR (S_SquadTop_SADR + S_SquadTop_LEN)
#define MassTop_LEN (sizeof(buf_MassTop) + checkLen_1)
#define MassTop_arrayNb gunNumber
//质量总累
///全局缓冲中的值
#define buf_VolumeTop uniGlobal.VolumeTop
///结构体定义
#define VolumeTop_FADR (MassTop_FADR + MassTop_LEN)
#define VolumeTop_SADR (MassTop_SADR + MassTop_LEN)
#define VolumeTop_LEN (sizeof(buf_VolumeTop) + checkLen_1)
#define VolumeTop_arrayNb gunNumber
//金额总累
///全局缓冲中的值
#define buf_SaleTop uniGlobal.SaleTop
///结构体定义
#define SaleTop_FADR (VolumeTop_FADR + VolumeTop_LEN)
#define SaleTop_SADR (VolumeTop_SADR + VolumeTop_LEN)
#define SaleTop_LEN (sizeof(buf_SaleTop) + checkLen_1)
#define SaleTop_arrayNb gunNumber
//卸车总累
///全局缓冲中的值
#define buf_StockTop uniGlobal.StockTop
///结构体定义
#define StockTop_FADR (SaleTop_FADR + SaleTop_LEN)
#define StockTop_SADR (SaleTop_SADR + SaleTop_LEN)
#define StockTop_LEN (sizeof(buf_StockTop) + checkLen_1)
#define StockTop_arrayNb gunNumber
//小数点
///全局缓冲中的值
#define buf_Decimal uniGlobal.Decimal
///结构体定义
#define Decimal_FADR (StockTop_FADR + StockTop_LEN)
#define Decimal_SADR (StockTop_SADR + StockTop_LEN)
#define Decimal_LEN (sizeof(buf_Decimal) + checkLen_1)
#define Decimal_arrayNb gunNumber
//系统时间
///全局缓冲中的值
#define buf_SystemTime uniGlobal.SystemTime
///结构体定义
#define SystemTime_FADR (Decimal_FADR + Decimal_LEN)
#define SystemTime_SADR (Decimal_SADR + Decimal_LEN)
#define SystemTime_LEN (sizeof(buf_SystemTime) + checkLen_1)
#define SystemTime_arrayNb gunNumber
//流量计模式
///全局缓冲中的值
#define buf_GasWorkMode uniGlobal.GasWorkMode
///结构体定义
#define GasWorkMode_FADR (SystemTime_FADR + SystemTime_LEN)
#define GasWorkMode_SADR (SystemTime_SADR + SystemTime_LEN)
#define GasWorkMode_LEN (sizeof(buf_GasWorkMode) + checkLen_1)
#define GasWorkMode_arrayNb gunNumber
//脉冲当量
///全局缓冲中的值
#define buf_PulseEqu uniGlobal.PulseEqu
///结构体定义
#define PulseEqu_FADR (GasWorkMode_FADR + GasWorkMode_LEN)
#define PulseEqu_SADR (GasWorkMode_SADR + GasWorkMode_LEN)
#define PulseEqu_LEN (sizeof(buf_PulseEqu) + checkLen_1)
#define PulseEqu_arrayNb gunNumber
//密度
///全局缓冲中的值
#define buf_Density uniGlobal.Density
///结构体定义
#define Density_FADR (PulseEqu_FADR + PulseEqu_LEN)
#define Density_SADR (PulseEqu_SADR + PulseEqu_LEN)
#define Density_LEN (sizeof(buf_Density) + checkLen_1)
#define Density_arrayNb gunNumber
//最小显示量
///全局缓冲中的值
#define buf_MinDisp uniGlobal.MinDisp
///结构体定义
#define MinDisp_FADR (Density_FADR + Density_LEN)
#define MinDisp_SADR (Density_SADR + Density_LEN)
#define MinDisp_LEN (sizeof(buf_MinDisp) + checkLen_1)
#define MinDisp_arrayNb gunNumber
//提前关阀量
///全局缓冲中的值
#define buf_ValueTurnOff uniGlobal.ValueTurnOff
///结构体定义
#define ValueTurnOff_FADR (MinDisp_FADR + MinDisp_LEN)
#define ValueTurnOff_SADR (MinDisp_SADR + MinDisp_LEN)
#define ValueTurnOff_LEN (sizeof(buf_ValueTurnOff) + checkLen_1)
#define ValueTurnOff_arrayNb gunNumber
//过冲量
///全局缓冲中的值
#define buf_ValueOverShoot uniGlobal.ValueOverShoot
///结构体定义
#define ValueOverShoot_FADR (ValueTurnOff_FADR + ValueTurnOff_LEN)
#define ValueOverShoot_SADR (ValueTurnOff_SADR + ValueTurnOff_LEN)
#define ValueOverShoot_LEN (sizeof(buf_ValueOverShoot) + checkLen_1)
#define ValueOverShoot_arrayNb gunNumber
//时间计数器
///全局缓冲中的值
#define buf_TimeCount uniGlobal.TimeCount
///结构体定义
#define TimeCount_FADR (ValueOverShoot_FADR + ValueOverShoot_LEN)
#define TimeCount_SADR (ValueOverShoot_SADR + ValueOverShoot_LEN)
#define TimeCount_LEN (sizeof(buf_TimeCount) + checkLen_1)
#define TimeCount_arrayNb gunNumber
//当次加油数据
///全局缓冲中的值
#define buf_FuelRecord0 uniGlobal.FuelRecord0
///结构体定义
#define FuelRecord0_FADR (TimeCount_FADR + TimeCount_LEN)
#define FuelRecord0_SADR (TimeCount_SADR + TimeCount_LEN)
#define FuelRecord0_LEN (sizeof(buf_FuelRecord0) + checkLen_1)
#define FuelRecord0_arrayNb gunNumber
//前次加油数据
///全局缓冲中的值
#define buf_FuelRecord1 uniGlobal.FuelRecord1
///结构体定义
#define FuelRecord1_FADR (FuelRecord0_FADR + FuelRecord0_LEN)
#define FuelRecord1_SADR (FuelRecord0_SADR + FuelRecord0_LEN)
#define FuelRecord1_LEN (sizeof(buf_FuelRecord1) + checkLen_1)
#define FuelRecord1_arrayNb gunNumber
//限制加油次数
///全局缓冲中的值
#define buf_TriesLimit uniGlobal.TriesLimit
///结构体定义
#define TriesLimit_FADR (FuelRecord1_FADR + FuelRecord1_LEN)
#define TriesLimit_SADR (FuelRecord1_SADR + FuelRecord1_LEN)
#define TriesLimit_LEN (sizeof(buf_TriesLimit) + checkLen_1)
#define TriesLimit_arrayNb gunNumber
//流量计地址
///全局缓冲中的值
#define buf_GasAddr uniGlobal.GasAddr
///结构体定义
#define GasAddr_FADR (TriesLimit_FADR + TriesLimit_LEN)
#define GasAddr_SADR (TriesLimit_SADR + TriesLimit_LEN)
#define GasAddr_LEN (sizeof(buf_GasAddr) + checkLen_1)
#define GasAddr_arrayNb gunNumber
//流量计地址
///全局缓冲中的值
#define buf_GasAddr uniGlobal.GasAddr
///结构体定义
#define GasAddr_FADR (TriesLimit_FADR + TriesLimit_LEN)
#define GasAddr_SADR (TriesLimit_SADR + TriesLimit_LEN)
#define GasAddr_LEN (sizeof(buf_GasAddr) + checkLen_1)
#define GasAddr_arrayNb gunNumber
//比例系数
///全局缓冲中的值
#define buf_GasScaleCoefficients uniGlobal.GasScaleCoefficients
///结构体定义
#define GasScaleCoefficients_FADR (GasAddr_FADR + GasAddr_LEN)
#define GasScaleCoefficients_SADR (GasAddr_SADR + GasAddr_LEN)
#define GasScaleCoefficients_LEN (sizeof(buf_GasScaleCoefficients) + checkLen_1)
#define GasScaleCoefficients_arrayNb gunNumber
//密度
///全局缓冲中的值
#define buf_GasDensity uniGlobal.GasDensity
///结构体定义
#define GasDensity_FADR (GasScaleCoefficients_FADR + GasScaleCoefficients_LEN)
#define GasDensity_SADR (GasScaleCoefficients_SADR + GasScaleCoefficients_LEN)
#define GasDensity_LEN (sizeof(buf_GasDensity) + checkLen_1)
#define GasDensity_arrayNb gunNumber
///全局缓冲中的值
#define buf_GasPourTo1 uniGlobal.GasPourTo1
///结构体定义
#define GasPourTo1_FADR (GasDensity_FADR + GasDensity_LEN)
#define GasPourTo1_SADR (GasDensity_SADR + GasDensity_LEN)
#define GasPourTo1_LEN (sizeof(buf_GasPourTo1) + checkLen_1)
#define GasPourTo1_arrayNb gunNumber
//低中到高流速切换
///全局缓冲中的值
#define buf_GasPour1To2 uniGlobal.GasPour1To2
///结构体定义
#define GasPour1To2_FADR (GasPourTo1_FADR + GasPourTo1_LEN)
#define GasPour1To2_SADR (GasPourTo1_SADR + GasPourTo1_LEN)
#define GasPour1To2_LEN (sizeof(buf_GasPour1To2) + checkLen_1)
#define GasPour1To2_arrayNb gunNumber
//最大流速
///全局缓冲中的值
#define buf_GasFlowMax uniGlobal.GasFlowMax
///结构体定义
#define GasFlowMax_FADR (GasPour1To2_FADR + GasPour1To2_LEN)
#define GasFlowMax_SADR (GasPour1To2_SADR + GasPour1To2_LEN)
#define GasFlowMax_LEN (sizeof(buf_GasFlowMax) + checkLen_1)
#define GasFlowMax_arrayNb gunNumber
//最小流速
///全局缓冲中的值
#define buf_GasFlowMin uniGlobal.GasFlowMin
///结构体定义
#define GasFlowMin_FADR (GasFlowMax_FADR + GasFlowMax_LEN)
#define GasFlowMin_SADR (GasFlowMax_SADR + GasFlowMax_LEN)
#define GasFlowMin_LEN (sizeof(buf_GasFlowMin) + checkLen_1)
#define GasFlowMin_arrayNb gunNumber
//最大压力值
///全局缓冲中的值
#define buf_PressureMax uniGlobal.PressureMax
///结构体定义
#define PressureMax_FADR (GasFlowMin_FADR + GasFlowMin_LEN)
#define PressureMax_SADR (GasFlowMin_SADR + GasFlowMin_LEN)
#define PressureMax_LEN (sizeof(buf_PressureMax) + checkLen_1)
#define PressureMax_arrayNb gunNumber
//最小压力值
///全局缓冲中的值
#define buf_PressureMin uniGlobal.PressureMin
///结构体定义
#define PressureMin_FADR (PressureMax_FADR + PressureMax_LEN)
#define PressureMin_SADR (PressureMax_SADR + PressureMax_LEN)
#define PressureMin_LEN (sizeof(buf_PressureMin) + checkLen_1)
#define PressureMin_arrayNb gunNumber
//卡介质
///全局缓冲中的值
#define buf_Medium uniGlobal.Medium
///结构体定义
#define Medium_FADR (PressureMin_FADR + PressureMin_LEN)
#define Medium_SADR (PressureMin_SADR + PressureMin_LEN)
#define Medium_LEN (sizeof(buf_Medium) + checkLen_1)
#define Medium_arrayNb gunNumber
//显示类型设置
///全局缓冲中的值
#define buf_DispSet uniGlobal.DispSet
///结构体定义
#define DispSet_FADR (Medium_FADR + Medium_LEN)
#define DispSet_SADR (Medium_SADR + Medium_LEN)
#define DispSet_LEN (sizeof(buf_DispSet) + checkLen_1)
#define DispSet_arrayNb gunNumber
//补偿
///全局缓冲中的值
#define buf_Compensation uniGlobal.Compensation
///结构体定义
#define Compensation_FADR (DispSet_FADR + DispSet_LEN)
#define Compensation_SADR (DispSet_SADR + DispSet_LEN)
#define Compensation_LEN (sizeof(buf_Compensation) + checkLen_1)
#define Compensation_arrayNb gunNumber
//RTC时钟第一次开机标志
///全局缓冲中的值
#define buf_RTCTimer_Flag uniGlobal.RTCTimer_Flag
///结构体定义
#define RTCTimer_Flag_FADR (Compensation_FADR + Compensation_LEN)
#define RTCTimer_Flag_SADR (Compensation_SADR + Compensation_LEN)
#define RTCTimer_Flag_LEN (sizeof(buf_RTCTimer_Flag) + checkLen_1)
#define RTCTimer_Flag_arrayNb gunNumber
//RTC时钟备份
///全局缓冲中的值
#define buf_RTCTimer_BKB uniGlobal.RTCTimer_BKB
///结构体定义
#define RTCTimer_BKB_FADR (RTCTimer_Flag_FADR + RTCTimer_Flag_LEN)
#define RTCTimer_BKB_SADR (RTCTimer_Flag_SADR + RTCTimer_Flag_LEN)
#define RTCTimer_BKB_LEN (sizeof(buf_RTCTimer_BKB) + checkLen_1)
#define RTCTimer_BKB_arrayNb gunNumber
//存储器完好标致
///全局缓冲中的值
#define buf_FRam_Flag uniGlobal.FRam_Flag
///结构体定义
#define FRam_Flag_FADR (RTCTimer_BKB_FADR + RTCTimer_BKB_LEN)
#define FRam_Flag_SADR (RTCTimer_BKB_SADR + RTCTimer_BKB_LEN)
#define FRam_Flag_LEN (sizeof(buf_FRam_Flag) + checkLen_1)
#define FRam_Flag_arrayNb gunNumber
typedef struct
{
u32 volume; //volume与sale 必须连续,符个字符对齐首地址
u32 sale; //金额
u32 price; //单价
}s_FuelRecord_Typedef;
typedef struct
{
union
{
u8 Global[100]; //全局最大个数
u16 Price[gunNumber]; //单价
u64 M_SquadTop[gunNumber]; //班累
u64 V_SquadTop[gunNumber]; //班累
u64 S_SquadTop[gunNumber]; //班累
u64 MassTop[gunNumber]; //质量总累
u64 VolumeTop[gunNumber]; //体积总累
u64 SaleTop[gunNumber]; //金额总累
u64 StockTop[gunNumber]; //卸车总累
u8 Decimal[3]; //小数点 金额 体积 单价
u8 SystemTime[7]; //系统时间 年年 月 日 时 分 秒
u8 GasWorkMode[gunNumber]; //加气模式
u32 PulseEqu[gunNumber]; //脉冲当量
u32 Density[gunNumber]; //密度
u16 MinDisp[gunNumber]; //最小显示量
u8 ValueTurnOff[gunNumber][50]; //提前关阀量
int8_t ValueOverShoot[gunNumber][2]; //过冲量
u32 TimeCount; //时间计数器
s_FuelRecord_Typedef FuelRecord0[gunNumber];//当次加油数据
s_FuelRecord_Typedef FuelRecord1[gunNumber];//前次加油数据
u32 TriesLimit; //限制加油次数
/******************流量计相关*******************/
u8 GasAddr[gunNumber]; //当前地址0开始,按顺序,与抢号对应
u16 GasScaleCoefficients[gunNumber]; //比例系数
u16 GasDensity[gunNumber]; //密度
u8 GasPourTo1[gunNumber]; //低到中流速切换阀值0-5 默认 2 Kg/Min
u8 GasPour1To2[gunNumber]; //中到高流速切换阀值0-5 默认 1.5Kg/Min
u8 GasFlowMax[gunNumber]; //最大流速值0-90 默认 50Kg/Min
u8 GasFlowMin[gunNumber]; //最小流速值0-90 默认 50Kg/Min
/******************压力检测相关******************/
u16 PressureMax[gunNumber]; //最大允许压力0-40 默认20MPa
u16 PressureMin[gunNumber]; //最小允许压力
u16 Medium; //卡介质
u16 DispSet; //显示类型设置
float Compensation[gunNumber];//补偿
u8 RTCTimer_Flag; //RTC初次启动标志
u32 RTCTimer_BKB; //RTC计数备份
u8 FRam_Flag;
}u;
u8 CheckAdd;
}s_uniGlobal_Typedef; //存储器读写缓存共用体
typedef enum
{
CF_Price, //单价
CF_M_SquadTop, //质量班累
CF_V_SquadTop, //体积班累
CF_S_SquadTop, //金额班累
CF_MassTop, //质量总累
CF_VolumeTop, //体积总累
CF_SaleTop, //金额总累
CF_StockTop, //卸车总累
CF_Decimal, //小数点
CF_SystemTime, //系统时间
CF_GasWorkMode, //流量计模式
CF_PulseEqu, //脉冲当量
CF_Density, //密度
CF_MinDisp, //最小显示量
CF_ValueTurnOff, //提前关阀量
CF_ValueOverShoot, //过冲量
CF_TimeCount, //时间计数器
CF_FuelRecord0, //当次加油记录
CF_FuelRecord1, //前次加油记录
CF_TriesLimit, //限制加油次数
CF_GasAddr, //流量计地址
CF_GasScaleCoefficients, //流量计比例系数
CF_GasDensity, //流量计密度
CF_GasPourTo1, //低到中流速切换阀值0-5 默认 2 Kg/Min
CF_GasPour1To2, //低到中流速切换阀值0-5 默认 2 Kg/Min
CF_GasFlowMax, //最大流速值0-90 默认 50Kg/Min
CF_GasFlowMin, //最大流速值0-90 默认 50Kg/Min
CF_PressureMax, //最大允许压力0-40 默认20MPa
CF_Medium, //卡介质
CF_DispSet, //显示类型设置
CF_Compensation, //补偿
CF_RTCTimer_Flag,
CF_RTCTimer_BKB,
CF_FRam_Flag, //存储器出错标志
FramItemEnd,
}FramItem;
//********************************************************************************
typedef struct
{
u8* pInitData;//初始化指针
u8* upData; //共用体数据缓存区指针
u8* pData; //pGun数据指针
u16 firstAdr; //第一地址
u16 secondAdr;//第二地址
u8 len; //长度
u8 Tpye; //类型
}framDataIndex;
void FM_Init(void);
u8 FMItemWrite(FramItem Type);
u8 FMItemRead(FramItem Type);
void FM_Data_Init(void);
#endif