Skip to content

Print::printf on SerialUSB #862

Closed
@Tretgo

Description

@Tretgo

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:

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

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions