-
Notifications
You must be signed in to change notification settings - Fork 1k
Closed
Labels
enhancementNew feature or requestNew feature or request
Description
Preconditions:
OS: Win10
Arduino 1.8.10
STM32 1.8.0
BluePill F103
HID Bootloader
USB CDC Serial
USB Serial output is not working when setting
HAL_UART_MODULE_ONLY
HAL_UART_MODULE_ENABLED
in build_opt.h
Target: LIN Serial implementeation on UART1 and USB Serial for debugging
Root cause:
Arduino_Core_STM32/cores/arduino/Print.cpp
Lines 199 to 220 in ea86645
extern "C" { | |
__attribute__((weak)) | |
int _write(int file, char *ptr, int len) | |
{ | |
#if defined(HAL_UART_MODULE_ENABLED) && !defined(HAL_UART_MODULE_ONLY) | |
switch (file) { | |
case STDOUT_FILENO: | |
case STDERR_FILENO: | |
uart_debug_write((uint8_t *)ptr, (uint32_t)len); | |
break; | |
case STDIN_FILENO: | |
break; | |
default: | |
((class Print *)file)->write((uint8_t *)ptr, len); | |
break; | |
} | |
#else | |
(void)file; | |
(void)ptr; | |
#endif | |
return len; | |
} |
Function write in Print.cpp gets disabled when setting UART into HAL mode.
But only uart_debug should be disabled.
Working bugfix:
extern "C"
{
__attribute__((weak)) int _write(int file, char *ptr, int len)
{
#if defined(HAL_UART_MODULE_ENABLED) && !defined(HAL_UART_MODULE_ONLY)
switch (file)
{
case STDOUT_FILENO:
case STDERR_FILENO:
uart_debug_write((uint8_t *)ptr, (uint32_t)len);
break;
case STDIN_FILENO:
break;
default:
((class Print *)file)->write((uint8_t *)ptr, len);
break;
}
#else
if (file != STDERR_FILENO)
((class Print *)file)->write((uint8_t *)ptr, len);
#endif
return len;
}
}
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request