STM32L4+USART+Rx+HAL-------Distortion of received data
Hello Everyone,
I am using Nucleo-32 board in my project. I am programming USART to receive 10 character data and then transmit this 10 character data back.
Problem that I am observing is that if accidentally 11 character it is suppose to display error message after that every time I enter 10 character string, my response character shift right+1. Can someone
Please find below code:
HAL_Init();
SystemClock_Config();
GPIO_Toggle();
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);
__HAL_RCC_USART1_CLK_ENABLE();
UartHandle.Instance = USART1;
UartHandle.Init.BaudRate = 4800;
UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
UartHandle.Init.StopBits = UART_STOPBITS_1;
UartHandle.Init.Parity = UART_PARITY_NONE;
UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
//UartHandle.Init.OverSampling=UART_OVERSAMPLING_16;
//UartHandle.Init.OneBitSampling=UART_ONE_BIT_SAMPLE_DISABLE;
UartHandle.Init.Mode = UART_MODE_TX_RX ;
if(HAL_UART_DeInit(&UartHandle) != HAL_OK)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);
}
if(HAL_UART_Init(&UartHandle) != HAL_OK)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);
}
LTC_2873();
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_SET); // Mode RS485
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_RESET); // RS485 Terminator Enable
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_SET); // RS485 Driver Enable
HAL_UART_Transmit_IT( &UartHandle,&aTxBuffer[0],strlen((const char*)aTxBuffer));
HAL_Delay(1000);
while(1)
{
do
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_RESET); // RS485 Receiver Enable
HAL_Delay(20);
while(HAL_UART_Receive_IT( &UartHandle,&aRx_Buffer[0],10)!=HAL_OK);
HAL_Delay(20);
}while(rx_cplt!=1);
HAL_Delay(50);
if(rx_cplt==1)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_SET); // RS485 Driver Enable
HAL_Delay(20);
HAL_UART_Transmit_IT( &UartHandle,&aRx_Buffer[0],10);
HAL_Delay(20);
rx_cplt=0;
}//end of if
}//end of while(1)
}