Bläddra i källkod

update details for iap

terry 2 år sedan
förälder
incheckning
eb66721602

+ 6 - 7
Core/Inc/main.h

@@ -59,7 +59,7 @@ extern "C" {
 /* Exported macro ------------------------------------------------------------*/
 /* USER CODE BEGIN EM */
 #define Rx_Max 1024  	
-#define Version_sys 0x23060700  	
+#define Version_sys 0x23060800  	
 
 extern uint16_t Adc2_CalibrationValue ;
 extern uint16_t Adc3_CalibrationValue ;
@@ -98,13 +98,12 @@ void ModBus(void);
 #define ADDR_FLASH_PAGE_134   ((uint32_t)0x8043000)  // Flash扇区134页的起始地址     Adc3_Calibration    4-20mA
 #define ADDR_FLASH_PAGE_144   ((uint32_t)0x8048000)  // Flash扇区144页的起始地址      
   
-#define ADDR_UPDATE_FLAG               0x0807F078                          //2??    ???
-#define StartMode_Addr                 0x0807F07A                          //4??
+#define ADDR_UPDATE_FLAG               	 0x0807F078                     
+#define StartMode_Addr                	 0x0807F07A                       
 
-
-#define Application_Buffer_Addr       0x08040000
-#define ADD_UPDATE_PROG               0x08020000                          //APP2???    ???
-#define ADD_UPDATE_PROG1              0x08000000
+#define Application_Buffer_Addr      	 0x08040000
+#define ADD_UPDATE_PROG             	 0x08020000                          
+#define ADD_UPDATE_PROG1            	 0x08000000
 
 
 /* USER CODE END Private defines */

+ 6 - 29
Core/Src/Data_deal.c

@@ -175,15 +175,11 @@ void Switch_S32_to_ASCII(signed long data, unsigned char*str)
 *******************************************************************************/
 void S32_to_u8(signed long data,unsigned char*str)
 {
-// int i;
 	 str[0] = data>>24;
 	 str[1] = data>>16;
 	 str[2] = data>>8;
 	 str[3] = data;
-// for(i=3;i>0;i--)
-// {
-//    str[i]=(data>>(i*8))& 0xFF;
-// }
+
 }
 
 
@@ -475,8 +471,8 @@ uint16_t HEX2BCD(uint16_t hex)
 float MODBUS_ASCII_AsciiToFlaot(uint8_t *pbDest)
 {
 
-	  union Tmp floatTmp;
-	  unsigned char  data[8];
+	union Tmp floatTmp;
+	unsigned char  data[8];
     unsigned char i = 0;
     float temp_float_data = 0;
     for(i = 0; i < 4; i++)
@@ -646,22 +642,7 @@ void MODBUS_S8_to_ASCII(int8_t data8 ,uint8_t *pAsciiBuf )
 	}
 }
 
