Forum: Mikrocontroller und Digitale Elektronik STM32 printf


von Christoph A. (shadowrunner93)


Lesenswert?

Hallo Forum!

Ich programmiere einen STM32F100 mit dem STM32VL-Discovery Board 
(http://www.st.com/internet/evalboard/product/250863.jsp) mit der IAR 
Workbench Kickstart 6.3 und probiere schon wie wild die printf-Funktion 
zum laufen zu bekommen. Man muss sie ja "redirecten", also gewisse 
Funktionen überschreiben um printf hardwarespezifisch anzupassen.

In der StandardPeripheralLibrary von ST ist ein Beispiel unter USART wie 
man dies bewerkstelligen könnte:
1
#include <stdio.h>
2
3
#ifdef __GNUC__
4
  /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
5
     set to 'Yes') calls __io_putchar() */
6
  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
7
#else
8
  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
9
#endif /* __GNUC__ */
10
11
// MAIN usw
12
13
PUTCHAR_PROTOTYPE
14
{
15
  /* Place your implementation of fputc here */
16
  /* e.g. write a character to the USART */
17
  USART_SendData(USART1, (uint8_t) ch);
18
19
  /* Loop until the end of transmission */
20
  while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
21
  {}
22
23
  return ch;
24
}

Nur mault der Compiler dass er den Datentyp FILE nicht kennt.
Ich bin davon ausgegangen dass dieser in stdio.h definiert wird, was 
aber bei mir nicht zu passieren scheint.

Die Funktion printf kann ich aber ohne Fehler aufrufen, nur wird eben 
nichts gesendet.

Ich vermute es liegt an bestimmten Linkereinstellungen oder soetwas in 
der Art.

Vielen Dank schonmal!

Mfg
Christoph
von Christoph A. (shadowrunner93)


Lesenswert?

Okay, Problem gelöst!

Bei den Projekteinstellungen unter GeneralOptions -> 
LibraryConfiguration: Library von NORMAL auf FULL stellen.

Nun kennt er den Datentyp und printf funktioniert einwandfrei!

Mfg
Christoph
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.