Skip to main content
kai23
Associate
November 25, 2016
Question

Scanf with Nucleo-F401RE & STM Eclipse C IDE

  • November 25, 2016
  • 5 replies
  • 1254 views
Posted on November 25, 2016 at 12:23

Hello,

first i have to say, i´m a bloody Beginner with C and STM.

Never the less, i have the following problem.

I just want do make it possible to communicate with Terminal (Putty, Terra Term,...).

Printf seems to work, there is a good example in Cubemx.

But scanf is not working. Whatever i try, my program is not able to process the input. As well at the Terminal there is no input seen unless i activate ''local echo'' at the terminal.

I have tried different example code, sometimes the programm stucks in my while loop and is waiting for an input. And without while loop, the input is skipped.

I´m nearly sure this depends on Getchar_Prototype but for me, it is still not clear what i have to do.

Maybe someone could help or knows some good online Tutorials/Books.

Thanks Kai
    This topic has been closed for replies.

    5 replies

    Tesla DeLorean
    Guru
    November 25, 2016
    Posted on November 26, 2016 at 00:40

    You'll probably find most embedded solutions don't use scanf() as the primary means of input. Think about managing the input/output more directly, and use sscanf() on the string to get from that.

    Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
    Andrei Chichak
    Lead
    November 26, 2016
    Posted on November 26, 2016 at 06:21

    Wait, I think I might know this one; I have seen that some of the compiler/libraries (newlib) use buffering on input.

    Try holding down a key on your keyboard for about 210 seconds. I seem to remember that the buffer was about 2K and you get about 10 characters per second off of a keyboard.

    Just a shot in the dark.
    Andrei Chichak
    Lead
    November 26, 2016
    Posted on November 26, 2016 at 06:34

    Kay, found it. The compiler was gcc from sw4stm32 (ac6). The buffer was 1024 characters, and the command to turn off buffering is:

    .ExternalClassCE8F3B77326446E0B6CCD68E5AF37C27 p.p1 {margin:0.0px 0.0px 0.0px 0.0px;font:12.0px 'Courier New';} .ExternalClassCE8F3B77326446E0B6CCD68E5AF37C27 span.s1 {;} .ExternalClassCE8F3B77326446E0B6CCD68E5AF37C27 span.s2 {color:#793d93;} .ExternalClassCE8F3B77326446E0B6CCD68E5AF37C27 span.Apple-tab-span {white-space:pre;}

    setvbuf

    (stdin, NULL, _IONBF, 0);

    Put this in your program somewhere before your big loop.
    kai23
    kai23Author
    Associate
    November 28, 2016
    Posted on November 28, 2016 at 10:07

    Many thanks, this is what i was searching for :)

    It works now.

    That was not easy for a beginner like me.

    Kaily

    Andrei Chichak
    Lead
    November 28, 2016
    Posted on November 28, 2016 at 20:49

    No, that definitely isn't your fault. I taught an intro to embedded systems class at the local maker space and this came up when I was teaching the UART section.

    I'm doing a brain dump of my course notes on the Embedded.FM blog (embedded.fm/blog) and this week's topic is - UARTs.

    I will be giving you this tidbit in about two weeks. There's quite a bit to go over yet.

    I'm glad I could help.

    Andrei from The Great White North

    (as seen on the embedded.fm podcast and blog)