-////将一个8位数高低4位交换 
-//static inline unsigned char bswap_8(unsigned char v)
-//{	
-//	return ((v & 0xff) << 4) | (v >> 4) ;   //将参数(v & 0xff) << 4 相当于放到高位, v >> 4 位相当于放在低位
-//}                                               //以下两个代码分析雷同
-////将一个16位数高低8位交换 
-//static inline unsigned short bswap_16(unsigned short v)
-//{
-//	return ((v & 0xff) << 8) | (v >> 8);
-//}
-////将一个32位数高低16位交换 
-//static inline unsigned int bswap_32(unsigned int v)
-//{
-//	return ((v & 0xff) << 24) | ((v & 0xff00) << 8) |
-//		((v & 0xff0000) >> 8) | (v >> 24);
-//}
+
 
 /*******************************************************************************
 * Function Name  : CRC16
@@ -692,7 +673,6 @@ uint16_t CRC16(unsigned char *pBuf,int nLength)
 		}
 	}
 		return	((wReturn & 0xff) << 8) | (wReturn >> 8);//高低互换
-//	 return wReturn;
 }
 
 
@@ -744,9 +724,6 @@ uint16_t Key_CRC16(const unsigned char* pDataIn, const unsigned char iLenIn)
     }     
     return wResult;     
 } 
-// crcValue=CRC16(SendBuf,4);
-//    SendBuf[4]=(unsigned char)crcValue;
-//    SendBuf[5]=(unsigned char)(crcValue>>8);
 
 
 void InvertUint8(unsigned char *dBuf, unsigned char *srcBuf)
@@ -777,8 +754,8 @@ void InvertUint16(unsigned short *dBuf, unsigned short *srcBuf)
 unsigned short CRC16_MODBUS(unsigned char *puchMsg, unsigned int usDataLen)
 {
     int i;
-	  unsigned short temp;
-	  unsigned short temp1;
+	unsigned short temp;
+	unsigned short temp1;
     unsigned short wCRCin = 0xFFFF;
     unsigned short wCPoly = 0x8005;
     unsigned char wChar = 0;

+ 44 - 69
Core/Src/iap.c

@@ -164,53 +164,59 @@ void Start_BootLoader(void)
 	ModeStart |= ModeStart1[1];
 	switch (ModeStart) ///< 读取是否启动应用程序 */
 	{
-	case Startup_Normal: ///< 正常启动 */   //在APP2中可以设定此标志位   使得下次重启之后进入APP1
-	{
-		;
-		break;
-	}
-	case Startup_Update: /*启动最新的程序 */
-		HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
-		for (i = 0, all_len = 0; i < 4; ++i)
+		case Startup_Normal: ///< 正常启动 */   //在APP2中可以设定此标志位   使得下次重启之后进入APP1
 		{
-				all_len = all_len << 8;
-				all_len |= *(unsigned char *)(StartMode_Addr + 68 + i);
+			;
+			break;
 		}
-		if (App2_MD5_Check(Application_Buffer_Addr,all_len))
+		case Startup_Update: /*启动最新的程序 */
+			HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
+			for (i = 0, all_len = 0; i < 4; ++i)
+			{
+					all_len = all_len << 8;
+					all_len |= *(unsigned char *)(StartMode_Addr + 68 + i);
+			}
+			if (App2_MD5_Check(Application_Buffer_Addr,all_len))
 			{
 				iap_write_appbin(ADD_UPDATE_PROG,(uint8_t *)Application_Buffer_Addr,all_len);
 				HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
 				Flash_WriteBytes((uint16_t*)(StartMode_Addr + 68), StartMode_Addr+132, 2);
 			}
 			Set_App2_Flag();
-	case Startup_APP2: /*启动最新的程序 */
-		for (i = 0, all_len = 0; i < 4; ++i)
-			{
-				all_len = all_len << 8;
-				all_len |= *(unsigned char *)(StartMode_Addr + 132 + i);
-			}
-			if ((all_len<0x20000) && App2_MD5_Check(ADD_UPDATE_PROG,all_len))
-			{
-				__set_FAULTMASK(0);			   //先关闭全局中断
-				iap_load_app(ADD_UPDATE_PROG); //执行FLASH APP2代码
-			}
-		break;
-	default: ///< 启动失败
-	{
-		return;
-	}
+		case Startup_APP2: /*启动最新的程序 */
+			for (i = 0, all_len = 0; i < 4; ++i)
+				{
+					all_len = all_len << 8;
+					all_len |= *(unsigned char *)(StartMode_Addr + 132 + i);
+				}
+				if ((all_len<0x20000) && App2_MD5_Check(ADD_UPDATE_PROG,all_len))
+				{
+					__set_FAULTMASK(0);			   //先关闭全局中断
+					iap_load_app(ADD_UPDATE_PROG); //执行FLASH APP2代码
+				}
+			break;
+		default: ///< 启动失败
+		{
+			return;
+		}
 	}
 }
 
-
-uint8_t YmodemID;
-uint16_t packIndex, packTotalNum, packIndexbak; //当前包号,总包数
-uint16_t crcIAP, crcTerminal, crcIAP1;
+uint8_t YmodemID	  = 0;
+uint16_t packIndex 	  = 0;
+uint16_t packTotalNum = 0;
+uint16_t packIndexbak = 0; //当前包号,总包数
+uint16_t crcIAP;
+uint16_t crcIAP1;
+uint16_t crcTerminal;
+uint16_t FileBuffArray[512]  = {0};  // MD5校验
+uint16_t FileBuffArray1[512] = {0}; // MD5校验
 uint32_t FileLength_IAP = 0;  //文件长度
-uint16_t FileBuffArray[512];  // MD5校验
-uint16_t FileBuffArray1[512]; // MD5校验
 uint32_t AddrToWrite = Application_Buffer_Addr;
-uint32_t DataReadFlash, DataReadFlash1, update_flag;
+uint32_t DataReadFlash;
+uint32_t DataReadFlash1;
+uint32_t update_flag;
+
 void Set_Update_Down(void)
 {
 	uint16_t update_flag1[2];
@@ -287,7 +293,6 @@ void Process_CMD_IAP_Update(void)
 					HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
 					Flash_WriteBytes(FileBuffArray, StartMode_Addr + 4, 44);
 					HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
-					delay_sys_us(80);
 					packIndexbak = 0;
 					AddrToWrite = Application_Buffer_Addr;
 					HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
@@ -305,16 +310,12 @@ void Process_CMD_IAP_Update(void)
 						USART2_RX_BUF002[i] = 0;
 					}
 					txLen = sprintf((char *)FileBuffArray, "file=%d\r\n", packIndexbak);
-//					HAL_GPIO_WritePin(GPIOA, con03_uart2_kongzhiqi_Pin, GPIO_PIN_RESET); //
 					delay_sys_us(80);
 					HAL_UART_Transmit_IT(&huart1,(unsigned char *)FileBuffArray,txLen);		
 					while (huart1.gState == HAL_UART_STATE_BUSY_TX)
 					{
 						HAL_Delay(1);
 					}
-					delay_sys_us(80);
-					delay_sys_us(80);
-//					HAL_GPIO_WritePin(GPIOA, con03_uart2_kongzhiqi_Pin, GPIO_PIN_SET); //
 				}
 			}
 			else
@@ -323,18 +324,14 @@ void Process_CMD_IAP_Update(void)
 				{
 					USART2_RX_BUF002[i] = 0;
 				}
-//				HAL_GPIO_WritePin(GPIOA, con03_uart2_kongzhiqi_Pin, GPIO_PIN_RESET); //
-				delay_sys_us(80);
 				HAL_UART_Transmit(&huart1, ERR_Arr, strlen((char *)ERR_Arr), 100);
-				delay_sys_us(80);
-//				HAL_GPIO_WritePin(GPIOA, con03_uart2_kongzhiqi_Pin, GPIO_PIN_SET); //
-				__NOP();
+				
 			}
-			__NOP();
+			
 		}
 		else
 		{
-			__NOP();
+			
 		}
 		break;
 	case 0x02:														//有效载荷帧数据处理
@@ -379,7 +376,7 @@ void Process_CMD_IAP_Update(void)
 			}
 			if (DataReadFlash == DataReadFlash1)
 			{
-				__NOP();
+				
 				HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
 				packIndexbak = packIndex;
 			}
@@ -391,29 +388,20 @@ void Process_CMD_IAP_Update(void)
 					USART2_RX_BUF002[i] = 0;
 				}
 				txLen = sprintf((char *)USART2_RX_BUF002, "%s=%d\r\n", ACK_Arr, packIndex);
-//				HAL_GPIO_WritePin(GPIOA, con03_uart2_kongzhiqi_Pin, GPIO_PIN_RESET); //
-				delay_sys_us(80);
 				HAL_UART_Transmit_IT(&huart1,USART2_RX_BUF002,txLen);		
 				while (huart1.gState == HAL_UART_STATE_BUSY_TX)
 				{
 					delay_sys_us(1);
 				}
-//				HAL_GPIO_WritePin(GPIOA, con03_uart2_kongzhiqi_Pin, GPIO_PIN_SET); //
 			}
-			__NOP();
 		}
 		else
 		{
-//			HAL_GPIO_WritePin(GPIOA, con03_uart2_kongzhiqi_Pin, GPIO_PIN_RESET); //
 			delay_sys_us(80);
 			HAL_UART_Transmit(&huart1, ERR_Arr, strlen((char *)ERR_Arr), 100);
-			delay_sys_us(80);
-//			HAL_GPIO_WritePin(GPIOA, con03_uart2_kongzhiqi_Pin, GPIO_PIN_SET); //
-			__NOP();
 		}
 		break;
 	case 3:
