串口收发正常

This commit is contained in:
2025-01-09 14:48:56 +08:00
parent 76d20a87c7
commit 3b4773f900
16 changed files with 1984 additions and 1923 deletions
+31 -18
View File
@@ -75,15 +75,15 @@ void COMM_setDir(COMM_DIR_ENUM dir)
default:
case COMM_DIR_RX:
{
HAL_Delay(10);
//HAL_Delay(2);
HAL_GPIO_WritePin(CTRL_485_GPIO_Port,CTRL_485_Pin,GPIO_PIN_RESET);
HAL_Delay(10);
//HAL_Delay(2);
}break;
case COMM_DIR_TX:
{
HAL_Delay(10);
//HAL_Delay(2);
HAL_GPIO_WritePin(CTRL_485_GPIO_Port,CTRL_485_Pin,GPIO_PIN_SET);
HAL_Delay(10);
//HAL_Delay(2);
}break;
}
}
@@ -272,13 +272,15 @@ void SERIAL_StartRecv(SERIAL_t *serial)
/* 总线繁忙 */
serial->isbusy = 1;
__HAL_UART_CLEAR_OREFLAG(serial->huart);//clear Overrun Error Clear Flag
__HAL_UART_ENABLE_IT(serial->huart, UART_IT_IDLE);//enable idle int
//打开接收中断
HAL_UART_Receive_IT(serial->huart,serial->recv_buff,serial->recv_buff_len);
//HAL_UARTEx_ReceiveToIdle_IT(serial->huart,serial->recv_buff,serial->recv_buff_len);
//HAL_UART_Receive_IT(serial->huart,serial->recv_buff,serial->recv_buff_len);
HAL_UARTEx_ReceiveToIdle_IT(serial->huart,serial->recv_buff,serial->recv_buff_len);
}
void SERIAL_StopRecv(SERIAL_t *serial)
@@ -310,11 +312,18 @@ static void SERIAL_sendstr(SERIAL_t *serial)
if(serial->setDir)
{
serial->setDir(COMM_DIR_TX);
//先停止接收
//SERIAL_StopRecv(serial);
//HAL_Delay(20);
//如果总线不忙,那么发送,否则等待
serial->setDir(COMM_DIR_TX);
}
ret = HAL_UART_Transmit_IT(serial->huart,serial->send_buff[serial->sel],serial->send_head);
if (ret == HAL_OK)
{
serial->sending = true;
@@ -330,7 +339,11 @@ static void SERIAL_sendstr(SERIAL_t *serial)
{
if(serial->setDir)
{
//HAL_Delay(20);
serial->setDir(COMM_DIR_RX);
//SERIAL_StartRecv(serial);
}
serial->sending = false;
}
@@ -440,8 +453,8 @@ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
if (serial->huart == huart)
{
serial->recv_head = 0u;
HAL_UART_Receive_IT(serial->huart,serial->recv_buff,serial->recv_buff_len);
//HAL_UARTEx_ReceiveToIdle_IT(serial->huart,serial->recv_buff,serial->recv_buff_len);
//HAL_UART_Receive_IT(serial->huart,serial->recv_buff,serial->recv_buff_len);
HAL_UARTEx_ReceiveToIdle_IT(serial->huart,serial->recv_buff,serial->recv_buff_len);
break;
}
else
@@ -475,8 +488,8 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
serial->isOverLoop = 1;//超过了一圈,只能超一圈,超两圈会覆盖
}
}
HAL_UART_Receive_IT(serial->huart,(serial->recv_buff + serial->recv_head),serial->recv_buff_len - serial->recv_head);
//HAL_UARTEx_ReceiveToIdle_IT(serial->huart,(serial->recv_buff + serial->recv_head),serial->recv_buff_len - serial->recv_head);
//HAL_UART_Receive_IT(serial->huart,(serial->recv_buff + serial->recv_head),serial->recv_buff_len - serial->recv_head);
HAL_UARTEx_ReceiveToIdle_IT(serial->huart,(serial->recv_buff + serial->recv_head),serial->recv_buff_len - serial->recv_head);
break;
}
else
@@ -527,12 +540,12 @@ void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
__HAL_UART_CLEAR_OREFLAG(huart);//clear Overrun Error Clear Flag
__HAL_UART_CLEAR_IDLEFLAG(serial->huart);
//__HAL_UART_DISABLE_IT(serial->huart,UART_IT_RXNE);
//HAL_UART_AbortReceive_IT(serial->huart);
__HAL_UART_DISABLE_IT(serial->huart,UART_IT_RXNE);
HAL_UART_AbortReceive_IT(serial->huart);
//打开接收
HAL_UART_Receive_IT(serial->huart,serial->recv_buff,serial->recv_buff_len);
//HAL_UARTEx_ReceiveToIdle_IT(serial->huart,serial->recv_buff,serial->recv_buff_len);
//HAL_UART_Receive_IT(serial->huart,serial->recv_buff,serial->recv_buff_len);
HAL_UARTEx_ReceiveToIdle_IT(serial->huart,serial->recv_buff,serial->recv_buff_len);
break;
}
@@ -550,9 +563,9 @@ void HAL_UART_IdleCpltCallback(UART_HandleTypeDef *huart)
}
//=========================================
//===============time====================
#define MAIN_PERIOD_MS (20)
#define MAIN_PERIOD_MS (5)
uint32_t tick_ms = 0;
uint32_t tick_us = 0;