Pārlūkot izejas kodu

1.消除编译告警;
2.整理代码,变更部分代码单独封装;
3.增加SPI SD卡接口;

libo 2 gadi atpakaļ
vecāks
revīzija
746882dcaf

+ 0 - 11
Inc/CollectMaster485.h

@@ -278,16 +278,6 @@ typedef union {
 }uni_LeiDaYewei;//雷达液位
 
 
-typedef struct
-{
-	uint8_t enable; // 对应存储区首地址字节内容为0x5A,表示使能开启
-	uint8_t step;  // 构建周期
-	uint8_t nstep; // 上报周期,是step的倍数
-	uint8_t cmd_num;  // 命令数据的总数
-	uint8_t cmd_arr[12] ;  // 挨个具体存放命令代号
-
-	uint8_t rx_buf[5]; // 通过41串口透传uart口接收头部内容的缓存区
-}Pass41SensorScanParam_TypeDef; 
 
 
 
@@ -362,7 +352,6 @@ extern uint8_t ValStateArr_0x20_Cang02[64],ValStateArr_PoFeng_0x20_Cang02[64];//
 extern uint8_t ValStateArr_0x20_Cang03[64],ValStateArr_PoFeng_0x20_Cang03[64];//破封时的阀门状态
 extern uint8_t ValStateArr_0x20_Cang04[64],ValStateArr_PoFeng_0x20_Cang04[64];//破封时的阀门状态
 
-extern Pass41SensorScanParam_TypeDef Pass41SensorScanParam;
 
 
 //uint8_t CheckInFrame_Collect485(void);

+ 1 - 1
Inc/DS1302.h

@@ -54,7 +54,7 @@ void Set_IO_OUT(void);
 void ds1302_writeV2(unsigned char time_tx);
 void ds1302_initV2(void);
 void DS1302_get_all(void);
-
+void ds1302_SynTime(SDateTime * datetime);
 
 #endif
 

+ 1 - 0
Inc/Dwin.h

@@ -67,6 +67,7 @@ void Go_homepage(void);
 void Restart_LCD(void);
 
 void WrDwinBuf_u8(uint16_t addr16,uint8_t *buf,uint8_t n);
+int Init_Dwin_Signal(void);
 #endif
 
 

+ 1 - 1
Inc/FreeRTOSConfig.h

@@ -103,7 +103,7 @@
 #define configTICK_RATE_HZ                       ((TickType_t)1000)
 #define configMAX_PRIORITIES                     ( 7 )
 #define configMINIMAL_STACK_SIZE                 ((uint16_t)256)
-#define configTOTAL_HEAP_SIZE                    ((size_t)16384+10240)
+#define configTOTAL_HEAP_SIZE                    ((size_t)16384+10*1024 +50*1024 )
 #define configMAX_TASK_NAME_LEN                  ( 16 )
 #define configUSE_16_BIT_TICKS                   0
 #define configUSE_MUTEXES                        1

+ 42 - 41
Inc/KeySlave485.h

@@ -5,10 +5,6 @@
 
 //必须配置三项参数:看门狗,液位计类型,油品类型。李伟修改  20210420
 
-//0----关闭看门狗SP706   1----打开看门狗SP706--------------必须配置的参数1/3
-#define WatchDogOn   						1   //是否打开看门狗 
-//#define WatchDogOn   							0   //是否打开看门狗 
-
 #define TIME_OF_Break_seal_cnt 		1  //30     连续破封判断次数
 
 
@@ -232,21 +228,21 @@
 
 
 //Fram中存储的所有参数
-#define 	ADDR_Extended_ContBoard	0x0000	//	0	95010001	扩展地址
-#define 	ADDR_Version_ContBoard	0x0004	//	4	STM32F746VGT6+2021v1.06	版本号
-#define 	ADDR_AutoSealed_Time	0x0024	//	36		自动施封时长
+#define 	ADDR_Extended_ContBoard		0x0000	//	0	95010001	扩展地址
+#define 	ADDR_Version_ContBoard		0x0004	//	4	STM32F746VGT6+2021v1.06	版本号
+#define 	ADDR_AutoSealed_Time			0x0024	//	36		自动施封时长
 #define 	ADDR_DataSource_LiquidoMeter	0x002C	//	44		液晶屏数据显示来源——液位参数
 #define 	ADDR_DataSource_ElecSeal	0x0030	//	48		液晶屏数据显示来源——铅封参数
-#define 	ADDR_V20_Point	0x0034	//	52		V20计算温度点的选择
-#define 	ADDR_CarPlate_Number	0x0044	//	68		车牌号
+#define 	ADDR_V20_Point						0x0034	//	52		V20计算温度点的选择
+#define 	ADDR_CarPlate_Number			0x0044	//	68		车牌号
 #define 	ADDR_Zero_Of_LiquidMeter	0x0064	//	100	兼容8仓	液位计零点
 #define 	ADDR_Zero_Of_TankCapacity	0x0084	//	132		罐容Vt零点
-#define 	ADDR_ManHoLe_Number	0x00A4	//	164		人孔盖卸油阀数量
-#define 	ADDR_OiLType_Data	0x00E4	//	228		油品参数   膨胀系数 0.0008  0.0012
-#define 	ADDR_Sensor_Scan_Param	0x00F4	//	xy, 以此首地址的16字节区域,存放类F3协议终端功能的传感器轮询参数配置
-#define 	ADDR_Zero_Of_TempSensor	0x0104	//	260		温度偏移参数
-#define 	ADDR_TankShape_01	0x0124	//	292	1—4仓	罐车参数1
-#define 	ADDR_TankShape_02	0x0164	//	356	5—8仓	罐车参数2
+#define 	ADDR_ManHoLe_Number				0x00A4	//	164		人孔盖卸油阀数量
+#define 	ADDR_OiLType_Data					0x00E4	//	228		油品参数   膨胀系数 0.0008  0.0012
+#define 	ADDR_Sensor_Scan_Param		0x00F4	//	xy, 以此首地址的16字节区域,存放类F3协议终端功能的传感器轮询参数配置
+#define 	ADDR_Zero_Of_TempSensor		0x0104	//	260		温度偏移参数
+#define 	ADDR_TankShape_01					0x0124	//	292	1—4仓	罐车参数1
+#define 	ADDR_TankShape_02					0x0164	//	356	5—8仓	罐车参数2
 #define 	ADDR_SampIntervaL_Collector	0x01A4	//	420	单位为毫秒。取值范围为	同采集板的采样间隔
 #define 	ADDR_CommuIntervaL_ScreenDwin	0x01B4	//	436		同迪文屏的通信间隔
 #define 	ADDR_SleepTime_ScreenDwin	0x01C4	//	452		屏幕休眠时间
@@ -293,31 +289,36 @@
 #define 	ADDR_Cabinet06_ContBoard	0x0530	//	1328		仓6
 #define 	ADDR_Cabinet07_ContBoard	0x0550	//	1360		仓7
 #define 	ADDR_Cabinet08_ContBoard	0x0570	//	1392		仓8
-#define 	ADDR_AuthorizeCode	0x0590	//	1424	8仓,每仓4字节	授权解封密码
-#define 	ADDR_Is_In_ElecFence	0x05D0	//	1488		车是否在电子围栏内
-#define 	ADDR_TankCapacity_Table	0x05D4	//	1492	200cm高度,200个u16数据	罐容表标定
-#define 	ADDR_Auto_sealedOK_ID	0x0764	//	1892		原控制板兼容地址
-#define 	ADDR_Break_sealing_Id	0x0768	//	1896		原控制板兼容地址
-#define 	ADDR_Config_fun_id	0x076C	//	1900		原控制板兼容地址
-#define 	ADDR_Auto_Seal_Time	0x0770	//	1904		原控制板兼容地址
-#define 	ADDR_Baseval_ID	0x0774	//	1908		原控制板兼容地址
-#define 	ADDR_StoreNumber	0x0778	//	1912		原控制板兼容地址
-#define 	ADDR_ManHole_Big_info	0x077C	//	1916		原控制板兼容地址
-#define 	ADDR_ManHole_small_info	0x0780	//	1920		原控制板兼容地址
-#define 	ADDR_Dump_info	0x0784	//	1924		原控制板兼容地址
-#define 	ADDR_Foot_info	0x0788	//	1928		原控制板兼容地址
-#define 	ADDR_DebugControll	0x078C	//	1932		调试信息控制
-#define 	ADDR_TotalRunTime	0x0794		//1940累计运行时间计数器
-#define 	ADDR_State_ElecSeal_FSM	0x0798	//	1944		基于状态机的电子铅封状态
-#define 	ADDR_SW_Voice_Printer	0x07A0	//	1952		是否开启打印机,语音播报-----每个bit表示一个外设;4个字节,最多支持32个外接设备
-
-#define 	ADDR_Enable_BlankSeal	0x07A4     //	1956		是否允许空仓施封
-
-#define 	ADDR_Enable_DispSysInfo	0x07A8	//	1960		是否允许显示系统信息等
-
-
+#define 	ADDR_AuthorizeCode				0x0590	//	1424		8仓,每仓4字节	授权解封密码
+#define 	ADDR_Is_In_ElecFence			0x05D0	//	1488		车是否在电子围栏内
+#define 	ADDR_TankCapacity_Table		0x05D4	//	1492		200cm高度,200个u16数据	罐容表标定
+#define 	ADDR_Auto_sealedOK_ID			0x0764	//	1892		原控制板兼容地址
+#define 	ADDR_Break_sealing_Id			0x0768	//	1896		原控制板兼容地址
+#define 	ADDR_Config_fun_id				0x076C	//	1900		原控制板兼容地址
+#define 	ADDR_Auto_Seal_Time				0x0770	//	1904		原控制板兼容地址
+#define 	ADDR_Baseval_ID						0x0774	//	1908		原控制板兼容地址
+#define 	ADDR_StoreNumber					0x0778	//	1912		原控制板兼容地址
+#define 	ADDR_ManHole_Big_info			0x077C	//	1916		原控制板兼容地址
+#define 	ADDR_ManHole_small_info		0x0780	//	1920		原控制板兼容地址
+#define 	ADDR_Dump_info						0x0784	//	1924		原控制板兼容地址
+#define 	ADDR_Foot_info						0x0788	//	1928		原控制板兼容地址
+#define 	ADDR_DebugControll				0x078C	//	1932		调试信息控制
+#define 	ADDR_TotalRunTime					0x0794	//	1940		累计运行时间计数器
+#define 	ADDR_State_ElecSeal_FSM		0x0798	//	1944		基于状态机的电子铅封状态
+#define 	ADDR_SW_Voice_Printer			0x07A0	//	1952		是否开启打印机,语音播报-----每个bit表示一个外设;4个字节,最多支持32个外接设备
+
+#define 	ADDR_Enable_BlankSeal			0x07A4  //	1956		是否允许空仓施封
+
+#define 	ADDR_Enable_DispSysInfo		0x07A8	//	1960		是否允许显示系统信息等
+
+#define 	ADDR_Sensor_Scan_FRAM			0x07f4	//	2036		是否允许显示系统信息等
+
+#define 	ADDR_TIME_record					0x0900	//	2304		存储上电时间信息
+//add boly 20221021
+#define 	ADDR_JT808_DataBack				0x0941	//	2369 	控制板	平台确定808-串口透传的传感器数据上报
+//end boly
 //以下参数不用保存在FRAM中,地址跟实际的存储地址无关联,仅用于功能跳转   --开启液位传感器,压力传感器,断电保存,两边有油算法,允许重复施封,液晶类型,保留字,自动施封
-#define 	ADDR_Enable_ReSeal	0x4000	//	16384		是否允许显示系统信息等
+#define 	ADDR_Enable_ReSeal				0x4000	//	16384		是否允许显示系统信息等
 
 
 //////最高地址不大于0x07ff=2047
@@ -570,8 +571,8 @@ typedef struct //
   uint8_t All_number ;//所有的仓数
   uint8_t ManHole_Big_info; //人孔盖信息
   uint8_t ManHole_small_info; //人孔小盖信息
-	uint8_t Dump_info; //卸油阀信息
-	uint8_t HaiDiFa_info; //海底阀信息
+	uint8_t Dump_info; 					//卸油阀信息
+	uint8_t HaiDiFa_info; 			//海底阀信息
 	uint16_t Auto_Seal_Time;
  }Config_INFO_TypeDef;	
 

+ 3 - 0
Inc/TerminalSlave485.h

@@ -465,4 +465,7 @@ int 	Process_CMD_0x38_AutoSeal_By_ElecFence(void);//
 int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode);//Ô¶³Ì±ê¶¨
 void FormatEachStoreData(uint8_t storeNum);
 void FormatWholeCarData(void);
+
+void JumpToAPP2(void);
+void Reboot_System(void);
 #endif

+ 12 - 10
Inc/main.h

