Forum: Mikrocontroller und Digitale Elektronik HAL Bibliothek Printf debugging nutzen


von Bib-Debug (Gast)


Lesenswert?

Hallo,

mal eine dumme Frage,

wie nutzt man innerhalb der STM32 HAL Bibliotheken die bereits 
eingebauten Debugfunktionen?

Da sind jede Menge Anweisungen vorhanden, aber die dort genutzten printf 
müssten ja auf meine Uart umgemünzt werden. Wie macht man so etwas?

von Lars F. (flemmy)


Lesenswert?

Schau dir mal die syscall.c an. Darüber kannst du den Schreibzugriff des 
printf auf deinen UART umbiegen.

von Bib-Debug (Gast)


Lesenswert?

wo finde ich die?

von Bib-Debug (Gast)


Lesenswert?

gefunden, aber da sehe ich nix was nach printf aussieht

von Walter T. (nicolas)


Lesenswert?

Bib-Debug schrieb:
> aber da sehe ich nix was nach printf aussieht

Dann such mal was, was nach putc() aussieht. Letztendlich ruft printf 
auch nichts anderes auf.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ist das nicht eher _write() oder _write_r()?

(Ich kenne HAL nicht, nehme aber an, dass sie auch die newlib benutzen.)

von Daniel B. (dbuergin)


Lesenswert?

Ich weiss nicht, ob Du das meinst:

Zuerst normal mit den HAL_ Kommandos eine UART/USART Schnittstelle 
initialiserien. Details dazu siehe HAL

Dann im main.c:
1
#ifdef GNUC 
2
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf set to ‘Yes’) calls __io_putchar() */ 
3
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch) 
4
#else 
5
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) 
6
#endif /* GNUC */
7
8
PUTCHAR_PROTOTYPE { 
9
  HAL_UART_Transmit (&huart3, (uint8_t *)&ch, 1, 0xFFFF); 
10
  return ch; 
11
}

Von da an schreibt ein normaler printf() auf die besagte Schnittstelle.

Daniel

von Walter T. (nicolas)


Lesenswert?

Jörg W. schrieb:
> Ist das nicht eher _write() oder _write_r()?

Du hast Recht.  _write_r(). Mein Fehler.

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.