From cf4d12fd8322cbb350dd3bc5af8c748e8790ac64 Mon Sep 17 00:00:00 2001
From: jinlicong <493886250@qq.com>
Date: Wed, 05 Jun 2024 17:38:06 +0800
Subject: [PATCH] 继续测试修改

---
 Function/UPPER_COMPUTER/upper_com.c |  108 +++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 98 insertions(+), 10 deletions(-)

diff --git a/Function/UPPER_COMPUTER/upper_com.c b/Function/UPPER_COMPUTER/upper_com.c
index 591778d..9657c0b 100644
--- a/Function/UPPER_COMPUTER/upper_com.c
+++ b/Function/UPPER_COMPUTER/upper_com.c
@@ -1,10 +1,11 @@
 #include "upper_com.h"
-#include "mbcrc.h"
+#include "mbcrc1.h"
 #include "system_general_para.h"
 #include "main.h"
 #include "system_mem_para.h"
 #include "uart.h"
 #include "upper_com_data_pro.h"
+#include "mb.h"
 
 UC_RECV_PARA_T  __attribute__ ((aligned (4))) uc_recv_para_g = {.uc_recv_flag = RESET};
 
@@ -18,6 +19,72 @@
 __IO static ErrorStatus_STM32 uc_rw_result_g = ERROR_1; //����
 
 static uint16_t local_random_code_g = 0;
+
+
+void	up_comm_uart_enable(void)
+{
+	uint32_t	BaudRate;
+	eMBParity	ParityBit;
+	UART_StopBitTypeDef		StopBit;
+	switch(up_comm_para_g.baudrate_code ){
+			case BAUDRATE_1200:BaudRate = 1200; break;
+			case BAUDRATE_2400:BaudRate = 2400; break;
+			case BAUDRATE_4800:BaudRate = 4800; break;
+			case BAUDRATE_9600:BaudRate = 9600; break;
+			case BAUDRATE_19200:BaudRate = 19200; break;		
+			case BAUDRATE_56000:BaudRate = 56000; break;
+			case BAUDRATE_57600:BaudRate = 57600; break;
+			case BAUDRATE_115200:BaudRate = 115200; break;
+			default:BaudRate = 9600; break;
+		}
+		switch(up_comm_para_g.parity_bit ){
+			case PARITY_NONE:ParityBit = MB_PAR_NONE; break;
+			case PARITY_ODD:ParityBit = MB_PAR_ODD; break;
+			case PARITY_EVEN:ParityBit = MB_PAR_EVEN; break;
+			default:ParityBit = MB_PAR_NONE; break;
+		}
+		
+//		RS485_read_data_uart_Init(BaudRate,ParityBit,OneBit);
+//		RS485_read_data_RX_DMA_CH3_Init();
+		
+		//��Ϊ��Ҫ����modbus�����Ը�Ϊ����modbus�еij�ʼ��
+		eMBInit( MB_RTU, up_comm_para_g.slave_address, 0, BaudRate, ParityBit);
+}
+
+
+
+
+
+void up_comm_RX_DMA_check(UC_RECV_PARA_T * uc_recv_para_p)
+{
+	uint16_t timeout_cnt = 0,dma_recv_cnt;
+	uint32_t dma_mar_reg_read = DMA_CHxMAR_Read(UP_COMM_DMA_CHX);
+	
+	if(dma_mar_reg_read != (uint32)up_comm_recv_buff){
+		delay_ms(2);
+		while(dma_mar_reg_read != DMA_CHxMAR_Read(UP_COMM_DMA_CHX)){
+			dma_mar_reg_read = DMA_CHxMAR_Read(UP_COMM_DMA_CHX);
+			delay_ms(2);
+			if(timeout_cnt++ > 100)
+				break;	
+		}
+	}
+	else
+		return ;
+	
+	dma_recv_cnt = dma_mar_reg_read - (uint32)up_comm_recv_buff;
+	if( (dma_recv_cnt>0)&&(dma_recv_cnt <= UP_COMM_RECV_BUFF_LEN_MAX))
+	{
+		if((dma_recv_cnt >= UP_COMM_RECV_BUFF_LEN_MAX) || (dma_recv_cnt >= UC_RECV_LEN_MAX) )
+			return;
+		
+		uc_recv_para_p->uc_recv_length = dma_recv_cnt;
+		arrayA_2_arrayB(up_comm_recv_buff , uc_recv_para_p->uc_recv_buf_union.uc_recv_buf, dma_recv_cnt, LITTLE_ENDIAN) ;
+		uc_recv_para_p->uc_recv_flag = SET;//�������
+	}
+
+}
+
 
 
 
