RTS flow control doesn't seem to work
Dear List,
I am trying to get RTS/CTS flow control working on a discovery-stm32f407 board using cubemx generated software.
But when sending data from the PC to the UART2 the RTS signal never gets high as seen with a scope.Constequently the data keep coming and soon there is an overrun error in the HAL_UART_ErrorCallback(). I use interrupts.Sending data at slow enough speed is working perfectly.I am testing with an usb-to-serial converter, ftdi-chip, between the PC and the board.
That side seems to work: if I make the CTS of the ftdi-chip (which is connected to the RTS of the UART2) high, the PCimmediately stops sending.I configured RTS/CTS flow control in cubemx and also use interrupts here.
RTS is connected to Pin PD4 via cubemxThe configuration in MX_USART2_UART_Init(void):
huart2.Instance = USART2;
huart2.Init.BaudRate = 913085; huart2.Init.WordLength = UART_WORDLENGTH_8B; huart2.Init.StopBits = UART_STOPBITS_1; huart2.Init.Parity = UART_PARITY_NONE; huart2.Init.Mode = UART_MODE_TX_RX; huart2.Init.HwFlowCtl = UART_HWCONTROL_RTS_CTS; huart2.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart2) != HAL_OK) { Error_Handler(); }The routine that I created to use it is:
__IO ITStatus Uart2RReady=RESET;
// non blocking, but will deliver the buffer in one piece in the endint uart2_read(char *dst, int size) {static char inprogress=0;
if (size == 0) return 0;if (!inprogress) {
Uart2RReady = RESET; if (HAL_UART_Receive_IT(&huart2, (uint8_t *)dst, size) != HAL_OK) printf('uart2 read error\r\n'); // error_handler(nummer) inprogress = 1; } if (Uart2RReady == SET) { inprogress = 0; debug_printf('Received: %d bytes\r\n', size); return size; } else return 0;}The question is why is RTS not set high when data keeps coming at a high enough rate?Thanks in advance,
Sietse