@@ -58,14 +58,21 @@ extern "C" {
 #endif
 
 /* Includes ------------------------------------------------------------------*/
+#include <string.h>
+#include <stdbool.h>
+#include <stdlib.h>
 #include "stm32f7xx_hal.h"
 
-#ifndef IR_ROM1
-#define IR_ROM1 0x8000000  //APP1
-//#define IR_ROM1 	0x8080000 //APP2
-#endif
+#define REMOTE_IAP_UPDATA 		1 	//是否是远程升级
+#define WATCH_DOG_ON 					1   //是否打开看门狗 //0----关闭看门狗SP706   1----打开看门狗SP706
 
+#if REMOTE_IAP_UPDATA>0
+#define IR_ROM1 	0x8080000 //APP2
+#else
+#define IR_ROM1 	0x8000000  //APP1
+#endif
 
+#define USE_FATFS_RECORD 			0  //FATFS文件补传功能
 
 extern uint32_t sd000,sd001;//浮点数转换为实时显示的参数,4字节
 extern uint16_t uart4RxCounter; //串口4接收数据计数器
@@ -166,17 +173,12 @@ void Error_Handler(void);
 
 
 
-
-
-
-
-
 /* USER CODE BEGIN Private defines */
 
 
 extern uint8_t StoreNumber,all_Store;
 
-
+void MX_FREERTOS_Init(void);
 
 /* USER CODE END Private defines */
 

+ 1 - 1
Inc/stm32f7xx_hal_conf.h

@@ -72,7 +72,7 @@
 /* #define HAL_RNG_MODULE_ENABLED   */
 /* #define HAL_RTC_MODULE_ENABLED   */
 /* #define HAL_SAI_MODULE_ENABLED   */
-/* #define HAL_SD_MODULE_ENABLED   */
+#define HAL_SD_MODULE_ENABLED  
 /* #define HAL_MMC_MODULE_ENABLED   */
 /* #define HAL_SPDIFRX_MODULE_ENABLED   */
 #define HAL_SPI_MODULE_ENABLED

+ 6 - 2
MDK-ARM/JLinkSettings.ini

@@ -15,6 +15,8 @@ OverrideMemMap = 0
 AllowSimulation = 1
 ScriptFile=""
 [FLASH]
+Loaders=""
+EraseType = 0x00
 CacheExcludeSize = 0x00
 CacheExcludeAddr = 0x00
 MinNumBytesFlashDL = 0
@@ -25,8 +27,8 @@ EnableFlashDL = 2
 Override = 0
 Device="ARM7"
 [GENERAL]
-WorkRAMSize = 0x00
-WorkRAMAddr = 0x00
+WorkRAMSize = 0x2C000
+WorkRAMAddr = 0x20020000
 RAMUsageLimit = 0x00
 [SWO]
 SWOLogFile=""
@@ -37,3 +39,5 @@ RdOverrideAddr = 0xFFFFFFFF
 WrOverrideOrMask = 0x00
 WrOverrideAndMask = 0xFFFFFFFF
 WrOverrideAddr = 0xFFFFFFFF
+[RAM]
+VerifyDownload = 0x00

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 435 - 354
MDK-ARM/TestF7.uvguix.Administrator


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 667 - 167
MDK-ARM/TestF7.uvoptx


+ 277 - 38
MDK-ARM/TestF7.uvprojx

@@ -10,15 +10,14 @@
       <TargetName>TestF7</TargetName>
       <ToolsetNumber>0x4</ToolsetNumber>
       <ToolsetName>ARM-ADS</ToolsetName>
-      <pArmCC>5060960::V5.06 update 7 (build 960)::.\ARMCC</pArmCC>
       <pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed>
       <uAC6>0</uAC6>
       <TargetOption>
         <TargetCommonOption>
           <Device>STM32F746VGTx</Device>
           <Vendor>STMicroelectronics</Vendor>
-          <PackID>Keil.STM32F7xx_DFP.2.8.0</PackID>
-          <PackURL>http://www.keil.com/pack</PackURL>
+          <PackID>Keil.STM32F7xx_DFP.2.15.0</PackID>
+          <PackURL>https://www.keil.com/pack/</PackURL>
           <Cpu>IRAM(0x20000000-0x2004FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(12000000) FPU3(SFPU) CPUTYPE("Cortex-M7") ELITTLE</Cpu>
           <FlashUtilSpec></FlashUtilSpec>
           <StartupFile></StartupFile>
@@ -50,7 +49,7 @@
             <InvalidFlash>1</InvalidFlash>
           </TargetStatus>
           <OutputDirectory>TestF7\</OutputDirectory>
-          <OutputName>dzqf-kzb09a0_ZhongLan20211112</OutputName>
+          <OutputName>kzb09a0_v20201</OutputName>
           <CreateExecutable>1</CreateExecutable>
           <CreateLib>0</CreateLib>
           <CreateHexFile>1</CreateHexFile>
@@ -276,7 +275,7 @@
               </OCR_RVCT3>
               <OCR_RVCT4>
                 <Type>1</Type>
-                <StartAddress>0x8000000</StartAddress>
+                <StartAddress>0x8080000</StartAddress>
                 <Size>0x20000</Size>
               </OCR_RVCT4>
               <OCR_RVCT5>
@@ -314,7 +313,7 @@
           </ArmAdsMisc>
           <Cads>
             <interw>1</interw>
-            <Optim>4</Optim>
+            <Optim>1</Optim>
             <oTime>0</oTime>
             <SplitLS>0</SplitLS>
             <OneElfS>1</OneElfS>
@@ -340,7 +339,7 @@
               <MiscControls>--C99</MiscControls>
               <Define>USE_HAL_DRIVER,STM32F746xx</Define>
               <Undefine></Undefine>
-              <IncludePath>../Inc;            ../Drivers/STM32F7xx_HAL_Driver/Inc;            ../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy;            ../Drivers/CMSIS/Device/ST/STM32F7xx/Include;            ../Drivers/CMSIS/Include;           ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM7/r0p1;           ../Middlewares/Third_Party/FreeRTOS/Source/include;           ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS</IncludePath>
+              <IncludePath>../Inc;../Drivers/STM32F7xx_HAL_Driver/Inc;../Drivers/STM32F7xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F7xx/Include;../Drivers/CMSIS/Include;../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM7/r0p1;../Middlewares/Third_Party/FreeRTOS/Source/include;../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS;../Middlewares/Third_Party/FatFs/src;..\func;..\obj;..\sys;..\mid_fatfs;..\dev;..\lib</IncludePath>
             </VariousControls>
           </Cads>
           <Aads>
@@ -384,11 +383,6 @@
         <Group>
           <GroupName>Application/User</GroupName>
           <Files>
-            <File>
-              <FileName>TerminalSlave485.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>..\Src\TerminalSlave485.c</FilePath>
-            </File>
             <File>
               <FileName>KeySlave485.c</FileName>
               <FileType>1</FileType>
@@ -420,74 +414,99 @@
               <FilePath>..\Src\Elec_Seal.c</FilePath>
             </File>
             <File>
-              <FileName>Randomcode.c</FileName>
+              <FileName>main.c</FileName>
               <FileType>1</FileType>
-              <FilePath>..\Src\Randomcode.c</FilePath>
+              <FilePath>../Src/main.c</FilePath>
             </File>
             <File>
-              <FileName>DS1302.c</FileName>
+              <FileName>freertos.c</FileName>
               <FileType>1</FileType>
-              <FilePath>..\Src\DS1302.c</FilePath>
+              <FilePath>../Src/freertos.c</FilePath>
             </File>
             <File>
-              <FileName>main.c</FileName>
+              <FileName>DS1302Drv.c</FileName>
               <FileType>1</FileType>
-              <FilePath>../Src/main.c</FilePath>
+              <FilePath>..\Src\DS1302Drv.c</FilePath>
             </File>
             <File>
-              <FileName>gpio.c</FileName>
+              <FileName>TerminalSlave485.c</FileName>
               <FileType>1</FileType>
-              <FilePath>../Src/gpio.c</FilePath>
+              <FilePath>..\Src\TerminalSlave485.c</FilePath>
             </File>
             <File>
-              <FileName>dma.c</FileName>
+              <FileName>TerminalSlave485_jt808.c</FileName>
               <FileType>1</FileType>
-              <FilePath>../Src/dma.c</FilePath>
+              <FilePath>..\Src\TerminalSlave485_jt808.c</FilePath>
             </File>
             <File>
-              <FileName>freertos.c</FileName>
+              <FileName>TerminalSlave485_jt808.h</FileName>
+              <FileType>5</FileType>
+              <FilePath>..\Src\TerminalSlave485_jt808.h</FilePath>
+            </File>
+          </Files>
+        </Group>
+        <Group>
+          <GroupName>Application/sys</GroupName>
+          <Files>
+            <File>
+              <FileName>Randomcode.c</FileName>
               <FileType>1</FileType>
-              <FilePath>../Src/freertos.c</FilePath>
+              <FilePath>..\Src\Randomcode.c</FilePath>
             </File>
             <File>
-              <FileName>spi.c</FileName>
+              <FileName>md5c.c</FileName>
               <FileType>1</FileType>
-              <FilePath>../Src/spi.c</FilePath>
+              <FilePath>..\Src\md5c.c</FilePath>
             </File>
             <File>
-              <FileName>tim.c</FileName>
+              <FileName>stm32f7xx_hal_timebase_tim.c</FileName>
               <FileType>1</FileType>
-              <FilePath>../Src/tim.c</FilePath>
+              <FilePath>../Src/stm32f7xx_hal_timebase_tim.c</FilePath>
             </File>
             <File>
-              <FileName>usart.c</FileName>
+              <FileName>stm32f7xx_hal_msp.c</FileName>
               <FileType>1</FileType>
-              <FilePath>../Src/usart.c</FilePath>
+              <FilePath>../Src/stm32f7xx_hal_msp.c</FilePath>
             </File>
             <File>
               <FileName>stm32f7xx_it.c</FileName>
               <FileType>1</FileType>
               <FilePath>../Src/stm32f7xx_it.c</FilePath>
             </File>
+          </Files>
+        </Group>
+        <Group>
+          <GroupName>Application/bsp</GroupName>
+          <Files>
             <File>
-              <FileName>stm32f7xx_hal_msp.c</FileName>
+              <FileName>dma.c</FileName>
               <FileType>1</FileType>
-              <FilePath>../Src/stm32f7xx_hal_msp.c</FilePath>
+              <FilePath>../Src/dma.c</FilePath>
             </File>
             <File>
-              <FileName>stm32f7xx_hal_timebase_tim.c</FileName>
+              <FileName>DS1302.c</FileName>
               <FileType>1</FileType>
-              <FilePath>../Src/stm32f7xx_hal_timebase_tim.c</FilePath>
+              <FilePath>..\Src\DS1302.c</FilePath>
             </File>
             <File>
-              <FileName>DS1302Drv.c</FileName>
+              <FileName>gpio.c</FileName>
               <FileType>1</FileType>
-              <FilePath>..\Src\DS1302Drv.c</FilePath>
+              <FilePath>../Src/gpio.c</FilePath>
             </File>
             <File>
-              <FileName>md5c.c</FileName>
+              <FileName>usart.c</FileName>
               <FileType>1</FileType>
-              <FilePath>..\Src\md5c.c</FilePath>
+              <FilePath>../Src/usart.c</FilePath>
+            </File>
+            <File>
+              <FileName>spi.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Src/spi.c</FilePath>
+            </File>
+            <File>
+              <FileName>tim.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>../Src/tim.c</FilePath>
             </File>
           </Files>
         </Group>
@@ -584,6 +603,16 @@
               <FileType>1</FileType>
               <FilePath>../Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c</FilePath>
             </File>
+            <File>
+              <FileName>stm32f7xx_hal_sd.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sd.c</FilePath>
+            </File>
+            <File>
+              <FileName>stm32f7xx_ll_sdmmc.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_sdmmc.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>
@@ -646,6 +675,51 @@
             </File>
           </Files>
         </Group>
+        <Group>
+          <GroupName>Middlewares/FatFs</GroupName>
+          <Files>
+            <File>
+              <FileName>diskio.h</FileName>
+              <FileType>5</FileType>
+              <FilePath>..\Middlewares\Third_Party\FatFs\src\diskio.h</FilePath>
+            </File>
+            <File>
+              <FileName>ff.h</FileName>
+              <FileType>5</FileType>
+              <FilePath>..\Middlewares\Third_Party\FatFs\src\ff.h</FilePath>
+            </File>
+            <File>
+              <FileName>diskio.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Middlewares\Third_Party\FatFs\src\diskio.c</FilePath>
+            </File>
+            <File>
+              <FileName>ff.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Middlewares\Third_Party\FatFs\src\ff.c</FilePath>
+            </File>
+            <File>
+              <FileName>ff_gen_drv.h</FileName>
+              <FileType>5</FileType>
+              <FilePath>..\Middlewares\Third_Party\FatFs\src\ff_gen_drv.h</FilePath>
+            </File>
+            <File>
+              <FileName>integer.h</FileName>
+              <FileType>5</FileType>
+              <FilePath>..\Middlewares\Third_Party\FatFs\src\integer.h</FilePath>
+            </File>
+            <File>
+              <FileName>ff_gen_drv.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Middlewares\Third_Party\FatFs\src\ff_gen_drv.c</FilePath>
+            </File>
+            <File>
+              <FileName>syscall.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Middlewares\Third_Party\FatFs\src\option\syscall.c</FilePath>
+            </File>
+          </Files>
+        </Group>
         <Group>
           <GroupName>Drivers/CMSIS</GroupName>
           <Files>
@@ -666,6 +740,171 @@
             </File>
           </Files>
         </Group>
+        <Group>
+          <GroupName>dev</GroupName>
+          <Files>
+            <File>
+              <FileName>dev_spi_sdcard.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\dev\dev_spi_sdcard.c</FilePath>
+            </File>
+            <File>
+              <FileName>dev_spi_sdcard.h</FileName>
+              <FileType>5</FileType>
+              <FilePath>..\dev\dev_spi_sdcard.h</FilePath>
+            </File>
+          </Files>
+        </Group>
+        <Group>
+          <GroupName>obj</GroupName>
+          <Files>
+            <File>
+              <FileName>obj_sdmmc_sdcard.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\obj\obj_sdmmc_sdcard.c</FilePath>
+            </File>
+            <File>
+              <FileName>obj_sdmmc_sdcard.h</FileName>
+              <FileType>5</FileType>
+              <FilePath>..\obj\obj_sdmmc_sdcard.h</FilePath>
+            </File>
+            <File>
+              <FileName>obj_spi_sd_stm32.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\obj\obj_spi_sd_stm32.c</FilePath>
+            </File>
+            <File>
+              <FileName>obj_spi_sd_stm32.h</FileName>
+              <FileType>5</FileType>
+              <FilePath>..\obj\obj_spi_sd_stm32.h</FilePath>
+            </File>
+          </Files>
+        </Group>
+        <Group>
+          <GroupName>func</GroupName>
+          <Files>
+            <File>
+              <FileName>func_fatfs.h</FileName>
+              <FileType>5</FileType>
+              <FilePath>..\func\func_fatfs.h</FilePath>
+            </File>
+            <File>
+              <FileName>func_fatfs.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\func\func_fatfs.c</FilePath>
+            </File>
+            <File>
+              <FileName>func_record.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\func\func_record.c</FilePath>
+            </File>
+            <File>
+              <FileName>func_record.h</FileName>
+              <FileType>5</FileType>
+              <FilePath>..\func\func_record.h</FilePath>
+            </File>
+            <File>
+              <FileName>func_ram_record.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\func\func_ram_record.c</FilePath>
+            </File>
+            <File>
+              <FileName>func_ram_record.h</FileName>
+              <FileType>5</FileType>
+              <FilePath>..\func\func_ram_record.h</FilePath>
+            </File>
+          </Files>
+        </Group>
+        <Group>
+          <GroupName>sys</GroupName>
+          <Files>
+            <File>
+              <FileName>sys_type.h</FileName>
+              <FileType>5</FileType>
+              <FilePath>..\sys\sys_type.h</FilePath>
+            </File>
+            <File>
+              <FileName>sys_malloc.h</FileName>
+              <FileType>5</FileType>
+              <FilePath>..\sys\sys_malloc.h</FilePath>
+            </File>
+            <File>
+              <FileName>sys_malloc.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\sys\sys_malloc.c</FilePath>
+            </File>
+            <File>
+              <FileName>sys_api.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\sys\sys_api.c</FilePath>
+            </File>
+            <File>
+              <FileName>sys_api.h</FileName>
+              <FileType>5</FileType>
+              <FilePath>..\sys\sys_api.h</FilePath>
+            </File>
+            <File>
+              <FileName>sys_delay.h</FileName>
+              <FileType>5</FileType>
+              <FilePath>..\sys\sys_delay.h</FilePath>
+            </File>
+            <File>
+              <FileName>sys_delay.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\sys\sys_delay.c</FilePath>
+            </File>
+          </Files>
+        </Group>
+        <Group>
+          <GroupName>mid/fatfs</GroupName>
+          <Files>
+            <File>
+              <FileName>fatfs.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\mid_fatfs\fatfs.c</FilePath>
+            </File>
+            <File>
+              <FileName>fatfs.h</FileName>
+              <FileType>5</FileType>
+              <FilePath>..\mid_fatfs\fatfs.h</FilePath>
+            </File>
+            <File>
+              <FileName>user_diskio.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\mid_fatfs\user_diskio.c</FilePath>
+            </File>
+            <File>
+              <FileName>user_diskio.h</FileName>
+              <FileType>5</FileType>
+              <FilePath>..\mid_fatfs\user_diskio.h</FilePath>
+            </File>
+            <File>
+              <FileName>ffconf.h</FileName>
+              <FileType>5</FileType>
+              <FilePath>..\mid_fatfs\ffconf.h</FilePath>
+            </File>
+          </Files>
+        </Group>
+        <Group>
+          <GroupName>lib</GroupName>
+          <Files>
+            <File>
+              <FileName>lib_buffer.h</FileName>
+              <FileType>5</FileType>
+              <FilePath>..\lib\lib_buffer.h</FilePath>
+            </File>
+            <File>
+              <FileName>lib_buffer.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\lib\lib_buffer.c</FilePath>
+            </File>
+            <File>
+              <FileName>lib_buffer_test.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\lib\lib_buffer_test.c</FilePath>
+            </File>
+          </Files>
+        </Group>
         <Group>
           <GroupName>::CMSIS</GroupName>
         </Group>

+ 5 - 5
Src/CollectMaster485.c

@@ -134,8 +134,7 @@ uni_TempToPlatForm uni_TempToPlatForm001,uni_TempToPlatForm002;
 //李伟修改    队尾的3个数据依次为最大值,最小值,峰峰值
 float ArrYeweiForWenyou[NumOf_WenYouPanduan+3];//存储300s的液位数据    打印的时候作为是否稳油判断依据
 float Yewei_max000,Yewei_min000,Yewei_peak000;
-
-Pass41SensorScanParam_TypeDef Pass41SensorScanParam; 
+ 
 	 
 void TestUsart2_Receive(void)
 {
@@ -489,6 +488,7 @@ uint16_t CheckInFrame_Collect485(uint16_t LenRx,uint16_t MsgID)
 			switch(TempData)
 			{////////switch(TempData)--开始
 				case 0xA1://Read All Valve State 阀门状态   底阀监测器   卸油阀
+				{	
 					//CRC_data=CRC16_MODBUS(USART2_RX_BUF, 17+ 4);//dataLengthIn
 					//__nop();
 				
@@ -539,9 +539,9 @@ uint16_t CheckInFrame_Collect485(uint16_t LenRx,uint16_t MsgID)
 					//	__nop();
 						
 					}
-					break;
+				}break;
 				case 0xA2://Read Needed Sensor Value
-					switch(USART2_RX_BUF[4])
+				{	switch(USART2_RX_BUF[4])
 					{
 						case 1://Press expressed volume   体积  容积    
 							//if(CRC_data==((USART2_RX_BUF[dataLengthIn+4]<<8)+USART2_RX_BUF[dataLengthIn+5]))
@@ -817,7 +817,7 @@ uint16_t CheckInFrame_Collect485(uint16_t LenRx,uint16_t MsgID)
 						default:
 							break;
 					}
-					break;
+				}	break;
 				case 0xA3://Write StoreNum
 					Collect485.Write_StorNum=USART2_RX_BUF[4];
 					break;

+ 2 - 1
Src/KeySlave485.c

@@ -2,6 +2,7 @@
 #include "CollectMaster485.h"
 #include "TerminalSlave485.h"
 #include "usart.h"
+#include "cmsis_os.h"
 #include "spi.h"
 #include "Elec_Seal.h"
 #include "Dwin.h"
@@ -37,7 +38,7 @@ uint8_t product_code[20] = "JL-SIMS-CJ-V2.1";				 //
 uint8_t product_ID[20] = "20210730001";						 //产品ID
 
 char Version_software[30] = "KZB09A0_20220210_Temp1";
-uint32_t Version_Soft[8] = {2,2,3,13,1,1,0,20220829};
+uint32_t Version_Soft[8] = {2,2,3,13,1,1,0,20221025};
 
 uint8_t flag_exitReset = 0;	 //终止复位命令
 uint8_t flag_Uart4_Busy = 0; //表明打印机占用了总线,暂停语音播报

+ 3 - 3
Src/LTF_sa/leaf_ota.c

@@ -5,7 +5,6 @@
 #include "TerminalSlave485.h"
 #include "md5c.h"
 #include "main.h"
-
 /**
   * @brief  根据输入的地址给出它所在的sector
   *					例如:
@@ -325,7 +324,7 @@ void MoveCode(unsigned int src_addr, unsigned int des_addr, unsigned int byte_si
 *	返 回 值: 无
 *********************************************************************************************************
 */
-static void JumpToBootloader(void)
+void JumpToBootloader(void)
 {
 	uint32_t i=0;
 	GPIO_InitTypeDef GPIO_InitStruct = {0};
@@ -462,7 +461,8 @@ void Start_BootLoader(void)
 					all_len |= *(unsigned char *)(StartMode_Addr + 68 + i);
 				}
 				if(App2_MD5_Check(Application_2_Addr,all_len))
-					JumpToAPP2();//*/
+					JumpToAPP2();//
+				*/
 			}
 		//	break;
 		}

+ 3 - 3
Src/LTF_sa/leaf_ota.h

@@ -12,8 +12,8 @@
 #define Appear_si 128
 
 /*=====用户配置(根据自己的分区进行配置)=====*/
-#define BootLoader_Size 		0xA000			///< BootLoader的大小 40K
-#define Appear_Size 		0x6000			///< BootLoader的大小 40K
+#define BootLoader_Size 		0x0A000			///< BootLoader的大小 40K
+#define Appear_Size 				0x06000			///< BootLoader的大小 40K
 #define Application_Size		0x20000			///< 应用程序的大小 128K
 
 //#define Application_1_Addr		0x08010000		///< 应用程序1的首地址
@@ -47,7 +47,7 @@
 #define ADDR_FLASH_SECTOR_6     ((uint32_t)0x08080000) /* Base address of Sector 6, 256 Kbytes */
 #define ADDR_FLASH_SECTOR_7     ((uint32_t)0x080C0000) /* Base address of Sector 7, 256 Kbytes */
 
-
+void JumpToBootloader(void);
 void Start_BootLoader(void);
 uint8_t Erase_page(uint32_t pageaddr, uint32_t num);
 void WriteFlash2(uint32_t addr, uint32_t *buff, int word_size);

+ 4 - 1
Src/ScreenMaster485.c

@@ -1,6 +1,9 @@
+
 #include "ScreenMaster485.h"
 #include "usart.h"			
 #include "Dwin.h"
+#include "cmsis_os.h"
+
 ////////////////////////////////////////////////////////////////////////////////// 	
 
 void TestUsart3_Receive(void)
@@ -21,7 +24,7 @@ uint8_t screen_buf[512];
 volatile uint8_t screen_delay=0;
 void ScreenMaster485_Send_Data(uint8_t *buf,uint8_t len)
 {
-	int retry;
+//	int retry;
 	
 	do
 	{

+ 108 - 338
Src/TerminalSlave485.c

@@ -1,4 +1,5 @@
 #include "TerminalSlave485.h"
+#include "TerminalSlave485_jt808.h"
 #include "CollectMaster485.h"
 #include "ScreenMaster485.h"
 #include "KeySlave485.h"
@@ -13,6 +14,7 @@
 #include "DS1302.h"
 #include "leaf_ota.h"
 #include "md5c.h"
+#include "cmsis_os.h"
 
 /* zhuzl 20211220 增加为了内蒙定时上送*/
 uint32_t circle_send;
@@ -494,10 +496,13 @@ uint32_t Read_update_sum =0;
 //Data_frame data_frame,Tx_data_frame;
 Data_frame_TypeDef data_frame,Tx_data_frame;
 
+int32_t WholeCarData(uint8_t *buf);
+int32_t StoreData(uint8_t *buf,int storeNo);
+
 void Reboot_System()
 {
 	 __set_FAULTMASK(1);
-#if (WatchDogOn)
+#if (WATCH_DOG_ON)
 	  while (1)
 	  {
 		  __nop();
@@ -512,6 +517,9 @@ int Flash_MD5_Check(uint32_t addr,uint32_t len)
 	unsigned char *md5_ptr=(unsigned char *)(StartMode_Addr+72);
 	unsigned int i,update_len;
 	MD5_CTX md5c;
+	
+	UNUSED(md5_ptr);
+	
 	MD5Init(&md5c);
 	for(i=0;i<len;)
 	{
@@ -717,14 +725,14 @@ uint8_t ERR_Arr[8]="error";
 uint8_t upgrade_type=0;
 
 extern void Set_Update_Down(void);
-int AsciitoHexF3(char *buf,int len)
+int AsciitoHexF3(uint8_t *buf,int len)
 {
 	int i;
 	uint8_t Lrc_temp;
 	FileBuffArray[0]=':';
 	for(i=0;i<len;++i)
 	{
-		sprintf(FileBuffArray+1+2*i,"%02X",buf[i]);
+		sprintf((char *)FileBuffArray+1+2*i,"%02X",buf[i]);
 	}
 	Lrc_temp = MODBUS_ASCII_GetLrc(FileBuffArray + 1, len * 2);
 	sprintf((char *)(&FileBuffArray[1 + len * 2]), "%02X", Lrc_temp);
@@ -795,7 +803,7 @@ int Process_CMD_IAP_Update(void)
 
 				if(crcIAP==crcTerminal)
 				{
-					if(strstr(USART1_RX_BUF+9,"kzb")==NULL)
+					if(strstr((char *)USART1_RX_BUF+9,"kzb")==NULL)
 					{
 						upgrade_type=2;
 						return upgrade_type;
@@ -820,11 +828,11 @@ int Process_CMD_IAP_Update(void)
 					}
 					HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_2);//看门狗sp706
 					
-					txLen = sprintf(USART1_TX_BUF,"file=%d\r\n",packIndexbak);
+					txLen = sprintf((char *)USART1_TX_BUF,"file=%d\r\n",packIndexbak);
 				}
 				else
 				{
-					sprintf(USART1_TX_BUF,"%s",ERR_Arr);
+					sprintf((char *)USART1_TX_BUF,"%s",ERR_Arr);
 				}
 			}
 				
@@ -861,19 +869,19 @@ int Process_CMD_IAP_Update(void)
 						if((packIndexbak+1)==packIndex)
 							AddrToWrite += lenRx1-15;
 						packIndexbak=packIndex;
-						txLen = sprintf(USART1_TX_BUF,"%s=%d\r\n",ACK_Arr,packIndex);
+						txLen = sprintf((char *)USART1_TX_BUF,"%s=%d\r\n",ACK_Arr,packIndex);
 					}
 					else
 					{
 						DataReadFlash=*((__IO uint32_t*)(StartMode_Addr));
-  						txLen = sprintf(USART1_TX_BUF,"%s=%d\r\n",ERR_Arr,packIndex);
+  						txLen = sprintf((char *)USART1_TX_BUF,"%s=%d\r\n",ERR_Arr,packIndex);
 						Erase_page(StartMode_Addr, 128);
 						WriteFlash2(StartMode_Addr,&DataReadFlash,1);
 					}
 				}
 				else
 				{
-					txLen = sprintf(USART1_TX_BUF,"Rx Error lenRx1=%d crcIAP=%04X crcTerminal=%04X\r\n",lenRx1,crcIAP,crcTerminal);
+					txLen = sprintf((char *)USART1_TX_BUF,"Rx Error lenRx1=%d crcIAP=%04X crcTerminal=%04X\r\n",lenRx1,crcIAP,crcTerminal);
 				}			
 		
   		break;
@@ -891,7 +899,7 @@ int Process_CMD_IAP_Update(void)
 					{
 						return upgrade_type;
 					}
-					txLen = sprintf(USART1_TX_BUF,"%s\r\n",ACK_Arr);
+					txLen = sprintf((char *)USART1_TX_BUF,"%s\r\n",ACK_Arr);
 					if(f3_flag)
 						txLen = AsciitoHexF3(USART1_TX_BUF, txLen);
 	  				TerminalSlave485_Send_Data(USART1_TX_BUF, txLen);
@@ -904,22 +912,22 @@ int Process_CMD_IAP_Update(void)
 					
 					if(Flash_MD5_Check(ADDR_FLASH_SECTOR_7,all_len)==0)
 					{
-						txLen = sprintf(USART1_TX_BUF,"md5 check=error\r\n");
+						txLen = sprintf((char *)USART1_TX_BUF,"md5 check=error\r\n");
 					}
 					else
 					{
 						if(strcmp(custurm_code,(const char*)Application_Buffer_Addr+5120))
 						{
-							txLen = sprintf(USART1_TX_BUF,"Product=error\r\n");
+							txLen = sprintf((char *)USART1_TX_BUF,"Product=error\r\n");
 						}	
 						else if((*(unsigned int*)(Application_Buffer_Addr+6144)!=Application_2_Addr) && (*(unsigned int*)(Application_Buffer_Addr+4)&0xffff0000 != Application_2_Addr))
 						{
-							txLen = sprintf(USART1_TX_BUF,"Link addr=error\r\n");
+							txLen = sprintf((char *)USART1_TX_BUF,"Link addr=error\r\n");
 						}
 						else
 						{
 							Set_Update_Down();//设定标志位  下次启动时进行程序拷贝
-							txLen = sprintf(USART1_TX_BUF,"md5 check=ok\r\n");
+							txLen = sprintf((char *)USART1_TX_BUF,"md5 check=ok\r\n");
 							should_reboot=1;
 						}
 					}
@@ -927,7 +935,7 @@ int Process_CMD_IAP_Update(void)
 				}
 				else
 				{
-					txLen = sprintf(USART1_TX_BUF,"%s\r\n",ERR_Arr);		
+					txLen = sprintf((char *)USART1_TX_BUF,"%s\r\n",ERR_Arr);		
 				}		
 			}
 			break;
@@ -968,11 +976,11 @@ void Send_A1_Cmd(unsigned char scrAddr, unsigned char funCode, unsigned char scr
 	int i,j;
 	unsigned char temp_i = 0x00;
 	USART1_TX_BUF[send_pos++]=':';
-	sprintf(USART1_TX_BUF+send_pos,"%02X",0xA1);
+	sprintf((char *)USART1_TX_BUF+send_pos,"%02X",0xA1);
 	send_pos+=2;
-	sprintf(USART1_TX_BUF+send_pos,"%02X",0x04);
+	sprintf((char *)USART1_TX_BUF+send_pos,"%02X",0x04);
 	send_pos+=2;
-	sprintf(USART1_TX_BUF+send_pos,"%02X",120);
+	sprintf((char *)USART1_TX_BUF+send_pos,"%02X",120);
 	send_pos+=2;
 	if(StoreNumber>0)
 	{
@@ -1020,63 +1028,63 @@ void Send_A1_Cmd(unsigned char scrAddr, unsigned char funCode, unsigned char scr
 		emergy=0x80;	
 	}
 	overflow_flag_bak=overflow_flag;
-	sprintf(USART1_TX_BUF+send_pos,"%02X",emergy);
+	sprintf((char *)USART1_TX_BUF+send_pos,"%02X",emergy);
 	send_pos+=2;
-	sprintf(USART1_TX_BUF+send_pos,"%02X",StoreNumber);
+	sprintf((char *)USART1_TX_BUF+send_pos,"%02X",StoreNumber);
 	send_pos+=2;
-	sprintf(USART1_TX_BUF+send_pos,"%02X",0x22);
+	sprintf((char *)USART1_TX_BUF+send_pos,"%02X",0x22);
 	send_pos+=2;
 	
-	sprintf(USART1_TX_BUF+send_pos,"%02X",overflow_flag);
+	sprintf((char *)USART1_TX_BUF+send_pos,"%02X",overflow_flag);
 	send_pos+=2;
 	if((Config_info_all.ManHole_Big_info>0) && (Config_info_all.ManHole_Big_info<8))
 	{
-		sprintf(USART1_TX_BUF+send_pos,"%02X",0x72);
+		sprintf((char *)USART1_TX_BUF+send_pos,"%02X",0x72);
 		send_pos+=2;
 		for (i = 0; i < StoreNumber; i++)
 		{
-			sprintf(USART1_TX_BUF+send_pos,"%02X",Config_info_all.ManHole_Big_info/StoreNumber);
+			sprintf((char *)USART1_TX_BUF+send_pos,"%02X",Config_info_all.ManHole_Big_info/StoreNumber);
 			send_pos+=2;
 			for(j=0;j<Config_info_all.ManHole_Big_info/StoreNumber;++j)
 			{
-				sprintf(USART1_TX_BUF+send_pos,"%02X",Cang_IO_tbak[i][indexDaGai01+10*j]);
+				sprintf((char *)USART1_TX_BUF+send_pos,"%02X",Cang_IO_tbak[i][indexDaGai01+10*j]);
 				send_pos+=2;
 			}
 		}
 	}
 	if((Config_info_all.Dump_info>0) && (Config_info_all.Dump_info<8))
 	{
-		sprintf(USART1_TX_BUF+send_pos,"%02X",0x71);
+		sprintf((char *)USART1_TX_BUF+send_pos,"%02X",0x71);
 		send_pos+=2;
 		for (i = 0; i < StoreNumber; i++)
 		{
-			sprintf(USART1_TX_BUF+send_pos,"%02X",Config_info_all.Dump_info/StoreNumber);
+			sprintf((char *)USART1_TX_BUF+send_pos,"%02X",Config_info_all.Dump_info/StoreNumber);
 			send_pos+=2;
 			for(j=0;j<Config_info_all.Dump_info/StoreNumber;++j)
 			{
-				sprintf(USART1_TX_BUF+send_pos,"%02X",Cang_IO_tbak[i][indexXieYouFa01+10*j]);
+				sprintf((char *)USART1_TX_BUF+send_pos,"%02X",Cang_IO_tbak[i][indexXieYouFa01+10*j]);
 				send_pos+=2;
 			}
 		}
 	}
 	if((Config_info_all.HaiDiFa_info>0) && (Config_info_all.HaiDiFa_info<8))
 	{
-		sprintf(USART1_TX_BUF+send_pos,"%02X",0x64);
+		sprintf((char *)USART1_TX_BUF+send_pos,"%02X",0x64);
 		send_pos+=2;
 		for (i = 0; i < StoreNumber; i++)
 		{
-			sprintf(USART1_TX_BUF+send_pos,"%02X",Config_info_all.HaiDiFa_info/StoreNumber);
+			sprintf((char *)USART1_TX_BUF+send_pos,"%02X",Config_info_all.HaiDiFa_info/StoreNumber);
 			send_pos+=2;
 			for(j=0;j<Config_info_all.HaiDiFa_info/StoreNumber;++j)
 			{
-				sprintf(USART1_TX_BUF+send_pos,"%02X",Cang_IO_tbak[i][indexHaiDiFa01+10*j]);
+				sprintf((char *)USART1_TX_BUF+send_pos,"%02X",Cang_IO_tbak[i][indexHaiDiFa01+10*j]);
 				send_pos+=2;
 			}
 		}
 	}
 	while (send_pos<(120*2+7))
 	{
-		sprintf(USART1_TX_BUF+send_pos,"%02X",0);
+		sprintf((char *)USART1_TX_BUF+send_pos,"%02X",0);
 		send_pos+=2;
 	}
 	//**********************************************
@@ -1086,7 +1094,7 @@ void Send_A1_Cmd(unsigned char scrAddr, unsigned char funCode, unsigned char scr
 		scrLength = 0x3C;
 	}
 	temp_i = scrLength<<1;
-	//sprintf(USART1_TX_BUF+5,"%02X",temp_i);
+	//sprintf((char *)USART1_TX_BUF+5,"%02X",temp_i);
 	USART1_TX_BUF[5] = (temp_i>>4) + '0';
 	if('9' < USART1_TX_BUF[5])
 	{
@@ -1101,7 +1109,7 @@ void Send_A1_Cmd(unsigned char scrAddr, unsigned char funCode, unsigned char scr
 	temp_i <<= 1;
 	
 	Lrc_temp = MODBUS_ASCII_GetLrc(USART1_TX_BUF+1, temp_i + 6);
-	sprintf(USART1_TX_BUF + temp_i + 7, "%02X", Lrc_temp);
+	sprintf((char *)USART1_TX_BUF + temp_i + 7, "%02X", Lrc_temp);
 	USART1_TX_BUF[temp_i + 9]  = 0x0D;
 	USART1_TX_BUF[temp_i + 10] = 0x0A;
 	TerminalSlave485_Send_Data(USART1_TX_BUF, temp_i + 11);
@@ -1109,7 +1117,7 @@ void Send_A1_Cmd(unsigned char scrAddr, unsigned char funCode, unsigned char scr
 	//***********************************************
 	/*
 	Lrc_temp = MODBUS_ASCII_GetLrc(USART1_TX_BUF+1,send_pos-1);
-	sprintf(USART1_TX_BUF+send_pos,"%02X",Lrc_temp);
+	sprintf((char *)USART1_TX_BUF+send_pos,"%02X",Lrc_temp);
 	send_pos += 2;
 	USART1_TX_BUF[send_pos++] =0x0D;
 	USART1_TX_BUF[send_pos++] = 0x0A;
@@ -1117,271 +1125,6 @@ void Send_A1_Cmd(unsigned char scrAddr, unsigned char funCode, unsigned char scr
 	*/
 }
 
-/**
- ***************************************
- * 构建A1命令数据 -- hex制式
- * 输入:
- *    pBuf-构建数据的存放首地址
- *    pEmergy,如果是数据有变动,表示紧急上报,将标记存于此地址
- *    flowID, 流水id值
- * 返回: 构建数据的字节总数
- ***************************************
- */
-int BuildA1Cmd(uint8_t *pBuf, uint32_t flowID, uint8_t *pEmergencyflag)
-{
-	int send_pos=0;
-	unsigned char emergencyflag=0;
-	unsigned char Lrc_temp;
-	unsigned char overflow_flag=0;
-	int i,j;
-	unsigned char temp_i = 0x00;
-	
-	pBuf[send_pos++] = 0xA1;
-	pBuf[send_pos++] = 120;
-	if(StoreNumber>0)
-	{
-		if(memcmp(Cang_IO_tbak[0],Cang01_IO,64))
-		{
-			emergencyflag=0x80;
-		}
-		memcpy(Cang_IO_tbak[0],Cang01_IO,64);
-	}
-	if(StoreNumber>1)
-	{
-		if(memcmp(Cang_IO_tbak[1],Cang02_IO,64))
-		{
-			emergencyflag=0x80;
-		}
-		memcpy(Cang_IO_tbak[1],Cang02_IO,64);
-	}
-	if(StoreNumber>2)
-	{
-		if(memcmp(Cang_IO_tbak[2],Cang03_IO,64))
-		{
-			emergencyflag=0x80;
-		}
-		memcpy(Cang_IO_tbak[2],Cang03_IO,64);
-	}
-	if(StoreNumber>3)
-	{
-		if(memcmp(Cang_IO_tbak[3],Cang04_IO,64))
-		{
-			emergencyflag=0x80;
-		}
-		memcpy(Cang_IO_tbak[3],Cang04_IO,64);
-	}
-	if((overflow_cnt==0) && (overflow_cnt==overflow_cnt_bak))
-	{
-		overflow_flag=0;
-	}
-	else
-	{
-		overflow_flag=1;
-	}
-	overflow_cnt_bak=overflow_cnt;
-	if(overflow_flag_bak!=overflow_flag)
-	{
-		emergencyflag=0x80;	
-	}
-	overflow_flag_bak=overflow_flag;
-
-	pBuf[send_pos++] = emergencyflag;
-	pBuf[send_pos++] = StoreNumber;
-	pBuf[send_pos++] = 0x22;
-	pBuf[send_pos++] = overflow_flag;
-	
-	if((Config_info_all.ManHole_Big_info>0) && (Config_info_all.ManHole_Big_info<8))
-	{
-		pBuf[send_pos++] = 0x72;
-		for (i = 0; i < StoreNumber; i++)
-		{
-			pBuf[send_pos++] = Config_info_all.ManHole_Big_info/StoreNumber;
-			for(j=0;j<Config_info_all.ManHole_Big_info/StoreNumber;++j)
-			{
-				pBuf[send_pos++] = Cang_IO_tbak[i][indexDaGai01+10*j];
-			}
-		}
-	}
-	if((Config_info_all.Dump_info>0) && (Config_info_all.Dump_info<8))
-	{
-		pBuf[send_pos++] = 0x71;
-		for (i = 0; i < StoreNumber; i++)
-		{
-			pBuf[send_pos++] = Config_info_all.Dump_info/StoreNumber;
-			for(j=0;j<Config_info_all.Dump_info/StoreNumber;++j)
-			{
-				pBuf[send_pos++] = Cang_IO_tbak[i][indexXieYouFa01+10*j];
-			}
-		}
-	}
-	if((Config_info_all.HaiDiFa_info>0) && (Config_info_all.HaiDiFa_info<8))
-	{
-		pBuf[send_pos++] = 0x64;
-		for (i = 0; i < StoreNumber; i++)
-		{
-			pBuf[send_pos++] = Config_info_all.HaiDiFa_info/StoreNumber;
-			for(j=0;j<Config_info_all.HaiDiFa_info/StoreNumber;++j)
-			{
-				pBuf[send_pos++] = Cang_IO_tbak[i][indexHaiDiFa01+10*j];
-			}
-		}
-	}
-
-	// 2022-8-25, 新增加的子命令
-	// 01, 流水号
-	// 02, 时间戳
-	do {
-		pBuf[send_pos++] = 0x01;
-		pBuf[send_pos++] = (flowID>>24) & 0xff;
-		pBuf[send_pos++] = (flowID>>16) & 0xff;
-		pBuf[send_pos++] = (flowID>>8) & 0xff;
-		pBuf[send_pos++] = (flowID>>0) & 0xff;
-	}while(0);
-	
-	send_pos += BuildTimeCmd(pBuf+send_pos);
-	
-	while (send_pos<(120+2))
-	{
-		pBuf[send_pos++] = 0;
-	}
-
-	if (pEmergencyflag) *pEmergencyflag = emergencyflag;
-	return send_pos;
-}
-
-/**
- ***************************************
- * 构建20命令数据       时间戳 -- hex制式
- * 输入:pBuf-构建数据的存放首地址
- * 返回: 构建数据的字节总数
- ***************************************
- */
-extern SDateTime m_datetime;
-int BuildTimeCmd(uint8_t *pBuf)
-{
-	int send_pos=0;
-	
-	pBuf[send_pos++] = 0x02;
-
-	pBuf[send_pos++] = HEXtoBCD(m_datetime.year);
-	pBuf[send_pos++] = HEXtoBCD(m_datetime.month);
-	pBuf[send_pos++] = HEXtoBCD(m_datetime.day);
-	pBuf[send_pos++] = HEXtoBCD(m_datetime.hour);
-	pBuf[send_pos++] = HEXtoBCD(m_datetime.min);
-	pBuf[send_pos++] = HEXtoBCD(m_datetime.sec);
-	
-	return send_pos;
-}
-
-/**
- ***************************************
- * 构建40命令数据       电子铅封 -- hex制式
- * 输入:pBuf-构建数据的存放首地址
- * 返回: 构建数据的字节总数
- ***************************************
- */
-int BuildSealTxCmd(uint8_t *pBuf, uint8_t *pEmergencyflag) // 40命令
-{
-	Return_data *ret;
-	int n = 0;
-	uint8_t emergencyflag = 0;
-
-	*pBuf++ = 0x40;
-	ret = Seal_Tx_Readvalue(0,0);
-	*pBuf++ = ret->length/2; // 调用返回的数据是asii制式的,所以真实的hex数是其一半
-	
-	for(n=0; n < ret->length/2 && n < 100; n++) {
-		pBuf[n] = MODBUS_ASCII_AsciiToHex(ret->data + 2*n);
-	}
-
-	emergencyflag = pBuf[0];
-	if(pEmergencyflag) *pEmergencyflag = emergencyflag;
-	return n+2;
-}
-
-/**
- ***************************************
- * 构建91命令数据       IO状态 -- hex制式
- * 输入:pBuf-构建数据的存放首地址
- * 返回: 构建数据的字节总数
- ***************************************
- */
-int Build91Cmd(uint8_t *pBuf, uint8_t *pEmergencyflag) 
-{
-	Return_data *ret;
-	int n = 0;
-	uint8_t emergencyflag = 0;
-
-	*pBuf++ = 0x91;
-	ret = IO_Tx_Readvalue(0,0);
-	*pBuf++ = ret->length/2; // 调用返回的数据是asii制式的,所以真实的hex数是其一半
-	
-	for(n=0; n < ret->length/2 && n < 100; n++) {
-		pBuf[n] = MODBUS_ASCII_AsciiToHex(ret->data + 2*n);
-	}
-
-	emergencyflag = pBuf[0];
-	if(pEmergencyflag) *pEmergencyflag = emergencyflag;
-	return n+2;
-}
-
-/**
- ***************************************
- * xy,新透传,41串口透传,模拟F3轮询传感器
- * 按照周期1构建数据,按照周期2发送数据
- * 输入:无
- * 返回: 无
- *    发送区的格式为:
- *       数据负载类别,1Byte
- *       传感器命令数据包数,1Byte
- *       具体的各个命令数据包,NByte
- ***************************************
- */
-void DoInternalSensorScanAndPost()
-{
-	int xlen=0, ylen=0;
-	uint8_t emergencyflag=0;
-	uint8_t *pSendBuf = USART1_TX_BUF;
-	static int step = 0;
-	static int nstep = 0;
-	static uint32_t flowID = 0;
-
-	if(++step % Pass41SensorScanParam.step == 0){	
-		for(int n=0; n<Pass41SensorScanParam.cmd_num; n++) {
-			switch (Pass41SensorScanParam.cmd_arr[n]){
-			case 0x40:
-				xlen = BuildSealTxCmd(pSendBuf, emergencyflag?NULL:&emergencyflag);
-				pSendBuf += xlen;
-			    ylen += xlen;
-				break;
-			case 0x91:
-				xlen = Build91Cmd(pSendBuf, emergencyflag?NULL:&emergencyflag);
-				pSendBuf += xlen;
-			    ylen += xlen;
-				break;
-			case 0xA1:
-				xlen = BuildA1Cmd(pSendBuf, flowID, emergencyflag?NULL:&emergencyflag); 
-				pSendBuf += xlen;
-			    ylen += xlen;
-				break;
-			default:
-				break;
-			}
-		}
-		
-		if(emergencyflag) {
-			TerminalSlave485_Send_Data(USART1_TX_BUF,ylen);
-			nstep = 0;
-			emergencyflag = 0;
-			flowID++;
-		} else {
-			if(++nstep % Pass41SensorScanParam.nstep == 0) {
-				TerminalSlave485_Send_Data(USART1_TX_BUF,ylen);
-				flowID++;
-			}
-		}
-	}
-}
 
 #include "leaf_ota.h"
 //uint32_t data_count=0;
@@ -1389,6 +1132,9 @@ void DoInternalSensorScanAndPost()
 void Data_analysis(void)
 {
 	uint32_t startBytes=0x00000000,tmpU32,update_flag;
+	
+	UNUSED(startBytes);
+	
 	if(usart1_rx_flag==1)//接收完成
 	{
 		//data_count++;
@@ -2554,6 +2300,8 @@ void Data_analysis(void)
 										}
 									}
 									break;
+									default:
+										break;
 								}
 							}
 						}
@@ -2646,6 +2394,8 @@ int32_t StoreData(uint8_t *buf,int storeNo)
 	&T2C_ALL_Sensor_Data05,&T2C_ALL_Sensor_Data06,
 	&T2C_ALL_Sensor_Data07,&T2C_ALL_Sensor_Data08};
 
+	UNUSED(ptr);
+	
 	if(storeNo>StoreNumber)
 		return ret;
 	buf[ret++] = 0xA5; 
@@ -2716,7 +2466,7 @@ void FormatWholeCarData(void)
 	pT2C_ALL_Sensor_Data0x9b=&T2C_ALL_Sensor_WholeCar01;
 	
 	memcpy(&USART1_TX_BUF[1],&USART1_RX_BUF[1],4);
-	sprintf((char*)USART1_TX_BUF+5,"%02X",0x4a);//(16+4*33)/1
+	sprintf((char *)(char*)USART1_TX_BUF+5,"%02X",0x4a);//(16+4*33)/1
  	
 	memcpy(&USART1_TX_BUF[1+6],pT2C_ALL_Sensor_Data0x9b->FrameHead,16);
 	
@@ -2987,7 +2737,7 @@ sT2C_ALL_Sensor_Data_Each_Cang* pT2C_ALL_Sensor_Data0x93;
 
 	
 									memcpy(&USART1_TX_BUF[1],&USART1_RX_BUF[1],4);
-									sprintf((char*)USART1_TX_BUF+5,"%02X",0x4a);//(16+4*33)/1
+									sprintf((char *)(char*)USART1_TX_BUF+5,"%02X",0x4a);//(16+4*33)/1
 	
 	
 									memcpy(&USART1_TX_BUF[1+6],pT2C_ALL_Sensor_Data0x93->FrameHead,16);
@@ -3039,8 +2789,8 @@ sT2C_ALL_Sensor_Data_Each_Cang* pT2C_ALL_Sensor_Data0x93;
 									Lrc_temp = MODBUS_ASCII_GetLrc(USART1_TX_BUF+1,154);//154
 									
 								  //USART1_TX_BUF[149+6]=Lrc_temp;
-									//sprintf(&USART1_TX_BUF[149+6],"%02X",Lrc_temp);
-									sprintf((char*)USART1_TX_BUF+149+6,"%02X",Lrc_temp);
+									//sprintf((char *)&USART1_TX_BUF[149+6],"%02X",Lrc_temp);
+									sprintf((char *)(char*)USART1_TX_BUF+149+6,"%02X",Lrc_temp);
 								  USART1_TX_BUF[LenthOf_Reply0x93-2]=0x0d;
 								  USART1_TX_BUF[LenthOf_Reply0x93-1]=0x0a;
 }
