From 6e3f1f560d618b37ee1a47fa2b0f682b70c3ef1c Mon Sep 17 00:00:00 2001
From: jinlicong <493886250@qq.com>
Date: Wed, 19 Jun 2024 17:25:45 +0800
Subject: [PATCH] 增加OTA协议

---
 Function/FLOW_METER_DATA_COLLECT/rs485_read_data.c |   30 ++++++++++++++++++++----------
 1 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/Function/FLOW_METER_DATA_COLLECT/rs485_read_data.c b/Function/FLOW_METER_DATA_COLLECT/rs485_read_data.c
index bd13167..1e33468 100644
--- a/Function/FLOW_METER_DATA_COLLECT/rs485_read_data.c
+++ b/Function/FLOW_METER_DATA_COLLECT/rs485_read_data.c
@@ -5,6 +5,7 @@
 #include "gpio.h"
 #include "uart.h"
 #include "linked_list.h"
+#include "sizhu_alarm_record.h"
 
 /****�������˼·******************
 *RS485������Ʒ�Ϊ�ϵ硢���Ͷ�ȡָ��ȴ��������ݲ���������״̬�����裻����ʵ�ֵȴ���ʱ�жϺͶ���ض���
@@ -66,12 +67,12 @@
 void RS485_read_data_RX_DMA_check(void)
 {
 	uint16_t timeout_cnt = 0,dma_recv_cnt;
-	uint32_t dma_mar_reg_read = DMA_CHxMAR_Read(DMA_CH3);
+	uint32_t dma_mar_reg_read = DMA_CHxMAR_Read(RS485_READ_DATA_DMA_CHX);
 	
 	if(dma_mar_reg_read != (uint32)RS485_read_data_recv_buff){
 		delay_ms(2);
-		while(dma_mar_reg_read != DMA_CHxMAR_Read(DMA_CH3)){
-			dma_mar_reg_read = DMA_CHxMAR_Read(DMA_CH3);
+		while(dma_mar_reg_read != DMA_CHxMAR_Read(RS485_READ_DATA_DMA_CHX)){
+			dma_mar_reg_read = DMA_CHxMAR_Read(RS485_READ_DATA_DMA_CHX);
 			delay_ms(2);
 			if(timeout_cnt++ > 100)
 				break;	
@@ -83,6 +84,8 @@
 	dma_recv_cnt = dma_mar_reg_read - (uint32)RS485_read_data_recv_buff;
 	if(dma_recv_cnt)
 	{
+		if((dma_recv_cnt >= RS485_READ_DATA_RECV_BUFF_LEN_MAX)||(dma_recv_cnt >= WRC_REC_BUF_LENGTH))
+			return;
 		rs485_com_uart_data_g.recv_length = dma_recv_cnt;
 		arrayA_2_arrayB(RS485_read_data_recv_buff , rs485_com_uart_data_g.recv_buf, dma_recv_cnt, LITTLE_ENDIAN) ;
 		rs485_com_uart_data_g.recv_flag = SET;//�������
@@ -218,7 +221,7 @@
 	if(rs485_com_ctrl_pata_g.pwr_delay_time_out_cnt == 0)  //��ʱ��0�Ϳ��Է��Ͷ�ȡָ��
 	{		
 		//��������
-		RS485_UART_GPIO_Init();
+//		RS485_UART_GPIO_Init(); //uart_Init�Ѿ�������IO����
 		switch(flow_meter_para_g.baudrate_code ){
 			case BAUDRATE_1200:BaudRate = 1200; break;
 			case BAUDRATE_2400:BaudRate = 2400; break;
@@ -239,6 +242,7 @@
 		
 		RS485_read_data_uart_Init(BaudRate,ParityBit,OneBit);
 		RS485_read_data_RX_DMA_CH3_Init();
+		uart_ctrl_para_g.RS485_rxto_flag = RESET;
 		
 		RS485_PWR_ON;
 		delay_us(10);
@@ -246,6 +250,8 @@
 		rs485_com_ctrl_pata_g.reread_wait_time_cnt = RS485_REREAD_WATI_TIME; //���õȴ���Ӧʱ��
 		return RS485_COM_WAIT_ANSWER;
 	}
+	
+	return	RS485_COM_SEND;
 }
 
 
@@ -256,18 +262,22 @@
 	
 	ErrorStatus	read_ok = FAIL;
 	//��鴮������
-	RS485_read_data_RX_DMA_check();
-	
+	if(uart_ctrl_para_g.RS485_rxto_flag ==SET){
+		uart_ctrl_para_g.RS485_rxto_flag = RESET;
+		RS485_read_data_RX_DMA_check();
+	}
 	//��������,����ɹ���������read_ok = PASS
 	if(rs485_com_uart_data_g.recv_flag == SET){
 		rs485_com_uart_data_g.recv_flag =RESET;
 		
-		read_ok = rs485ComDataAnalysis(rs485_com_uart_data_g,SIZHUMODBUSV2_0,1,rs485_com_ctrl_pata_g ) ;//?�豸���롢�ӻ���ַ���Ҫ��
+		read_ok = rs485ComDataAnalysis(rs485_com_uart_data_g,SIZHUMODBUSV2_0,1,rs485_com_ctrl_pata_g ) ;
+		memset(rs485_com_uart_data_g.recv_buf, 0, sizeof(rs485_com_uart_data_g.recv_buf)); //Ӧ�������ս���
+
 	}
 	
 	if(read_ok==PASS){
 		if(rs485_com_ctrl_pata_g.modbus_step_status >= rs485_com_ctrl_pata_g.modbus_last_status)  {
-			//?����ͨѶȫ���ɹ���������Ӧ�Ĵ���
+			//����ͨѶȫ���ɹ���������Ӧ�Ĵ���
 			//�رյ�Դ���رմ���
 			RS485_PWR_OFF;
 			RS485_RE_REC_ENABLE;
@@ -289,7 +299,7 @@
 	
 	if((--rs485_com_ctrl_pata_g.reread_wait_time_cnt)==0){
 		if((--rs485_com_ctrl_pata_g.reread_num_cnt)==0){
-			//?��ʱ���ض��������꣬����ͨѶ������ʧ�ܸ��գ�������Ӧ�Ĵ���		
+			//��ʱ���ض��������꣬����ͨѶ������ʧ�ܸ��գ�������Ӧ�Ĵ���		
 			//�رյ�Դ���رմ��ڣ�RS485ͨѶʧ��+1,
 			RS485_PWR_OFF;
 			RS485_RE_REC_ENABLE;
@@ -344,4 +354,4 @@
 			RS485_trigger_settle_flag = SET; //RS485�ɼ�֮�󴥷�һ�ν���	
 		}		
 	}
-}
\ No newline at end of file
+}

--
Gitblit v1.9.3