-		//	if(packIndex>2)
 		{														 //结束帧处理
 			int i,all_len;
 			crcIAP1 = LIB_CRC_MODBUS(&USART2_RX_BUF002[4], 133); //
@@ -421,15 +409,12 @@ void Process_CMD_IAP_Update(void)
 			if (crcIAP1 == crcTerminal)
 			{
 				int txLen;
-//				HAL_GPIO_WritePin(GPIOA, con03_uart2_kongzhiqi_Pin, GPIO_PIN_RESET); //
-				delay_sys_us(80);
 				txLen = sprintf((char *)USART2_RX_BUF002, "%s\r\n", ACK_Arr);
 				HAL_UART_Transmit_IT(&huart1,USART2_RX_BUF002,txLen);		
 				while (huart1.gState == HAL_UART_STATE_BUSY_TX)
 				{
 					delay_sys_us(1);
 				}
-//				HAL_GPIO_WritePin(GPIOA, con03_uart2_kongzhiqi_Pin, GPIO_PIN_SET); //
 				for (i = 0, all_len = 0; i < 4; ++i)
 				{
 					all_len = all_len << 8;
@@ -438,39 +423,29 @@ void Process_CMD_IAP_Update(void)
 			if (1)//App2_MD5_Check(Application_Buffer_Addr,all_len))
 			{
 				txLen = sprintf((char *)USART2_RX_BUF002, "md5 check=ok\r\n");
-//				HAL_GPIO_WritePin(GPIOA, con03_uart2_kongzhiqi_Pin, GPIO_PIN_RESET); //
 				delay_sys_us(80);
 				HAL_UART_Transmit_IT(&huart1,USART2_RX_BUF002,txLen);		
 				while (huart1.gState == HAL_UART_STATE_BUSY_TX)
 				{
 					delay_sys_us(1);
 				}
-//				HAL_GPIO_WritePin(GPIOA, con03_uart2_kongzhiqi_Pin, GPIO_PIN_SET); //
 				Set_Update_Down(); //设定标志位  下次启动时进行程序拷贝
 			}
 			else
 			{
 				txLen = sprintf((char *)USART2_RX_BUF002,"md5 check=error\r\n");
 			}
-//				HAL_GPIO_WritePin(GPIOA, con03_uart2_kongzhiqi_Pin, GPIO_PIN_RESET); //
-				delay_sys_us(80);
 				HAL_UART_Transmit_IT(&huart1,USART2_RX_BUF002,txLen);		
 				while (huart1.gState == HAL_UART_STATE_BUSY_TX)
 				{
 					delay_sys_us(1);
 				}
-//				HAL_GPIO_WritePin(GPIOA, con03_uart2_kongzhiqi_Pin, GPIO_PIN_SET); //
 			}
 			else
 			{
-//				HAL_GPIO_WritePin(GPIOA, con03_uart2_kongzhiqi_Pin, GPIO_PIN_RESET); //
 				delay_sys_us(80);
 				HAL_UART_Transmit(&huart1, ERR_Arr, strlen((char *)ERR_Arr), 100);
-				delay_sys_us(80);
-//				HAL_GPIO_WritePin(GPIOA, con03_uart2_kongzhiqi_Pin, GPIO_PIN_SET); //
-				__NOP();
 			}
-			__NOP();
 		}
 		break;
 	default:

+ 32 - 86
Core/Src/main.c

@@ -46,29 +46,29 @@
 /* Private variables ---------------------------------------------------------*/
 
 /* USER CODE BEGIN PV */
-uint8_t data_to_send[50];
-uint16_t CRC_value = 0;
+
+int spr000;
+uint8_t  data_to_send[50];
+uint16_t CRC_value 		 = 0;
 uint16_t initial_address = 0x00C1;
-uint32_t System_version  = Version_sys;
-uint16_t BaudrateValue = 0x0000;
+uint16_t BaudrateValue 	 = 0x0000;
 uint16_t Adc2_CalibrationValue ;
 uint16_t Adc3_CalibrationValue ;
+uint32_t System_version  = Version_sys;
 
-uint8_t		Rx_Flag = 0;
-uint16_t	Rx_Len = 0;
-uint8_t		Rx_Buf[Rx_Max] = {0};	
-uint8_t gpioaStatus = 0;
-uint8_t gpiobStatus = 0;
+uint8_t	 Rx_Flag 		= 0;
+uint8_t  gpioaStatus 	= 0;
+uint8_t  gpiobStatus 	= 0;
+uint8_t  bufMain[128] 	= {0};
+uint8_t	 Rx_Buf[Rx_Max] = {0};	
+uint16_t Rx_Len = 0;
 
-uint8_t bufMain[128];
-int spr000;
 /* USER CODE END PV */
 
 /* Private function prototypes -----------------------------------------------*/
 void SystemClock_Config(void);
 /* USER CODE BEGIN PFP */
 #ifdef iap_
-
 typedef struct _T2C_RemoteCaliData
 {
 	uint16_t   FrameHead;   		//帧头 0-1
@@ -94,9 +94,7 @@ typedef struct{
 	uint8_t data_buf[70];          //下发数据缓存 
 }KZQ_Inf;
 #define 	ADDR_Is_In_ElecFence	0x05D0	//	1488		车是否在电子围栏内
-
-
-
+ 
  sT2C_RemoteCaliDat T2C_RemoteCaliDat001  =
 {
  
@@ -105,28 +103,33 @@ typedef struct{
 	0x0003,
 	ADDR_Is_In_ElecFence,//0x0000,
 	0x0001,        //操作的数据个数
-	0x55aa55aa,    //保留字4字节
+	0x55AA55AA,    //保留字4字节
 	{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,\
 	25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44},
 	0x7788,//保留字2字节
-	0x99aa   //校验2字节
+	0x99AA   //校验2字节
 };
 sT2C_RemoteCaliDat *pT2C_RemoteCaliData = &T2C_RemoteCaliDat001; 
 
 	uint8_t CMD_KZQ[256] =
 	{0x39,0x01,0x95,0x50,0x00,0x01,0x00,0x03,
-	0x00,0x00,0x00,0x00,0x95,0x05,0xaa,0xaa,
-	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	 0x00,0x00,0x00,0x00,0x95,0x05,0xAA,0xAA,
+	 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 	};
 	int flagU2Rx=0;
 	int data_lengthU2;
 	uint8_t* ptx = CMD_KZQ;   
-	uint16_t ModbusCRC = 0,SetSuccess = 0,ModbusCRC1 = 0,SetSuccess1 = 0,SetSuccess2=0,SetSuccess3=0;                 
+	uint16_t ModbusCRC   = 0;
+	uint16_t SetSuccess  = 0;
+	uint16_t ModbusCRC1  = 0;
+	uint16_t SetSuccess1 = 0;
+	uint16_t SetSuccess2 = 0;
+	uint16_t SetSuccess3 = 0;                 
 
 	int i000;
 	uint8_t* send_ptr;
@@ -209,9 +212,8 @@ int main(void)
   update_baudrate(read_flash_16(ADDR_FLASH_PAGE_114));
   AdcCalibration_init();
   
-  
-  spr000=sprintf((char*)bufMain,"system reset...%5d",5);
-  HAL_UART_Transmit(&huart1,bufMain,spr000,300);
+  spr000 = sprintf((char*)bufMain, "system reboot...");
+  HAL_UART_Transmit(&huart1, bufMain, spr000, 300);
   
   HAL_UART_Receive_DMA(&huart1,USART2_RX_BUF,Uart2_BUF_SIZE); 
   __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE); 
@@ -223,10 +225,9 @@ int main(void)
   { 
 	ModBus();
 	#ifdef iap_
-	 if (flagU2Rx == 1 && (USART2_RX_BUF002[0] == 0xa5) && (USART2_RX_BUF002[1] == 0x5a))
-	{
+	if (flagU2Rx == 1) {
 		flagU2Rx = 0;
-		if ((data_lengthU2 > 300) || ((USART2_RX_BUF002[0] == 0xa5) && (USART2_RX_BUF002[1] == 0x5a)))
+		if ((data_lengthU2 > 300) || ((USART2_RX_BUF002[0] == 0xA5) && (USART2_RX_BUF002[1] == 0x5A)))
 		{
 			tmpU32 = (USART2_RX_BUF002[0] << 24) | (USART2_RX_BUF002[1] << 16) | (USART2_RX_BUF002[2] << 8) | (USART2_RX_BUF002[3]);
 			if (StartBytes_IAP == tmpU32)
@@ -235,37 +236,6 @@ int main(void)
 				continue;
 			}
 		}
-		// KZQ_RTerror = 0;
-		// ASC转换为16进制,收到数据为:3901开头的数据总长度131字节
-		if ((USART2_RX_BUF002[0] == 0x3A) && (USART2_RX_BUF002[1] == 0x33) && (USART2_RX_BUF002[2] == 0x39) && (USART2_RX_BUF002[3] == 0x30)) //判断帧头
-		{
-			if (data_lengthU2 != 131)
-			{
-				++KZQ_RTerror;
-				continue;
-			}
-			for (i000 = 0; i000 < (data_lengthU2 - 3) / 2; i000++)
-			{
-				T2C_RemoteCaliDat001.PayLoadData[i000] = MODBUS_ASCII_AsciiToHex(USART2_RX_BUF002 + 1 + 0 + i000 * 2);
-
-				USART2_RX_BUF003[i000] = MODBUS_ASCII_AsciiToHex(USART2_RX_BUF002 + 1 + 0 + i000 * 2);
-			}
-			//解析后的数据拷贝过来
-			memcpy(USART2_RX_BUF002, USART2_RX_BUF003, (data_lengthU2 - 3) / 2);
-			data_lengthU2 = (data_lengthU2 - 3) / 2;
-		}
-		if (data_lengthU2 < 5)
-			continue;
-		ModbusCRC = USART2_RX_BUF002[data_lengthU2 - 1] << 8;
-		ModbusCRC |= USART2_RX_BUF002[data_lengthU2 - 2];
-		ModbusCRC1 = LIB_CRC_MODBUS(USART2_RX_BUF002, data_lengthU2 - 2);
-
-		if ((USART2_RX_BUF002[0] != 0x39) && (USART2_RX_BUF002[1] <= 0x01) && (USART2_RX_BUF002[2] <= 0x95) && (USART2_RX_BUF002[3] <= 0x50)) //判断帧头
-		{
-			RstCPU();
-		}
-
-		
 	}
 #endif
 	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
@@ -441,10 +411,8 @@ void delay_sys_us(uint32_t Delay)//1
 
 
 void ModBus(void) {
-	
 	if (Rx_Flag == 1 && (calculate_crc(Rx_Buf,6) == (Rx_Buf[7] << 8 | Rx_Buf[6])) && data_lengthU2 < 10) {		
 		if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x01 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x01){
-			
 			uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x02, 0x00, gpioaStatus, 0x00, 0x00};
 			uint16_t CRC_value = calculate_crc(data_to_send, 5);
 			data_to_send[5] = (uint8_t)(CRC_value & 0xFF);
@@ -458,7 +426,6 @@ void ModBus(void) {
 		}
 
 		else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x02 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x01){
-
 			uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x02, 0x00, gpiobStatus, 0x00, 0x00};
 			uint16_t CRC_value = calculate_crc(data_to_send, 5);
 			data_to_send[5] = (uint8_t)(CRC_value & 0xFF);
@@ -472,7 +439,6 @@ void ModBus(void) {
 		}
 				
 		else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x03 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x01){	
-
 			uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x02, adc2_byte1, adc2_byte2, 0x00, 0x00};
 			uint16_t CRC_value = calculate_crc(data_to_send, 5);
 			data_to_send[5] = (uint8_t)(CRC_value & 0xFF);
@@ -486,7 +452,6 @@ void ModBus(void) {
 		}
 				
 		else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x04 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x01){
-
 			uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x02, adc3_byte1, adc3_byte2, 0x00, 0x00};
 			uint16_t CRC_value = calculate_crc(data_to_send, 5);
 			data_to_send[5] = (uint8_t)(CRC_value & 0xFF);
@@ -500,7 +465,6 @@ void ModBus(void) {
 		}
 				
 		else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x05 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x01){
-
 			uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x02, adc1_byte1, adc1_byte2, 0x00, 0x00};
 			uint16_t CRC_value = calculate_crc(data_to_send, 5);
 			data_to_send[5] = (uint8_t)(CRC_value & 0xFF);
