Skip to main content
shaolei198
Associate II
April 24, 2012
Question

Problem with USATT, cant receive anything from X-CTU

  • April 24, 2012
  • 3 replies
  • 1237 views
Posted on April 24, 2012 at 15:57

Recently migrate from 8bit MCU to 32bit STM32, I like the FW library, but there is a learning curve required. So I am trying to do a printf with USART, after i compiled the program, i cant receive anything. At this point i have no clue what went wrong, so i start debug the clock setting.

I found out my USART_BRR=0x138, which is 35.9424MHZ, while my USART2's PCLK2 is running at 36MHZ, not sure if this is a problem. Anything other than that, i cant think of any. Usually, even when the USART's timing is wrong, it will still receive some garbage at the other end, but i aren't receive anything.

Could anyone take some time, read my code(actually is a reference code from the dev kit company), and kindly point me where i should looking for the bug....thanks!!!
    This topic has been closed for replies.

    3 replies

    Tesla DeLorean
    Guru
    April 24, 2012
    Posted on April 24, 2012 at 16:36

    What IDE/Compiler?

    What board?

    Have you selected the right board and defined the correct pins?

    The baud rate value seems correct for 115200 baud @ 36MHz.

    How about just outputting some characters directly to a USART function in a loop, without using printf(), putchar(), does that work?

    Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
    shaolei198
    Associate II
    April 24, 2012
    Posted on April 24, 2012 at 17:30

    Thanks for your replaying. I am using keil as my IDE.

    I will try your suggestion.

    Tesla DeLorean
    Guru
    April 24, 2012
    Posted on April 24, 2012 at 21:14

    For Keil, you want something like this to host the stdio on the target board.

    #include <
    stdio.h
    >
    /*----------------------------------------------------------------------------
    Write character to Serial Port
    *----------------------------------------------------------------------------*/
    int ser_putchar (int c) {
    while (!(USART1->SR & USART_FLAG_TXE));
    USART1->DR = (c & 0x1FF);
    return (c);
    }
    /*----------------------------------------------------------------------------
    Read character from Serial Port (blocking read)
    *----------------------------------------------------------------------------*/
    int ser_getchar (void) {
    while (!(USART1->SR & USART_FLAG_RXNE));
    return ((int)(USART1->DR & 0x1FF));
    }
    #include <
    rt_misc.h
    >
    #pragma import(__use_no_semihosting_swi)
    struct __FILE { int handle; /* Add whatever you need here */ };
    FILE __stdout;
    FILE __stdin;
    int fputc (int ch, FILE *f) { return (ser_putchar(ch)); }
    int fgetc (FILE *f) { return (ser_getchar()); }
    int ferror(FILE *f) {
    /* Your implementation of ferror */
    return EOF;
    }
    void _ttywrch(int ch) { ser_putchar(ch); }
    void _sys_exit(int return_code) {
    label: goto label; /* endless loop */
    }

    Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..