@@ -3806,7 +3556,7 @@ Return_data * IO_Tx_Readvalue(uint16_t ID,uint16_t length)//
 		 for(i=0;i<32;i++)
 	   {//0x91查询阀门状态指令      将二进制数据转换为ASCII 
  		 
-			 sprintf((char*)(temp_buf_Tx_Read+8+i*2),"%02X",Array_Of_Valve[i]);
+			 sprintf((char *)(char*)(temp_buf_Tx_Read+8+i*2),"%02X",Array_Of_Valve[i]);
       
 	   } 
 	#endif	
@@ -3837,12 +3587,16 @@ Return_data * IO_Tx_Readvalue(uint16_t ID,uint16_t length)//
 //*******************************************************************************/
 static uint8_t test_send_cnt = 0;//重要数据连续上报5次
 static uint8_t Emergencyflag  =0 ;//重要数据发送标志
+uint8_t  temp_buf[137]={0};//大小+1  136
 Return_data * Seal_Tx_Readvalue(uint16_t ID,uint16_t length)//读取电子铅封的应答 0:默认 1:解封 2 :施封 3:破封
 {
-	uint8_t  temp_buf[137]={0};//大小+1  136
+
 	static Return_data temp;
 	uint8_t  i,j=0;
 	uint8_t Byte_high,Byte_low;
+	
+	memset(temp_buf,0x00,sizeof(temp_buf));
+	
 	if(Sealing_Data.Sealing_up_datetype != 1)//常规数据上报
 	{
 		Emergencyflag = 0;
@@ -5050,10 +4804,10 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
 
 				for(i000=0;i000<rx2_len;i000++)
 				{
-					sprintf((char*)&USART1_TX_BUF[1+i000*2],"%02X",USART2_RX_BUF[i000]);
+					sprintf((char *)(char*)&USART1_TX_BUF[1+i000*2],"%02X",USART2_RX_BUF[i000]);
 				}
 				Lrc_temp = MODBUS_ASCII_GetLrc(USART1_TX_BUF+1,rx2_len*2);
-	 			sprintf((char*)(&USART1_TX_BUF[rx2_len*2+1]),"%02X",Lrc_temp);
+	 			sprintf((char *)(char*)(&USART1_TX_BUF[rx2_len*2+1]),"%02X",Lrc_temp);
 				USART1_TX_BUF[rx2_len*2+3]=0x0d;
 				USART1_TX_BUF[rx2_len*2+4]=0x0a;
 				TerminalSlave485_Send_Data(USART1_TX_BUF,rx2_len*2+5);
@@ -5070,7 +4824,7 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
 								//memset(&USART1_TX_BUF[33],'A',sizeof(USART1_TX_BUF)-33);
 
 								//MODBUS_S8_to_ASCII(Lrc_temp,USART1_TX_BUF+Tx_data_frame.Frame_length+7);//56
-								//sprintf((char*)(&USART1_TX_BUF[128]),"%02X",Lrc_temp);
+								//sprintf((char *)(char*)(&USART1_TX_BUF[128]),"%02X",Lrc_temp);
 				//				USART1_TX_BUF[129] =0x0D;
 				//				USART1_TX_BUF[130] = 0x0A;
 								TerminalSlave485_Send_Data(USART1_TX_BUF,128+3);	
@@ -5213,9 +4967,9 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
 						
 						memcpy(USART1_TX_BUF,temp_dataFromUsart1,16*2+1);//前16字节原样返回,共33字符 1表示起始字符英文下的冒号,hex为0x3a
 						memset(&USART1_TX_BUF[33],'=',sizeof(USART1_TX_BUF)-33);
-						sprintf((char*)(&USART1_TX_BUF[33]),"System will reboot... %5d",cmd39Cnt);
+						sprintf((char *)(char*)(&USART1_TX_BUF[33]),"System will reboot... %5d",cmd39Cnt);
 						Lrc_temp = MODBUS_ASCII_GetLrc(USART1_TX_BUF+1,64);
-						sprintf((char*)(&USART1_TX_BUF[65]),"%02X",Lrc_temp);
+						sprintf((char *)(char*)(&USART1_TX_BUF[65]),"%02X",Lrc_temp);
 						USART1_TX_BUF[67] =0x0D;
 						USART1_TX_BUF[68] = 0x0A;
 						TerminalSlave485_Send_Data(USART1_TX_BUF,69);
@@ -5246,10 +5000,10 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
 				case	ADDR_VersionOf_Software:// 
 						//FM25L16B_Read_N_Bytes(ADDR_VersionOf_Software,T2C_RemoteCaliDat001.PayLoadData,32); 	
 						//memset(&USART1_TX_BUF[33],'=',sizeof(USART1_TX_BUF)-33);
-						//sprintf((char*)(&USART1_TX_BUF[33]),"%s\r\n",T2C_RemoteCaliDat001.PayLoadData);
+						//sprintf((char *)(char*)(&USART1_TX_BUF[33]),"%s\r\n",T2C_RemoteCaliDat001.PayLoadData);
 			 			// for(i000=0;i000<strlen(Version_software);++i000)
 						// {
-						// 	sprintf(USART1_TX_BUF+33+2*i000,"%02X",Version_software[i000]);
+						// 	sprintf((char *)USART1_TX_BUF+33+2*i000,"%02X",Version_software[i000]);
 						// }
 						//strcpy(T2C_RemoteCaliDat001.PayLoadData,Version_software);
 						//T2C_RemoteCaliDat001.NumberOfRegs = strlen(Version_software);
@@ -5333,11 +5087,11 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
 				case	ADDR_Sensor_Scan_Param:
  					FM25L16B_Read_N_Bytes(ADDR_Sensor_Scan_Param,T2C_RemoteCaliDat001.PayLoadData,16);
 					T2C_RemoteCaliDat001.NumberOfRegs = 16; 
-      			break;	
+      		break;	
 				default:
 
 					//memset(&USART1_TX_BUF[33], '=', sizeof(USART1_TX_BUF) - 33);
-					T2C_RemoteCaliDat001.NumberOfRegs=sprintf(T2C_RemoteCaliDat001.PayLoadData, "Read Address Error! %08X\r\n", T2C_RemoteCaliDat001.AddrRegStart);
+					T2C_RemoteCaliDat001.NumberOfRegs=sprintf((char *)T2C_RemoteCaliDat001.PayLoadData, "Read Address Error! %08X\r\n", T2C_RemoteCaliDat001.AddrRegStart);
 					break;
 				} //读取寄存器指令
 
@@ -5351,9 +5105,9 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
       	case ADDR_Restart_ContBoard: //控制板复位指令
 						memcpy(USART1_TX_BUF,temp_dataFromUsart1,16*2+1);//前16字节原样返回,共33字符 1表示起始字符英文下的冒号,hex为0x3a
 						memset(&USART1_TX_BUF[33],'=',sizeof(USART1_TX_BUF)-33);
-						sprintf((char*)(&USART1_TX_BUF[33]),"System will reboot... %5d",cmd39Cnt);
+						sprintf((char *)(char*)(&USART1_TX_BUF[33]),"System will reboot... %5d",cmd39Cnt);
 						Lrc_temp = MODBUS_ASCII_GetLrc(USART1_TX_BUF+1,64);
-						sprintf((char*)(&USART1_TX_BUF[65]),"%02X",Lrc_temp);
+						sprintf((char *)(char*)(&USART1_TX_BUF[65]),"%02X",Lrc_temp);
 						USART1_TX_BUF[67] =0x0D;
 						USART1_TX_BUF[68] = 0x0A;
 						TerminalSlave485_Send_Data(USART1_TX_BUF,69);
@@ -5368,7 +5122,7 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
 					FM25L16B_WriteByte(ADDR_Extended_ContBoard+2,T2C_RemoteCaliDat001.PayLoadData[2]);
 					FM25L16B_WriteByte(ADDR_Extended_ContBoard+3,T2C_RemoteCaliDat001.PayLoadData[3]);
 					/*memset(&USART1_TX_BUF[33],'=',sizeof(USART1_TX_BUF)-33);
-					sprintf((char*)(&USART1_TX_BUF[33]),"%02X%02X%02X%02X",T2C_RemoteCaliDat001.PayLoadData[0],
+					sprintf((char *)(char*)(&USART1_TX_BUF[33]),"%02X%02X%02X%02X",T2C_RemoteCaliDat001.PayLoadData[0],
 								T2C_RemoteCaliDat001.PayLoadData[1],T2C_RemoteCaliDat001.PayLoadData[2],T2C_RemoteCaliDat001.PayLoadData[3]);
 					*/
 					break;
@@ -5383,7 +5137,7 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
 
 					/*for(i001=0;i001<32;i001++)
 					{
-						sprintf((char*)(&USART1_TX_BUF[33+i001]),"%02X",T2C_RemoteCaliDat001.PayLoadData[i001]);
+						sprintf((char *)(char*)(&USART1_TX_BUF[33+i001]),"%02X",T2C_RemoteCaliDat001.PayLoadData[i001]);
 					
 					}*/
 					
@@ -5406,7 +5160,7 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
  					FM25L16B_Write_N_Bytes(ADDR_DataSource_LiquidoMeter,T2C_RemoteCaliDat001.PayLoadData,4);	
 					for(i001=0;i001<4;i001++)
 					{
-						sprintf((char*)(&USART1_TX_BUF[33+i001]),"%02X",T2C_RemoteCaliDat001.PayLoadData[i001]);
+						sprintf((char *)(char*)(&USART1_TX_BUF[33+i001]),"%02X",T2C_RemoteCaliDat001.PayLoadData[i001]);
 					
 					}				
 					
@@ -5426,7 +5180,7 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
  					FM25L16B_Write_N_Bytes(ADDR_DataSource_ElecSeal,T2C_RemoteCaliDat001.PayLoadData,4); 
 					/*for(i001=0;i001<4;i001++)
 					{
-						sprintf((char*)(&USART1_TX_BUF[33+i001]),"%02X",T2C_RemoteCaliDat001.PayLoadData[i001]);
+						sprintf((char *)(char*)(&USART1_TX_BUF[33+i001]),"%02X",T2C_RemoteCaliDat001.PayLoadData[i001]);
 					
 					}		*/		
 					break;
@@ -5436,7 +5190,7 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
  					FM25L16B_Write_N_Bytes(ADDR_V20_Point,T2C_RemoteCaliDat001.PayLoadData,16); 
 					/*for(i001=0;i001<16;i001++)
 					{
-						sprintf((char*)(&USART1_TX_BUF[33+i001]),"%02X",T2C_RemoteCaliDat001.PayLoadData[i001]);
+						sprintf((char *)(char*)(&USART1_TX_BUF[33+i001]),"%02X",T2C_RemoteCaliDat001.PayLoadData[i001]);
 					
 					}*/				
 					break;				
@@ -5447,7 +5201,7 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
 				
 				case ADDR_CarPlate_Number: //设定车牌号
 					memset(bufText01Password,0,sizeof(bufText01Password));
-					sprintf((char*)bufText01Password,"车牌号:%s AB\r\n",T2C_RemoteCaliDat001.PayLoadData);
+					sprintf((char *)(char*)bufText01Password,"车牌号:%s AB\r\n",T2C_RemoteCaliDat001.PayLoadData);
 					FunDebugCode=DebugFun_Show_Terminal;
 					memcpy(CarLicensePlate,T2C_RemoteCaliDat001.PayLoadData,16);//拷贝16字节的车牌号,格式如:新M56454				
 					//WriteCarLicensePlate();//保存车牌号
@@ -5455,7 +5209,7 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
 				
 					/*for(i001=0;i001<8;i001++)
 					{
-						sprintf((char*)(&USART1_TX_BUF[33+i001]),"%02X",T2C_RemoteCaliDat001.PayLoadData[i001]);
+						sprintf((char *)(char*)(&USART1_TX_BUF[33+i001]),"%02X",T2C_RemoteCaliDat001.PayLoadData[i001]);
 					
 					}	*/	
 					break;
@@ -5561,7 +5315,7 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
  					//FM25L16B_Write_N_Bytes(ADDR_ManHoLe_Number,T2C_RemoteCaliDat001.PayLoadData,32); 
 					/*for(i001=0;i001<64;i001++)
 					{
-						sprintf((char*)(&USART1_TX_BUF[33+i001]),"%02X",T2C_RemoteCaliDat001.PayLoadData[i001]);
+						sprintf((char *)(char*)(&USART1_TX_BUF[33+i001]),"%02X",T2C_RemoteCaliDat001.PayLoadData[i001]);
 					
 					}			*/
 					FM25L16B_Read_N_Bytes(ADDR_StoreNumber,T2C_RemoteCaliDat001.PayLoadData,1); 
@@ -5643,7 +5397,7 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
 
 				case	ADDR_Sensor_Scan_Param:
  					FM25L16B_Write_N_Bytes(ADDR_Sensor_Scan_Param,T2C_RemoteCaliDat001.PayLoadData,16);
-					InitSensorScanParam();
+					jt808_InitSensorScanParam();
 					T2C_RemoteCaliDat001.NumberOfRegs = 16; 
       			break;	
 
@@ -5677,11 +5431,18 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
 				  memcpy(&time_Set_Dwin[8],T2C_RemoteCaliDat001.PayLoadData,6);
 				  ScreenMaster485_Send_Data(time_Set_Dwin,14);
 					//memcpy(TimeBuf+1,T2C_RemoteCaliDat001.PayLoadData,6);
+#if 	1				
+					uint8_t times_buf[32];
+					memset(times_buf, 0x00,sizeof(times_buf));
+					memcpy(times_buf+1,T2C_RemoteCaliDat001.PayLoadData,6);
+					ds1302_Write_Time(times_buf);
+#else				
 					ds1302_Write_Time(T2C_RemoteCaliDat001.PayLoadData-1);
+#endif				
 					ds1302_SynTime(&m_datetime);
 					/*for(i001=0;i001<6;i001++)
 					{
-						sprintf((char*)(&USART1_TX_BUF[33+i001]),"%02X",T2C_RemoteCaliDat001.PayLoadData[i001]);
+						sprintf((char *)(char*)(&USART1_TX_BUF[33+i001]),"%02X",T2C_RemoteCaliDat001.PayLoadData[i001]);
 					
 					}*/
 					T2C_RemoteCaliDat001.NumberOfRegs = 6;
@@ -5699,24 +5460,24 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
 				case	ADDR_Unique_ID_ContBoard:// 
  					FM25L16B_Write_N_Bytes(ADDR_Unique_ID_ContBoard,T2C_RemoteCaliDat001.PayLoadData,16); 	
 					FM25L16B_Read_N_Bytes(ADDR_Unique_ID_ContBoard,T2C_RemoteCaliDat001.PayLoadData,16); 
-					T2C_RemoteCaliDat001.NumberOfRegs=sprintf(T2C_RemoteCaliDat001.PayLoadData,"%s",T2C_RemoteCaliDat001.PayLoadData);
+					T2C_RemoteCaliDat001.NumberOfRegs=sprintf((char *)T2C_RemoteCaliDat001.PayLoadData,"%s",T2C_RemoteCaliDat001.PayLoadData);
       		break;
 				/*case	ADDR_VersionOf_Software:// 
  					FM25L16B_Write_N_Bytes(ADDR_VersionOf_Software,T2C_RemoteCaliDat001.PayLoadData,32); 	
 					FM25L16B_Read_N_Bytes(ADDR_VersionOf_Software,T2C_RemoteCaliDat001.PayLoadData,32); 
-					T2C_RemoteCaliDat001.NumberOfRegs=sprintf(T2C_RemoteCaliDat001.PayLoadData,"%s",T2C_RemoteCaliDat001.PayLoadData);
+					T2C_RemoteCaliDat001.NumberOfRegs=sprintf((char *)T2C_RemoteCaliDat001.PayLoadData,"%s",T2C_RemoteCaliDat001.PayLoadData);
       		break;*/
 				
 				case	ADDR_VersionOf_Hardware:// 
  					FM25L16B_Write_N_Bytes(ADDR_VersionOf_Hardware,T2C_RemoteCaliDat001.PayLoadData,32); 
 					FM25L16B_Read_N_Bytes(ADDR_VersionOf_Hardware,T2C_RemoteCaliDat001.PayLoadData,32); 
-					T2C_RemoteCaliDat001.NumberOfRegs=sprintf(T2C_RemoteCaliDat001.PayLoadData,"%s",T2C_RemoteCaliDat001.PayLoadData);
+					T2C_RemoteCaliDat001.NumberOfRegs=sprintf((char *)T2C_RemoteCaliDat001.PayLoadData,"%s",T2C_RemoteCaliDat001.PayLoadData);
 	   
       		break;
 				case	ADDR_VersionOf_LCD:// 
  					FM25L16B_Write_N_Bytes(ADDR_VersionOf_LCD,T2C_RemoteCaliDat001.PayLoadData,32); 
 					FM25L16B_Read_N_Bytes(ADDR_VersionOf_LCD,T2C_RemoteCaliDat001.PayLoadData,32); 
-					T2C_RemoteCaliDat001.NumberOfRegs=sprintf(T2C_RemoteCaliDat001.PayLoadData,"%s",T2C_RemoteCaliDat001.PayLoadData);
+					T2C_RemoteCaliDat001.NumberOfRegs=sprintf((char *)T2C_RemoteCaliDat001.PayLoadData,"%s",T2C_RemoteCaliDat001.PayLoadData);
 	   
       		break;
 				
@@ -5731,14 +5492,14 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
 				
 				case	ADDR_Sw_VoicePlay://远程切换语音播报 
 					FunDebugCode=DebugFun_Sw_VoicePlay;
-					//sprintf((char*)(&USART1_TX_BUF[33]),"%s\r\n",T2C_RemoteCaliDat001.PayLoadData);
-					T2C_RemoteCaliDat001.NumberOfRegs=sprintf(T2C_RemoteCaliDat001.PayLoadData,"%8u",DebugFun_Sw_VoicePlay);
+					//sprintf((char *)(char*)(&USART1_TX_BUF[33]),"%s\r\n",T2C_RemoteCaliDat001.PayLoadData);
+					T2C_RemoteCaliDat001.NumberOfRegs=sprintf((char *)T2C_RemoteCaliDat001.PayLoadData,"%8u",DebugFun_Sw_VoicePlay);
 	   
       				break;				
 				
 				case	ADDR_Sw_ValveRaw://远程屏幕显示阀门原始数据或者汉字信息 
 					FunDebugCode=DebugFun_Sw_ValveRaw;
-					T2C_RemoteCaliDat001.NumberOfRegs=sprintf(T2C_RemoteCaliDat001.PayLoadData,"%8u",DebugFun_Sw_ValveRaw);
+					T2C_RemoteCaliDat001.NumberOfRegs=sprintf((char *)T2C_RemoteCaliDat001.PayLoadData,"%8u",DebugFun_Sw_ValveRaw);
       				break;
 
 				case ADDR_Reserve002_ContBoard: //远程设定控制板数据用于测试
@@ -5811,14 +5572,23 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
 					FM25L16B_Write_N_Bytes(ADDR_Enable_BlankSeal, T2C_RemoteCaliDat001.PayLoadData, 1);
 					T2C_RemoteCaliDat001.NumberOfRegs = 1;
 					break;
+				//add boly 20221021
+				case ADDR_JT808_DataBack:
+				{
+					jt808_recv_func_DataBack(T2C_RemoteCaliDat001.PayLoadData, T2C_RemoteCaliDat001.NumberOfRegs);
+					memset((void *)&T2C_RemoteCaliDat001, 0x00, sizeof(T2C_RemoteCaliDat001));	
+					memset((void *)Pass41SensorScanParam.rx_buf, 0x00, sizeof(Pass41SensorScanParam.rx_buf));
+					return 1;
+				}break;				
+				//end boly
 				default:
-					T2C_RemoteCaliDat001.NumberOfRegs = sprintf(T2C_RemoteCaliDat001.PayLoadData, "Write Address Error! %08X\r\n", T2C_RemoteCaliDat001.AddrRegStart);
+					T2C_RemoteCaliDat001.NumberOfRegs = sprintf((char *)T2C_RemoteCaliDat001.PayLoadData, "Write Address Error! %08X\r\n", T2C_RemoteCaliDat001.AddrRegStart);
 					break;
 	  }
 		}//写入寄存器指令----结束
 		else
 		{
-			T2C_RemoteCaliDat001.NumberOfRegs = sprintf(T2C_RemoteCaliDat001.PayLoadData,"Modbus Command Error! %08X\r\n",T2C_RemoteCaliDat001.FunctionCode);
+			T2C_RemoteCaliDat001.NumberOfRegs = sprintf((char *)T2C_RemoteCaliDat001.PayLoadData,"Modbus Command Error! %08X\r\n",T2C_RemoteCaliDat001.FunctionCode);
 		}
 		
 		