@@ -514,7 +478,6 @@ void ModBus(void) {
 		}
 
 		else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x01 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x02){
-
 			uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x04, 0x00, gpioaStatus, 0x00, gpiobStatus, 0x00, 0x00};
 			uint16_t CRC_value = calculate_crc(data_to_send, 7);
 			data_to_send[7] = (uint8_t)(CRC_value & 0xFF);
@@ -528,7 +491,6 @@ void ModBus(void) {
 		}
 		
 		else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x01 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x03){
-
 			uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x06, 0x00, gpioaStatus, 0x00, gpiobStatus, adc2_byte1, adc2_byte2, 0x00, 0x00};
 			uint16_t CRC_value = calculate_crc(data_to_send, 9);
 			data_to_send[9] = (uint8_t)(CRC_value & 0xFF);
@@ -542,7 +504,6 @@ void ModBus(void) {
 		}
 
 		else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x01 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x04){
-
 			uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x08, 0x00, gpioaStatus, 0x00, gpiobStatus, adc2_byte1, adc2_byte2, adc3_byte1, adc3_byte2, 0x00, 0x00};
 			uint16_t CRC_value = calculate_crc(data_to_send, 11);
 			data_to_send[11] = (uint8_t)(CRC_value & 0xFF);
@@ -556,7 +517,6 @@ void ModBus(void) {
 		}
 				
 		else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x01 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x05){
-
 			uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x0A, 0x00, gpioaStatus, 0x00, gpiobStatus, adc2_byte1, adc2_byte2, adc3_byte1, adc3_byte2, adc1_byte1, adc1_byte2, 0x00, 0x00};
 			uint16_t CRC_value = calculate_crc(data_to_send, 13);
 			data_to_send[13] = (uint8_t)(CRC_value & 0xFF);