@@ -82,7 +149,9 @@
 	uc_respond_data_p->uc_recv_buf[crc_len] = send_crc_check >> 8; //��λ
 	uc_respond_data_p->uc_recv_buf[crc_len + 1] = send_crc_check &0xff; 
 	
+	UP_COMM_RE_SEND_EN;
 	UC_SEND_NORMAL((uint8_t *)uc_respond_data_p,crc_len + 2);
+	UP_COMM_RE_RECV_EN;
 }
 
 
@@ -176,10 +245,12 @@
 
 void upperComPro(void)
 {
-	//?DMA���������ж�
+	//���������ж�
+	if(__SYS_STATUS_BYTES_GET(power_state) == SET){
+			up_comm_RX_DMA_check(&uc_recv_para_g); //�⹩���²Ŵ������
+	}
 	
-	
-	//֡��ʽ�����ж�
+	/*֡��ʽ�����жϣ��˴�����modbusЭ�飬��һ���ֽ������0x68������λ��Э�飬��0x68�ٽ���modbus����*/
 	if ((uc_recv_para_g.uc_recv_flag ==SET)&&(uc_recv_para_g.uc_recv_length > UC_PROTOCOL_HEAD_LENGTH )&&(uc_recv_para_g.uc_recv_buf_union.uc_protocol_head_s.frame_start_code == UC_FRAME_HEAD_CODE))
 	{
 		uint16_t ex_crc_len = uc_recv_para_g.uc_recv_length - 2;
@@ -213,7 +284,7 @@
 					if (uc_login_state_g == UC_OK && local_random_code_g == uc_recv_para_g.uc_recv_buf_union.uc_protocol_head_s.random_number)
 					{
 						Upper_ComputerReadWriteHandler(&uc_recv_para_g.uc_recv_buf_union,&uc_respond_data_g);
-						Upper_ComputerLoginRespond(&uc_respond_data_g);
+						Upper_ComputerRespond(&uc_respond_data_g);
 						__SYS_DELAY_SEC_TIME_SET_(UC_active_time,UC_ACTIVE_TIME);//���ü���ʱ��//���ü���ʱ��
 					}
 					break;
@@ -221,7 +292,7 @@
 					if (uc_login_state_g == UC_OK && local_random_code_g == uc_recv_para_g.uc_recv_buf_union.uc_protocol_head_s.random_number)
 					{
 						Upper_ComputerReadWriteHandler(&uc_recv_para_g.uc_recv_buf_union,&uc_respond_data_g);
-						Upper_ComputerLoginRespond(&uc_respond_data_g);
+						Upper_ComputerRespond(&uc_respond_data_g);
 						__SYS_DELAY_SEC_TIME_SET_(UC_active_time,UC_ACTIVE_TIME);//���ü���ʱ��//���ü���ʱ��
 					}
 					break;
@@ -244,19 +315,36 @@
 					break;
       }
 			
-			
-			
-			
 		}	
 	}
+	
+	//��λ����ʱ��������ʱ��û�н���ʱ�������ʧЧ����Ҫ���µ�����ܼ���ʹ��
+	if(__SYS_DELAY_SEC_FLAG_GET(UC_active_time) == SET){
+		__SYS_DELAY_SEC_FLAG_CLEAR_(UC_active_time);
+		
+		local_random_code_g = 0;
+	}
+	
+	
+	//����modbus����
+	if ((uc_recv_para_g.uc_recv_flag ==SET)&&(uc_recv_para_g.uc_recv_length > 7 )&&(uc_recv_para_g.uc_recv_buf_union.uc_recv_buf[0] != UC_FRAME_HEAD_CODE))
+	{
+		if(xMBRTUReceiveCheck( uc_recv_para_g.uc_recv_buf_union.uc_recv_buf,uc_recv_para_g.uc_recv_length ) == TRUE )	
+			eMBPoll();
+	}
+	
 	
 	if (uc_recv_para_g.uc_recv_flag ==SET)
 	{
 		uc_recv_para_g.uc_recv_flag = RESET;
 		//��������DMA����
-		memset(uc_recv_para_g.uc_recv_buf_union.uc_recv_buf, 0, uc_recv_para_g.uc_recv_length); //Ӧ�������ս���
+		memset(uc_recv_para_g.uc_recv_buf_union.uc_recv_buf, 0, sizeof(uc_recv_para_g.uc_recv_buf_union.uc_recv_buf)); //Ӧ�������ս���
+		up_comm_RX_DMA_CH2_reload();
 		
 	}
 	
+	
+
+	
 }
 

--
Gitblit v1.9.3