Я пытаюсь отправить запрос на измерительное устройство и получить ответ с помощью UART с прерываниями. Однако связь нестабильна, я получаю неполные или искаженные ответы. Я не уверен, но думаю, это из-за сигнала включения драйвера переключения. Не могли бы вы взглянуть на мой код и дать мне совет, что я делаю не так?
Вот мой код:
int main(void){
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART3_UART_Init();
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET); //RS 485 transmit mode
while (1)
{
if(HAL_UART_Transmit_IT(&huart3, (uint8_t*)aTxBuffer, 2) != HAL_OK)
{
while(1);
}
while (UartReady != SET);
UartReady = RESET;
if(HAL_UART_Receive_IT(&huart3, (uint8_t*)aRxBuffer, 4) != HAL_OK)
{
while(1);
}
while (UartReady != RESET);
//do somethink with received data
}
}
Вот мои функции обратного вызова:
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *UartHandle)
{
/* Set transmission flag: transfer complete */
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET); //RS 485 receive mode
//DataRecieved = 0;
UartReady = SET;
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
/* Set transmission flag: transfer complete */
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET); //RS 485 transmit mode
//DataRecieved = 1;
UartReady = SET;
}
Большое тебе спасибо