@@ -570,7 +530,6 @@ void ModBus(void) {
 		}  
 		
 		else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x02 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x02){
-
 			uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x04, 0x00, gpiobStatus, adc2_byte1, adc2_byte2, 0x00, 0x00};
 			uint16_t CRC_value = calculate_crc(data_to_send, 7);
 			data_to_send[7] = (uint8_t)(CRC_value & 0xFF);
@@ -584,7 +543,6 @@ void ModBus(void) {
 		}  
 
 		else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x02 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x03){
-
 			uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x06, 0x00, gpiobStatus, adc2_byte1, adc2_byte2, adc3_byte1, adc3_byte2, 0x00, 0x00};
 			uint16_t CRC_value = calculate_crc(data_to_send, 9);
 			data_to_send[9] = (uint8_t)(CRC_value & 0xFF);
@@ -598,7 +556,6 @@ void ModBus(void) {
 		}  
 		
 		else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x02 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x04){
-
 			uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x08, 0x00, gpiobStatus, adc2_byte1, adc2_byte2, adc3_byte1, adc3_byte2, adc1_byte1, adc1_byte2, 0x00, 0x00};
 			uint16_t CRC_value = calculate_crc(data_to_send, 11);
 			data_to_send[11] = (uint8_t)(CRC_value & 0xFF);
@@ -612,7 +569,6 @@ void ModBus(void) {
 		}       
 				
 		else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x03 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x02){
-
 			uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x04, adc2_byte1, adc2_byte2, adc3_byte1, adc3_byte2, 0x00, 0x00};
 			uint16_t CRC_value = calculate_crc(data_to_send, 7);
 			data_to_send[7] = (uint8_t)(CRC_value & 0xFF);
@@ -626,7 +582,6 @@ void ModBus(void) {
 		}  
 		
 		else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x03 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x03){
-
 			uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x06, adc2_byte1, adc2_byte2, adc3_byte1, adc3_byte2, adc1_byte1, adc1_byte2, 0x00, 0x00};
 			uint16_t CRC_value = calculate_crc(data_to_send, 9);
 			data_to_send[9] = (uint8_t)(CRC_value & 0xFF);
@@ -640,7 +595,6 @@ void ModBus(void) {
 		} 
 
 		else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x04 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x02){
-
 			uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x04, adc3_byte1, adc3_byte2, adc1_byte1, adc1_byte2, 0x00, 0x00};
 			uint16_t CRC_value = calculate_crc(data_to_send, 7);
 			data_to_send[7] = (uint8_t)(CRC_value & 0xFF);
@@ -654,7 +608,6 @@ void ModBus(void) {
 		}   
 		
 		else if(Rx_Buf[0] == 0xFA && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0xAA && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x01){
-
 			uint8_t data_to_send[] = {0xFA, 0x03, 0x02, 0x00, (uint8_t)initial_address, 0x00, 0x00};
 			uint16_t CRC_value = calculate_crc(data_to_send, 5);
 			data_to_send[5] = (uint8_t)(CRC_value & 0xFF);
@@ -668,7 +621,6 @@ void ModBus(void) {
 		} 
 		
 		else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0xBB && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x02){
-
 			uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x04, (uint8_t)(System_version >> 24), (uint8_t)(System_version >> 16), (uint8_t)(System_version >> 8), (uint8_t)(System_version ), 0x00, 0x00};
 			uint16_t CRC_value = calculate_crc(data_to_send, 7);
 			data_to_send[7] = (uint8_t)(CRC_value & 0xFF);
