This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

How printf to specific USART?

Hello,
I have STM32F103 with three active USART + one SWO port.
I need to single UART send different data, ideally using printf, but I do not know how to redirect flow from print to a specific USART you do?
I would welcome an application example with more UART communication.

The second query.
Looking for example of how to redirect printf to SWO, for STM32F103 too.

  • Use fprintf() and manage them at the fputc() level. You could override the FILE handle with some other constants if it makes life easier.

    http://www.keil.com/forum/58917/

  • I thing all function from printf famili need implement lowlwvel function fputc etc.

    Retargeting printf()

    #include <stdio.h>
    struct __FILE
    {
      int handle;
      /* Whatever you require here. If the only file you are using is */
      /* standard output using printf() for debugging, no file handling */
      /* is required. */
    };
    /* FILE is typedef’d in stdio.h. */
    FILE __stdout;
    int fputc(int ch, FILE *f)
    {
      /* Your implementation of fputc(). */
      return ch;
    }
    int ferror(FILE *f)
    {
      /* Your implementation of ferror(). */
      return 0;
    }
    void test(void)
    {
      printf("Hello world\n");
    }
    

    more precise reimplemrntation fputc for UART

    int fputc(int ch, FILE *f)
    {
      /* Place your implementation of fputc here */
      /* e.g. write a character to the USART1 and Loop until the end of transmission */
      HAL_UART_Transmit(&UartHandle, (uint8_t *)&ch, 1, 0xFFFF);
    
      return ch;
    }