This commit is contained in:
cfif 2026-06-02 17:30:44 +03:00
parent b43a3ec283
commit b4e3fed40a
1 changed files with 7 additions and 9 deletions

View File

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