Files
CHJ/user/Protocol/CommProcess.c

124 lines
4.0 KiB
C
Raw Normal View History

2026-03-20 21:16:58 +08:00
#include "../main/SystemInclude.h"
const u32 baudRateVaule[6] ={4800, 9600, 19200, 38400, 57600, 115200};
COM_DATA_TypeDef comState;
void StartDMAForRxdMainUartData(void)
{
#ifndef ENABLE_TURN_OFF_RS485
#pragma message("[undefined] ENABLE_TURN_OFF_RS485")
#elif(ENABLE_TURN_OFF_RS485)
RS485_Enable_RX();
#endif
comState.state.ReceivedData = 0 ; //<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־
comState.state.SendingData = 0 ; //<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD>б<EFBFBD>־
DMA_UART_AnyLength_Rx_Init(baudRateVaule[baudRate]);//<2F><>ʼ<EFBFBD><CABC>UART DMA<4D><41><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
comState.state.ReceivedData = 0 ;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
}
void DMAForUART_Tx_Callback(void)
{
comState.state.SendingData = 0 ; //UART DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LHL_DMA_Stop(&DMA_Handle_UartTx); //<2F>ر<EFBFBD>DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RestartDMAForRxdMainUartData(); //<2F>л<EFBFBD><D0BB>ؽ<EFBFBD><D8BD><EFBFBD>
}
void StartDMAForTxdMainUartData(void)
{
LHL_DMA_Stop(&DMA_Handle_UartRx);//<2F>ر<EFBFBD>DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifndef ENABLE_TURN_OFF_RS485
#pragma message("[undefined] ENABLE_TURN_OFF_RS485")
#elif(ENABLE_TURN_OFF_RS485)
RS485_Enable_TX();
#endif
comState.state.SendingData = 1 ;
comState.TxLenth = MBBuf.TxdLen;
// memcpy(comState.TxdData, MBBuf.TxPointer, comState.TxLenth );
// for (u8 i=0;i<comState.TxLenth;i++) printf("%c",comState.TxdData[i]);
DMA_UART_Tx_Init();//<2F><>ʼ<EFBFBD><CABC>DMA <20><><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
DMA_register_irq_callback(DMA_CHANNEL_UART_Tx,NULL,DMAForUART_Tx_Callback);//ע<><EFBFBD><E1B4AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
}
void RestartDMAForRxdMainUartData(void)
{
#ifndef ENABLE_TURN_OFF_RS485
#pragma message("[undefined] ENABLE_TURN_OFF_RS485")
#elif(ENABLE_TURN_OFF_RS485)
RS485_Enable_RX();
#endif
comState.state.ReceivedData = 0 ;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
DMA_DMAMUX_CFG(DMA_CHANNEL_UART_Rx,REQUEST_SOURCE_UART_RX);//<2F><>DMAMUX<55><58><EFBFBD>ӻص<D3BB><D8B5><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD>ͨ<EFBFBD><CDA8>
DMA_Handle_UartRx.Init.Dest_Address = (uint32_t)comState.RxdData;//<2F><><EFBFBD><EFBFBD>DMAĿ<41><C4BF><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
LHL_DMA_GenerateTCD(&DMA_Handle_UartRx, &DMA_Handle_UartRx.Init, (DMA_DES_N_TypeDef *)(DMA_DES_N_BASE + 32u * DMA_Handle_UartRx.Channel)); /* д<><D0B4>DMA<4D>Ĵ<EFBFBD><C4B4><EFBFBD> */
LHL_DMA_Start(&DMA_Handle_UartRx); /*<2A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>*/
}
//void RestartDMAForTxdMainUartData(void)
//{
// LHL_DMA_Stop(&DMA_Handle_UartRx);//<2F>ر<EFBFBD>DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// comState.state.SendingData = 1 ;
// comState.TxLenth = MBBuf.TxdLen;
// memcpy(comState.TxdData, MBBuf.TxPointer, comState.TxLenth );
//
// DMA_Handle_UartTx.Init.Src_Address = (uint32_t)&comState.TxdData; // Դ<><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// DMA_Handle_UartTx.Init.Repetition = comState.TxLenth ;
// LHL_DMA_GenerateTCD(&DMA_Handle_UartTx, &DMA_Handle_UartTx.Init, (DMA_DES_N_TypeDef *)(DMA_DES_N_BASE + 32u * DMA_Handle_UartTx.Channel)); /* д<><D0B4>DMA<4D>Ĵ<EFBFBD><C4B4><EFBFBD> */
// LHL_DMA_Start(&DMA_Handle_UartTx);
// DMA_register_irq_callback(DMA_CHANNEL_UART_Tx,NULL,DMAForUART_Tx_Callback);//ע<><EFBFBD><E1B4AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
//}
void ReceivedDataProcessing(void)
{
comState.state.ReceivedData = 0 ; //<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־
Get_UART_Rx_ActualLength();//<2F><><EFBFBD>½<EFBFBD><C2BD>ճ<EFBFBD><D5B3><EFBFBD>
MBBuf.RxdLen = comState.RxLenth; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
MBBuf.RxPointer = comState.RxdData; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2026-03-20 21:19:04 +08:00
MBBuf.TxPointer = comState.TxdData; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(ModBusProtocolDetection()) //<2F><><EFBFBD>⵽ModbusЭ<73><D0AD>
2026-03-20 21:16:58 +08:00
{
2026-03-20 21:19:04 +08:00
ModBusDataProcessing(); //Э<><EFBFBD><E9B4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Э<><EFBFBD><E9B4A6><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MBBuf.RxPointer<65><72>
// MBBuf.TxPointer = MBBuf.RxPointer ;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
StartDMAForTxdMainUartData(); //<2F>ظ<EFBFBD>֡
2026-03-20 21:16:58 +08:00
}
else RestartDMAForRxdMainUartData();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><C2BD><EFBFBD>(<28>ܹ<EFBFBD>ʹͨ<CAB9><CDA8>ʧ<EFBFBD><CAA7>ʱ<EFBFBD><CAB1><EFBFBD>¸<EFBFBD>λ)
}
/*********************************************************************************************************************************************/
/* <20><>RS485<38>Ŀ<EFBFBD><C4BF><EFBFBD> */
/*********************************************************************************************************************************************/
#ifndef ENABLE_TURN_OFF_RS485
#pragma message("[undefined] ENABLE_TURN_OFF_RS485")
#elif(ENABLE_TURN_OFF_RS485)
void RS485_Enable_TX(void)
{
RS485DE_OUTPUT();
ENABLE_TXD();
}
void RS485_Enable_RX(void)
{
RS485DE_OUTPUT();
ENABLE_RXD();
}
#endif