diff --git a/Src/SerialPortLinArtery.c b/Src/SerialPortLinArtery.c index f7f2e53..6ffe6bb 100644 --- a/Src/SerialPortLinArtery.c +++ b/Src/SerialPortLinArtery.c @@ -19,8 +19,8 @@ void vSerialPortLinInit( ) { env->uart = uart; - env->linLastByteTime = 2; - env->linFrameTimeoutMs = 2; + env->linLastByteTime = 15; + env->linFrameTimeoutMs = 15; usart_reset(uart); @@ -45,7 +45,7 @@ void vSerialPortLinInit( // Включаем прерывание по break frame usart_interrupt_enable(uart, USART_BF_INT, TRUE); usart_interrupt_enable(uart, USART_RDBF_INT, TRUE); - usart_interrupt_enable(uart, USART_IDLE_INT, TRUE); +// usart_interrupt_enable(uart, USART_IDLE_INT, TRUE); NVIC_EnableIRQ(irq); NVIC_SetPriority(irq, irqPriority); @@ -150,6 +150,7 @@ static void LIN_ProcessReceivedFrame(tSerialPortLinArtery *env, bool isHeader) { env->rxFrame.dataLen = 0; env->rxFrame.event = LIN_RX_COMPLETED; osMessageQueuePut(env->rxDataQueue, &env->rxFrame, 0, 0); + return; } @@ -213,7 +214,7 @@ void SerialPort_IrqProcessing_UartLin(tSerialPortLinArtery *env) { return; } - +/* if (usart_flag_get(env->uart, USART_IDLEF_FLAG)) { usart_flag_clear(env->uart, USART_IDLEF_FLAG); @@ -247,7 +248,7 @@ void SerialPort_IrqProcessing_UartLin(tSerialPortLinArtery *env) { } - +*/ // 2. Receive data (без IDLE) @@ -297,8 +298,6 @@ void SerialPort_IrqProcessing_UartLin(tSerialPortLinArtery *env) { // Функция проверки таймаута (вызывать из таймера, например, каждые 1-5 мс) void LIN_CheckTimeout(tSerialPortLinArtery *env) { - return; - if (!env->linFrameStarted) { return; } @@ -496,14 +495,13 @@ static uint8_t vLinTransmitCommand(tSerialPortLinArtery *env, tLinData *linData, static uint8_t vLinReceivedCommand(tSerialPortLinArtery *env, tLinData *linData, uint8_t *ADR_COM, uint32_t timeout) { lin_frame_t rxFrame; -// uint16_t len = vSerialPortLinReceiveQueue(env, (void *) &rxFrame, sizeof(lin_frame_t), osWaitForever, env->rxDataQueue); osStatus_t result = osMessageQueueGet(env->rxDataQueue, (void *) &rxFrame, NULL, osWaitForever); if (result == osOK) { memset(linData->g_aRxBuffer, 0, sizeof(linData->g_aRxBuffer)); if (rxFrame.event == LIN_RX_COMPLETED) { - linData->g_aRxBufferLen = rxFrame.dataLen + 1; + linData->g_aRxBufferLen = rxFrame.dataLen; *ADR_COM = rxFrame.id & 0x3F; for (uint8_t i = 0; i < rxFrame.dataLen; ++i) { linData->g_aRxBuffer[i] = rxFrame.data[i];