@@ -5827,7 +5597,7 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
 			{//ASCII模式下,只发送64*2+3字节	
 					memcpy(USART1_TX_BUF,temp_dataFromUsart1,16*2+1);//前16字节原样返回,共33字符 1表示起始字符英文下的冒号,hex为0x3a 
 					Lrc_temp = MODBUS_ASCII_GetLrc(USART1_TX_BUF+1,T2C_RemoteCaliDat001.NumberOfRegs);
-					sprintf((char*)(&USART1_TX_BUF[T2C_RemoteCaliDat001.NumberOfRegs*2+33]),"%02X",Lrc_temp);
+					sprintf((char *)(char*)(&USART1_TX_BUF[T2C_RemoteCaliDat001.NumberOfRegs*2+33]),"%02X",Lrc_temp);
 					USART1_TX_BUF[T2C_RemoteCaliDat001.NumberOfRegs*2+35] =0x0D;
 					USART1_TX_BUF[T2C_RemoteCaliDat001.NumberOfRegs*2+36] = 0x0A;
 					TerminalSlave485_Send_Data(USART1_TX_BUF,T2C_RemoteCaliDat001.NumberOfRegs*2+37);
@@ -5838,7 +5608,7 @@ int 	Process_CMD_0x39_RemoteCali(uint8_t dataMode)
 				
 					memcpy(USART1_TX_BUF,temp_dataFromUsart1,16*1+1);//前16字节原样返回,共33字符 1表示起始字符英文下的冒号,hex为0x3a 
 					Lrc_temp = MODBUS_GetLrc(USART1_TX_BUF+1,T2C_RemoteCaliDat001.NumberOfRegs);
-					sprintf((char*)(&USART1_TX_BUF[T2C_RemoteCaliDat001.NumberOfRegs+1]),"%02X",Lrc_temp);
+					sprintf((char *)(char*)(&USART1_TX_BUF[T2C_RemoteCaliDat001.NumberOfRegs+1]),"%02X",Lrc_temp);
 					USART1_TX_BUF[T2C_RemoteCaliDat001.NumberOfRegs+3] =0x0D;
 					USART1_TX_BUF[T2C_RemoteCaliDat001.NumberOfRegs+4] = 0x0A;
 					TerminalSlave485_Send_Data(USART1_TX_BUF,T2C_RemoteCaliDat001.NumberOfRegs+5);//64+3

+ 86 - 49
Src/freertos.c

@@ -60,14 +60,15 @@
 #include "spi.h"
 #include "tim.h"
 #include "TerminalSlave485.h"
+#include "TerminalSlave485_jt808.h"
 #include "KeySlave485.h"
 #include "CollectMaster485.h"
-
 #include "ScreenMaster485.h"
 #include "Elec_Seal.h"
 #include "Dwin.h"
-#include "DS1302.h"
+#include "func_record.h"
 #include "Data_deal.h"
+#include "DS1302.h"
 #include "DS1302Drv.h"
 #include "usart.h"
 #include <string.h> //memset函数
@@ -95,6 +96,8 @@ int formatStr(uint16_t *bufTextCang02_IO000, uint8_t *Cang02_IO000, uint8_t cang
 int formatStrCang01(uint16_t *bufTextCang01_IO000, uint8_t *Cang01_IO000, uint8_t cangNum); //可以显示兼容的老式协议
 
 SDateTime m_datetime;
+//SDateTime sys_datetime;
+
 static int FRAM_cnt = 0;
 uint8_t vt_disp_type=0;
 uint32_t cntUsage = 0; //统计cpu利用率
@@ -106,9 +109,11 @@ osThreadId Uart2_CommHandle;
 osThreadId Usart1_TerminalHandle; ////Task_Usart1_Terminal
 osThreadId Data_ProcessHandle;
 osThreadId DispSensorData_Handle;
-osThreadId VoicePlay_Handle;		 //语音播报任务
+//osThreadId VoicePlay_Handle;		 //语音播报任务
 osThreadId Task_GetCPU_Usage_Handle; //
 
+osThreadId task_record_Handle;		 //记录任务
+
 /* 互斥信号量句柄 */
 SemaphoreHandle_t xSemaphore_uart4 = NULL; //串口4  语音播报器与按键接在一个总线上
 
@@ -144,44 +149,6 @@ sT2C_ALL_Sensor_Data_Each_Cang *pT2C_ALL_Sensor_Data_Disp = &T2C_ALL_Sensor_Data
 
 /* Private function prototypes -----------------------------------------------*/
 /* USER CODE BEGIN FunctionPrototypes */
-void InitSensorScanParam(void)
-{
-	uint8_t data[16];
-	
-	FM25L16B_Read_N_Bytes(ADDR_Sensor_Scan_Param, data, 16);
-	if(data[0] == 0x5A){
-		uint8_t *buf = data+1;
-		Pass41SensorScanParam.enable = 1;
-		if(buf[0] > 1 && buf[1] > 0){
-			Pass41SensorScanParam.step = buf[0];
-			Pass41SensorScanParam.nstep = buf[1];
-			if(buf[2] > 0 && buf[2] <= 8){
-				Pass41SensorScanParam.cmd_num = buf[2];
-				for (int n = 0; n < Pass41SensorScanParam.cmd_num; n++){
-					Pass41SensorScanParam.cmd_arr[n] = buf[3+n];
-				}
-			}else{
-				Pass41SensorScanParam.cmd_num = 2;
-				Pass41SensorScanParam.cmd_arr[0] = 0x40;
-				Pass41SensorScanParam.cmd_arr[1] = 0x91;
-			}	
-		}else{
-			Pass41SensorScanParam.step = 5;
-			Pass41SensorScanParam.nstep = 6;
-			Pass41SensorScanParam.cmd_num = 2;
-			Pass41SensorScanParam.cmd_arr[0] = 0x40;
-			Pass41SensorScanParam.cmd_arr[1] = 0x91;
-		}
-	}else{
-		Pass41SensorScanParam.enable = 0;
-		Pass41SensorScanParam.step = 5;
-		Pass41SensorScanParam.nstep = 6;
-		Pass41SensorScanParam.cmd_num = 2;
-		Pass41SensorScanParam.cmd_arr[0] = 0x40;
-		Pass41SensorScanParam.cmd_arr[1] = 0x91;
-	}
-}
-
 void ControllerConfig_Init(void)
 {
 	//	uint8_t t000;
@@ -427,7 +394,7 @@ void ControllerConfig_Init(void)
 	flag_En_BlankSeal = FM25L16B_ReadByte(ADDR_Enable_BlankSeal);
 
     // 开机初始化读取,SensorScanParam
-	InitSensorScanParam();
+	jt808_InitSensorScanParam();
 }
 /* USER CODE END FunctionPrototypes */
 
@@ -438,7 +405,7 @@ void Task_Usart3_LCD_Update(void const *argument);
 void Task_Uart4_VoicePlay(void const *argument);
 void Task_GetCPU_Usage(void const *argument);
 
-void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
+
 #define TASK_BIT_1	0x01
 #define TASK_BIT_2	0x02
 #define TASK_BIT_3  0x04
@@ -488,11 +455,19 @@ void MX_FREERTOS_Init(void)
 
 	osThreadDef(Uart_Terminal, Task_Usart1_Terminal, osPriorityNormal, 0, 512 * 2); //终端数据通信任务
 	Usart1_TerminalHandle = osThreadCreate(osThread(Uart_Terminal), NULL);
-
+#if USE_FATFS_RECORD
+	/* definition and creation of Data_Process */
+	if(func_record_fatfs_isOK() == true)
+	{	
+		osThreadDef(task_record, func_record_main, osPriorityNormal, 0, 512 * 4);
+		task_record_Handle = osThreadCreate(osThread(task_record), NULL);
+	}	
+#endif	
 	/* definition and creation of Data_Process */
 	osThreadDef(Data_Process, Task_Usart3_LCD_Update, osPriorityNormal, 0, 512 * 4);
 	Data_ProcessHandle = osThreadCreate(osThread(Data_Process), NULL);
 
+
 	/* USER CODE BEGIN RTOS_THREADS */
 	/* add threads, ... */
 	//	osThreadDef(VoicePlay_Process, Task_Uart4_VoicePlay, osPriorityNormal, 0, 512*2);
@@ -500,7 +475,8 @@ void MX_FREERTOS_Init(void)
 
 	//osPriorityNormal    osPriorityHigh
 	osThreadDef(GetCPU_Usage_Process, Task_GetCPU_Usage, osPriorityBelowNormal, 0, 512 * 2);
-	Task_GetCPU_Usage_Handle = osThreadCreate(osThread(GetCPU_Usage_Process), NULL);
+	Task_GetCPU_Usage_Handle = osThreadCreate(osThread(GetCPU_Usage_Process), NULL);		
+
 
 	AppObjCreate();
 	
@@ -663,6 +639,8 @@ void Task_Usart3_LCD_Update(void const *argument)
 {
 	uint16_t i00task_usart3 = 0; //,i002=0;
 	int i001_DataTask, Len000;
+	
+	UNUSED(i001_DataTask);
 
 	/* USER CODE BEGIN Task_Usart3_LCD_Update */
 	ControllerConfig_Init();
@@ -819,7 +797,7 @@ void Task_Usart3_LCD_Update(void const *argument)
 	//56454的车默认p3=3;54021的车默认p3=1;
 	pT2C_SetupData->Reserved_parameters_3 = 1.0f; //温度传感器取第1个点的温度
 	i00task_usart3=5;
-	Full_Oil_allinfo.Car_state_disp=-1;
+	Full_Oil_allinfo.Car_state_disp=0xff;
 	Jump_page_id(Run_mode_key_info.current_page);
 	/* Infinite loop */
 	while (1)
@@ -1010,12 +988,38 @@ void Task_Usart1_Terminal(void const *argument)
 		// xy,新透传,41串口透传,模拟F3轮询传感器,构建数据
 		if(Pass41SensorScanParam.enable && i_task01 % 100 == 99) 
 		{
-			DoInternalSensorScanAndPost();
+			jt808_DoInternalSensorScanAndPost();
 		}
 	} //while(1)
 	  /* USER CODE END Task_Usart1_Terminal */
 }
 
+
+void fram_time_read(SDateTime * p_datetime)
+{
+	FM25L16B_Read_N_Bytes(ADDR_TIME_record, (uint8_t *)p_datetime, sizeof(SDateTime));
+	return;
+}
+
+void ds1302_time_init(SDateTime datetime)
+{
+	uint8_t buf[32] = {0};
+	buf[1] = datetime.year%100 ;		  //年 
+	buf[2] = datetime.month;		   		//月 
+	buf[3] = datetime.day;		   			//日 
+	buf[4] = datetime.hour;		     	//时 
+	buf[5] = datetime.min;		     		//分 
+	buf[6] = datetime.sec&0x7f; 			//秒,屏蔽秒的第7位,避免超出59
+	
+	ds1302_Write_Time(buf);
+}
+void fram_time_write(SDateTime datetime)
+{
+	datetime.min++;
+	
+	FM25L16B_Write_N_Bytes(ADDR_TIME_record, (uint8_t *)&datetime, sizeof(SDateTime));
+	return;
+}
 /* USER CODE BEGIN Header_Task_GetCPU_Usage */
 /**
 * @brief Function implementing the Data_Process thread.
@@ -1026,11 +1030,28 @@ void Task_Usart1_Terminal(void const *argument)
 void Task_GetCPU_Usage(void const *argument)
 {
 	/* USER CODE BEGIN Task_GetCPU_Usage */
-	char hour=-1;
+	char hour=0xff;
+	char min=0xff;
 	int count;
 	int i_task01;
 	EventBits_t uxBits;
 	ds1302_Init();
+	
+	fram_time_read(&m_datetime);
+	ds1302_time_init(m_datetime);
+	UNUSED(min);
+#if 0	
+	while(1)
+	{
+		osDelay(1000); //阻塞延时,根据情况调节
+		if(m_datetime.min!=min)
+		{
+			ds1302_SynTime(&m_datetime);
+			min = m_datetime.min;
+		}
+	};
+#endif
+	
 	//HAL_Delay(100);
 	count=0;
 	/* Infinite loop */
@@ -1045,6 +1066,19 @@ void Task_GetCPU_Usage(void const *argument)
 			ds1302_SynTime(&m_datetime);
 			hour = m_datetime.hour;
 		}