@@ -682,7 +634,6 @@ void ModBus(void) {
 		}
 
 		else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x06 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x02 && Rx_Buf[4] == 0x00){
-
 			updatePbStatus(Rx_Buf[5]);
 			Write_Information(ADDR_FLASH_PAGE_104, Rx_Buf, 5);  // 写入Flash
 			uint8_t data_to_send[] = {(uint8_t)initial_address, 0x06, 0x02, 0x00, Rx_Buf[5], 0x00, 0x00};
@@ -697,7 +648,6 @@ void ModBus(void) {
 			HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE); 
 		} 
 		else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x06 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x0A && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x01){
-
 			Write_Information(ADDR_FLASH_PAGE_124, Rx_Buf, 0);
 			uint16_t now_calibrationValue = Adc2_CalibrationValue;
 			uint8_t data_to_send[] = {(uint8_t)initial_address, 0x06, 0x02, (uint8_t)((now_calibrationValue >> 8) & 0xFF), (uint8_t)(now_calibrationValue & 0xFF), 0x00, 0x00};
@@ -713,7 +663,6 @@ void ModBus(void) {
 		}    
 				
 		else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x06 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x0B && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x01){
-
 			Write_Information(ADDR_FLASH_PAGE_134, Rx_Buf, 0);
 			uint16_t now_calibrationValue = Adc3_CalibrationValue;
 			uint8_t data_to_send[] = {(uint8_t)initial_address, 0x06, 0x02, (uint8_t)((now_calibrationValue >> 8) & 0xFF), (uint8_t)(now_calibrationValue & 0xFF), 0x00, 0x00};
@@ -729,7 +678,6 @@ void ModBus(void) {
 		}   
 		
 		else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x06 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x0C && Rx_Buf[4] == 0x00){
-
 			update_baudrate(Rx_Buf[5]);
 			Write_Information(ADDR_FLASH_PAGE_114, Rx_Buf, 5);  // 写入Flash
 			uint8_t data_to_send[] = {(uint8_t)initial_address, 0x06, 0x00, 0x0C, 0x00, Rx_Buf[5], 0x00, 0x00};
@@ -745,7 +693,6 @@ void ModBus(void) {
 		}  
 		
 		else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x06 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0xAA && Rx_Buf[4] == 0x00){
-
 			Write_Information(ADDR_FLASH_PAGE_94, Rx_Buf, 5);  // 写入Flash
 			uint8_t data_to_send[] = {(uint8_t)initial_address, 0x06, 0x02, 0x00, (uint8_t)initial_address, 0x00, 0x00};
 			uint16_t CRC_value = calculate_crc(data_to_send, 5);
@@ -773,7 +720,6 @@ void ModBus(void) {
 			HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE); 
 		}
 	}
-	
 }
 /* USER CODE END 4 */
 

+ 0 - 2
Core/Src/md5c.c

@@ -1,4 +1,3 @@
-
 #include "md5c.h" 
 #include <string.h> 
 #include <stdio.h> 
@@ -6,7 +5,6 @@
 /* Constants for MD5Transform routine. 
 */ 
  
- 
 #define S11 7 
 #define S12 12 
 #define S13 17 

+ 1 - 2
Core/Src/stm32f1xx_it.c

