串口收发正常
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user