__io_getchar implementation for getchar() has a problem
I ran into the same problem using the HAL_UART_Receive_() function (No DMA).
I implemented your workaround by setting ‘len’ to 1 inside the _read() function in the syscalls.c module. This works. But without the DMA, the function does not block as it should.
I fixed this by waiting for success in my __io_getchar() function.
int __io_getchar(void) {
HAL_StatusTypeDef Status = HAL_BUSY;
uint8_t Data;
while(Status != HAL_OK)
Status = HAL_UART_Receive(&huart6, &Data, 1, 10);
return(Data);
}
I also removed the increment of ‘ptr’ in the _read() function since I don’t know if ‘ptr’ is reinitialized each time _read() is called.
I don’t feel good about modifying the syscalls.c module that I didn’t write but downloaded. It won’t have my changes the next time I download it.