+#if USE_FATFS_RECORD	
+		//add boly 20221019
+		if(m_datetime.min!=min)
+		{
+			fram_time_write(m_datetime);
+			min = m_datetime.min;
+#if 1			
+			m_datetime.day++;
+			ds1302_time_init(m_datetime);
+#endif			
+		}
+		//end boly
+#endif  //-----------USE_FATFS_RECORD-----------//
 		uxBits = xEventGroupWaitBits(xCreatedEventGroup, /* 事件标志组句柄 */
                                      TASK_BIT_ALL,       /* 等待TASK_BIT_ALL被设置 */
                                      pdTRUE,             /* 退出前TASK_BIT_ALL被清除,这里是TASK_BIT_ALL都被设置才表示“退出”*/
@@ -1554,7 +1588,7 @@ void Task_Uart4_VoicePlay(void const *argument)
 				__nop();
 				crc000 = CRC16_MODBUS((unsigned char *)SpeakerBuff, LenToSpk);
 				SpeakerBuff[LenToSpk] = crc000 >> 8;
-				SpeakerBuff[LenToSpk + 1] = crc000 & 0x00ff;
+ 				SpeakerBuff[LenToSpk + 1] = crc000 & 0x00ff;
 
 				KeySlave485_Send_Data((uint8_t *)SpeakerBuff, LenToSpk + 2);
 				memset(&SpeakerBuff[9], 0, sizeof(SpeakerBuff) - 9);
@@ -2424,6 +2458,8 @@ void DisplayValveInfo(void)
 	//int i000;
 	int Len000Valve, Len002, Len003;
 
+	UNUSED(Len000Valve);
+	
 	if (DebugFun__Restart_ContBoard01 != FunDebugCode) //只要不是重启命令就定时刷新屏幕信息
 	{												   //显示阀门开关信息--开始
 
@@ -2915,6 +2951,7 @@ void DisplaySensorInfo(void)
 	static int CangNum_tskUart3;
 	float Ht_t[8];
 
+	UNUSED(Ht_t);
 	//pT2C_SetupData->Reserved_parameters_4=1.0;
 
 	CangNum_tskUart3++;

+ 1 - 2
Src/gpio.c

@@ -114,8 +114,7 @@ void MX_GPIO_Init(void)
   /*Configure GPIO pin : PtPin */
   GPIO_InitStruct.Pin = DWI_Pin;
 	
-	if(WatchDogOn)//打开看门狗sp706
-	//if(1)//打开看门狗sp706
+	if(WATCH_DOG_ON)//打开看门狗sp706
 	{
 		//
 		GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

+ 15 - 2
Src/main.c

@@ -80,10 +80,14 @@ Note by Daiyf at 2021-2-3
 #include "tim.h"
 #include "usart.h"
 #include "gpio.h"
+#include "Data_deal.h"
 #include "DS1302.h"
 #include "KeySlave485.h"
 #include "usart.h"
-
+#include "leaf_ota.h"
+#include "obj_spi_sd_stm32.h"
+#include "func_fatfs.h"
+#include "func_record.h"
 
 uint32_t sd000,sd001;//浮点数转换为实时显示的参数,4字节
 uint16_t uart4RxCounter=0; //串口4接收数据计数器
@@ -117,7 +121,6 @@ uint16_t uart4RxCounter=0; //
 
 /* Private function prototypes -----------------------------------------------*/
 void SystemClock_Config(void);
-void MX_FREERTOS_Init(void);
 /* USER CODE BEGIN PFP */
 /* Private function prototypes -----------------------------------------------*/
 
@@ -216,6 +219,13 @@ int main(void)
 	
 	//HAL_UART_Receive_DMA(&huart2, USART_RX_BUF_U2,Uart2_BUF_SIZE);
   /* USER CODE END 2 */
+	
+#if USE_FATFS_RECORD
+	//add boly 20221014
+	func_fatfs_init();
+	func_fatfs_main();
+	//end boly
+#endif
 
   /* Call init function for freertos objects (in freertos.c) */
   MX_FREERTOS_Init();
@@ -317,6 +327,9 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
 
   /* USER CODE END Callback 0 */
   if (htim->Instance == TIM1) {
+		//add boly SD卡 
+		sdcard_systick_timerproc();
+		//end boly 
     HAL_IncTick();
   }
   /* USER CODE BEGIN Callback 1 */

+ 1 - 1
Src/md5c.c

@@ -327,7 +327,7 @@ int MD5File (char *filename,unsigned char digest[16])
 { 
  FILE *file; 
  MD5_CTX context; 
- int len; 
+ size_t len = 0; 
  unsigned char buffer[1024]; 
  
  if ((file = fopen (filename, "rb")) == NULL) 

+ 53 - 1
Src/spi.c

@@ -85,6 +85,35 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
 {
 
   GPIO_InitTypeDef GPIO_InitStruct = {0};
+	if(spiHandle->Instance==SPI2)
+  {
+  /* USER CODE BEGIN SPI2_MspInit 0 */
+
+  /* USER CODE END SPI2_MspInit 0 */
+    /* Peripheral clock enable */
+    __HAL_RCC_SPI2_CLK_ENABLE();
+    __HAL_RCC_GPIOB_CLK_ENABLE();
+    /**SPI2 GPIO Configuration   
+		PB12     ------> SPI2_NSS
+    PB13     ------> SPI2_SCK
+    PB14     ------> SPI2_MISO
+    PB15     ------> SPI2_MOSI 
+    */
+    GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
+    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+    GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
+    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+		
+    /* SPI1 interrupt Init */
+    HAL_NVIC_SetPriority(SPI2_IRQn, 0, 0);
+    HAL_NVIC_EnableIRQ(SPI2_IRQn);
+  /* USER CODE BEGIN SPI2_MspInit 1 */
+
+  /* USER CODE END SPI2_MspInit 1 */
+  }
+	
   if(spiHandle->Instance==SPI4)
   {
   /* USER CODE BEGIN SPI4_MspInit 0 */
@@ -105,7 +134,7 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;//快速
     GPIO_InitStruct.Alternate = GPIO_AF5_SPI4;
     HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);//配置SPI的数据线和时钟线
-
+		
   /* USER CODE BEGIN SPI4_MspInit 1 */
 
   /* USER CODE END SPI4_MspInit 1 */
@@ -114,6 +143,29 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
 
 void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
 {
+	if(spiHandle->Instance==SPI2)
+  {
+  /* USER CODE BEGIN SPI2_MspDeInit 0 */
+
+  /* USER CODE END SPI2_MspDeInit 0 */
+    /* Peripheral clock disable */
+    __HAL_RCC_SPI2_CLK_DISABLE();
+  
+    /**SPI2 GPIO Configuration   
+		PB12     ------> SPI2_NSS
+    PB13     ------> SPI2_SCK
+    PB14     ------> SPI2_MISO
+    PB15     ------> SPI2_MOSI 
+    */
+    HAL_GPIO_DeInit(GPIOB, GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);
+		
+		/* SPI2 interrupt DeInit */
+    HAL_NVIC_DisableIRQ(SPI2_IRQn);
+  /* USER CODE BEGIN SPI2_MspDeInit 1 */
+
+  /* USER CODE END SPI2_MspDeInit 1 */
+  }
+
 
   if(spiHandle->Instance==SPI4)
   {

+ 19 - 0
Src/stm32f7xx_it.c

@@ -37,6 +37,9 @@
 #include "main.h"
 #include "Data_deal.h"
 #include "stm32f7xx_it.h"
+#include "TerminalSlave485.h"
+#include "CollectMaster485.h"
+#include "ScreenMaster485.h"
 #include "cmsis_os.h"
 /* Private includes ----------------------------------------------------------*/
 /* USER CODE BEGIN Includes */
@@ -822,5 +825,21 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
         default:break;  
     }  
 }       
+
+extern SPI_HandleTypeDef hspi2;
+/**
+  * @brief This function handles SPI2 global interrupt.
+  */
+void SPI2_IRQHandler(void)
+{
+  /* USER CODE BEGIN SPI1_IRQn 0 */
+
+  /* USER CODE END SPI1_IRQn 0 */
+  HAL_SPI_IRQHandler(&hspi2);
+  /* USER CODE BEGIN SPI1_IRQn 1 */
+
+  /* USER CODE END SPI1_IRQn 1 */
+}
+
 /* USER CODE END 1 */
 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/