@@ -255,14 +255,13 @@ void TIM2_IRQHandler(void)
 void USART1_IRQHandler(void)
 {
   /* USER CODE BEGIN USART1_IRQn 0 */
-
 	if(RESET != __HAL_UART_GET_FLAG(&huart1, UART_FLAG_IDLE))   //判断是否是空闲中断
 	{
 		__HAL_UART_CLEAR_IDLEFLAG(&huart1);                     //清楚空闲中断标志(否则会一直不断进入中断)
 		HAL_UART_DMAStop(&huart1);  
 		data_lengthU2  = Uart2_BUF_SIZE - hdma_usart1_rx.Instance->CNDTR;
-		memcpy(USART2_RX_BUF002,USART2_RX_BUF,data_lengthU2);	
 		
+		memcpy(USART2_RX_BUF002,USART2_RX_BUF,data_lengthU2);	
 		memcpy(Rx_Buf,USART2_RX_BUF,data_lengthU2);	
 		
 		HAL_UART_Receive_DMA(&huart1,USART2_RX_BUF,Uart2_BUF_SIZE); 

+ 0 - 1
Core/Src/usart.c

@@ -21,7 +21,6 @@
 #include "usart.h"
 
 /* USER CODE BEGIN 0 */
-
 static const char LIB_CRC_MODBUS_HI[] =
 {
     0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,

BIN
Doc/新版采集通讯模块的软件设计概要性方案.pdf


+ 0 - 36
MDK-ARM/DebugConfig/iocollect_STM32F103RE_1.0.0.dbgconf

@@ -1,36 +0,0 @@
-// File: STM32F101_102_103_105_107.dbgconf
-// Version: 1.0.0
-// Note: refer to STM32F101xx STM32F102xx STM32F103xx STM32F105xx STM32F107xx Reference manual (RM0008)
-//                STM32F101xx STM32F102xx STM32F103xx STM32F105xx STM32F107xx datasheets
-
-// <<< Use Configuration Wizard in Context Menu >>>
-
-// <h> Debug MCU configuration register (DBGMCU_CR)
-//                                   <i> Reserved bits must be kept at reset value
-//   <o.30> DBG_TIM11_STOP           <i> TIM11 counter stopped when core is halted
-//   <o.29> DBG_TIM10_STOP           <i> TIM10 counter stopped when core is halted
-//   <o.28> DBG_TIM9_STOP            <i> TIM9 counter stopped when core is halted
-//   <o.27> DBG_TIM14_STOP           <i> TIM14 counter stopped when core is halted
-//   <o.26> DBG_TIM13_STOP           <i> TIM13 counter stopped when core is halted
-//   <o.25> DBG_TIM12_STOP           <i> TIM12 counter stopped when core is halted
-//   <o.21> DBG_CAN2_STOP            <i> Debug CAN2 stopped when core is halted
-//   <o.20> DBG_TIM7_STOP            <i> TIM7 counter stopped when core is halted
-//   <o.19> DBG_TIM6_STOP            <i> TIM6 counter stopped when core is halted
-//   <o.18> DBG_TIM5_STOP            <i> TIM5 counter stopped when core is halted
-//   <o.17> DBG_TIM8_STOP            <i> TIM8 counter stopped when core is halted
-//   <o.16> DBG_I2C2_SMBUS_TIMEOUT   <i> SMBUS timeout mode stopped when core is halted
-//   <o.15> DBG_I2C1_SMBUS_TIMEOUT   <i> SMBUS timeout mode stopped when core is halted
-//   <o.14> DBG_CAN1_STOP            <i> Debug CAN1 stopped when Core is halted
-//   <o.13> DBG_TIM4_STOP            <i> TIM4 counter stopped when core is halted
-//   <o.12> DBG_TIM3_STOP            <i> TIM3 counter stopped when core is halted
-//   <o.11> DBG_TIM2_STOP            <i> TIM2 counter stopped when core is halted
-//   <o.10> DBG_TIM1_STOP            <i> TIM1 counter stopped when core is halted
-//   <o.9>  DBG_WWDG_STOP            <i> Debug window watchdog stopped when core is halted
-//   <o.8>  DBG_IWDG_STOP            <i> Debug independent watchdog stopped when core is halted
-//   <o.2>  DBG_STANDBY              <i> Debug standby mode
-//   <o.1>  DBG_STOP                 <i> Debug stop mode
-//   <o.0>  DBG_SLEEP                <i> Debug sleep mode
-// </h>
-DbgMCU_CR = 0x00000007;
-
-// <<< end of configuration section >>>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 179 - 1911
MDK-ARM/iocollect.uvguix.Administrator


+ 1 - 1
MDK-ARM/iocollect.uvoptx

@@ -140,7 +140,7 @@
         <SetRegEntry>
           <Number>0</Number>
           <Key>JL2CM3</Key>
-          <Name>-U69618568 -O76 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO27 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F103RE$Flash\STM32F10x_512.FLM)</Name>
+          <Name>-U69618568 -O76 -S5 -ZTIFSpeedSel1000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO31 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F103RE$Flash\STM32F10x_512.FLM)</Name>
         </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>

+ 2 - 2
MDK-ARM/iocollect.uvprojx

@@ -49,7 +49,7 @@
             <InvalidFlash>1</InvalidFlash>
           </TargetStatus>
           <OutputDirectory>..\Output\</OutputDirectory>
-          <OutputName>A_iocollect_230607</OutputName>
+          <OutputName>iocollect_230608</OutputName>
           <CreateExecutable>1</CreateExecutable>
           <CreateLib>0</CreateLib>
           <CreateHexFile>1</CreateHexFile>
@@ -82,7 +82,7 @@
           <AfterMake>
             <RunUserProg1>1</RunUserProg1>
             <RunUserProg2>0</RunUserProg2>
-            <UserProg1Name>fromelf.exe --bin --output ..\Output\A_iocollect_230607.bin ..\Output\*.axf</UserProg1Name>
+            <UserProg1Name>fromelf.exe --bin --output ..\Output\iocollect_230608.bin ..\Output\*.axf</UserProg1Name>
             <UserProg2Name></UserProg2Name>
             <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
             <UserProg2Dos16Mode>0</UserProg2Dos16Mode>

+ 6 - 3
readme.md

@@ -1,6 +1,7 @@
 # iocollect 
-
+---
 [http://192.168.0.139:3000/xuy/iocollect](http://192.168.0.139:3000/xuy/iocollect "远程仓库")
+---
 ### function_v1.0:
 **Function**
 > ######<u>Created on 2023/5/5 </u>
@@ -19,10 +20,12 @@
 > #####Software modification baud rate; 
 > ######<u>Updated on 6/5/2023 11:18:02 AM  </u>
 > #####Add DMA receive statement; 
+ 
+---
 ### function_v1.2: 
 **Add Function**
 > ######<u>Updated on 6/7/2023 2:10:31 PM   </u>
-> #####Add IAP(In Application Programming); 
-
+> #####Add IAP(In Application Programming); (tips:更新文件要更换IR_ROM1地址(包括魔术棒和main.h),在output中要更新版本号)
+**hyperlink**:**[ASCII码转换网址](https://www.qqxiuzi.cn/bianma/ascii.htm "ASCII码转换网址")**(tips:1个ASCII码(2个数字)后要加一个英文逗号方可进行解析)