forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-05-22 66ea95dcb8fd91d29465c2f11ced4dd6153a2504
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,69 @@
__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)
   {
      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;//½ÓÊÕÍê³É
   }
}
@@ -35,7 +99,7 @@
   }
  
   
   //ÃÜÂëÑéÖ¤
   //?ÃÜÂëÑéÖ¤
   if(uc_recv_data_union_p->uc_protocol_head_s.uc_admin==UC_SUPPER_ADMIN)
   {
      //²»ÐèÒªÑéÖ¤ÃÜÂë
@@ -82,7 +146,7 @@
   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; 
   
   UARTx_SendData_Normal(UART0,(uint8_t *)uc_respond_data_p,crc_len + 2);
   UC_SEND_NORMAL((uint8_t *)uc_respond_data_p,crc_len + 2);
}
@@ -103,7 +167,7 @@
   {
      data_category_ID= BSWAP_16(uc_recv_data_union_p->uc_protocol_head_s.data_table_id);
      data_p = uc_recv_data_union_p->uc_recv_buf + UC_PROTOCOL_HEAD_LENGTH +sizeof (uc_recv_data_union_p->uc_protocol_head_s.data_table_id);
      switch(data_category_ID)
      switch(data_category_ID)//?ÐèÒªÍêÉÆ
         {
            case EQUIPMENT_BASIC_INF_ID : COM_equipment_basic_inf_handle(uc_recv_data_union_p->uc_protocol_head_s.cmd_code,data_category_ID,data_p,uc_respond_data_p) ;break;
//            case MAIN_EQUIPM_HARDWARE_SOFTWARE_INF_ID : COM_main_equipment_hardware_software_inf_handle(WriteOrRead,com_frame_receive_inf_in.data_category_ID,(DataPtr +2)) ;break;
@@ -176,10 +240,10 @@
void upperComPro(void)
{
   //DMA½ÓÊÕÊý¾ÝÅжÏ
   //½ÓÊÕÊý¾ÝÅжÏ
   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;
@@ -227,7 +291,7 @@
               break;
            case UC_CMD_GET_LOG_RECENT: //°´×î½ü
               break;
            case UC_CMD_GET_LOG_TIME: //°´Ê±¼ä
            case UC_CMD_GET_LOG_TIME: //?°´Ê±¼ä
//               if (uc_login_state_g == UC_OK && local_random_code_g == uc_rec_para_p->uc_recv_buf_union.uc_protocol_head_s.random_number)
//               {
//                  uc_rw_result_g = Upper_ComputerLogProcess(Upper_ComputerPermissionsGet(uc_rec_para_p->uc_recv_buf_union.uc_recv_buf[2]),
@@ -236,7 +300,7 @@
//                  __SYS_DELAY_SEC_TIME_SET_(UC_active_time,UC_ACTIVE_TIME);//ÉèÖü¤»îʱ¼ä//ÖØÖü¤»îʱ¼ä
//               }
               break;
            case UC_CMD_IAP:
            case UC_CMD_IAP://?
//               uc_rw_result_g = Upper_ComputerIapProcess(uc_table_id, &uc_rec_para_p->uc_recv_buf_union.uc_recv_buf[UC_PROTOCOL_HEAD_LENGTH + UC_DATA_TABLE_BYTES_LENGTH]);
//               __SYS_DELAY_SEC_TIME_SET_(UC_active_time,UC_ACTIVE_TIME);//ÉèÖü¤»îʱ¼ä//ÖØÖü¤»îʱ¼ä
               break;
@@ -250,11 +314,21 @@
      }   
   }
   
   //½øÈë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();
      
   }