stm32 und itoa

Gast #3294696
Hi,

ich habe ein stm32f4 board hier und eine lib aus dem Internet geladen, 
die mir einen virtuellen ComPort erstellt. Die Ausgabe von Strings im 
Terminal funktioniert super, allerdings möchte ich nun integer 
übertragen.

Der Funktion zum Übertragen will char

void usb_cdc_printf(char *s);

Beim AVR habe ich dafür immer itoa über die stdlib verwendet, wie mache 
ich es beim stm32?

Vielen Dank
Gast
Sorry, aber ich bin im Bereich Hardware zuhause.

Mein Versuch...
1
int counter=5;
2
char s[7];
3

4
sprintf(s,"%d",counter);
5
usb_cdc_printf(&s);

Aber sprintf müsste ich doch auch über eine header einbinden?

Danke
Gast
Karl schrieb:
> das ist kein Prozent, sonder ein &(und) für die Adresse
>
> der Aufruf
> void usb_cdc_printf(char *s);

ja sorry war ein Tippfehler, aber sprintf braucht auch ein char* und 
dort nimmst du nicht die Adresse! Ein Array ist die Adresse.
Gast
Ah, das macht Sinn...also so
1
int counter=5;
2
char s[7];
3

4
sprintf(s,"%d",counter);
5
usb_cdc_printf(s);

Allerdings habe ich noch Probleme mit der Einbindung der stdio.h

#include <stdio.h> geht nicht, weil die lib wohl bei CooCox nicht zum 
Standard gehört...

Ich habe nun im Internet noch einen Code für itoa gefunden (nicht mein 
code)
1
char * itoa(char * buf, unsigned int val, char pad) {
2
    char i;
3
    char tmp_buf[6];
4

5
    for(i=0; val>0; val/=10)
6
        tmp_buf[i++] = (val % 10) + '0';
7
    if(i==0)
8
        tmp_buf[i++] = '0';
9

10
    while(i<pad)
11
        tmp_buf[i++] = ' ';
12

13
    while(i>0)
14
        *buf++ = tmp_buf[--i];
15

16
    *buf = 0;
17

18
    return buf;
19
}
der Aufruf...
1
usb_cdc_putc(itoa(s,counter,2));

Beim Compilieren gibt es keinen Fehler, aber im Terminal kommt nichts 
-.-
Gast
Karl schrieb:
> usb_cdc_putc(itoa(s,counter,2));

die funktion wird so nehmme ich mal an nur einen charakter übertragen.. 
aber du hast einen string zu übertragen....


nimm wieder
usb_cdc_printf(&s); <---- oder was auch immer du für einen funktion für 
strings verwendet hast .. man kann nur raten ^^
Gast
hmm

void UARTPutDec16(uint16_t decnum)
{
  uint8_t c1=decnum%10;
  uint8_t c2=(decnum/10)%10;
  uint8_t c3=(decnum/100)%10;
  uint8_t c4=(decnum/1000)%10;
  uint8_t c5=(decnum/10000)%10;
  usb_cdc_putc('0'+c5);
  usb_cdc_putc('0'+c4);
  usb_cdc_putc('0'+c3);
  usb_cdc_putc('0'+c2);
  usb_cdc_putc('0'+c1);
}



probier das mal
Gast
Danke für den Code, es geht in die richtige Richtung...

Im Terminal werden nun Kästchen geschickt...

Weiß nicht wie ich das Zeichen mache, es ist jedenfalls in Hex 81, 17 
,81 ,17....

also eine abwechselnde Folge, allerdings sieht das Kästchen in Ascii 
gleich aus
Gast
Mhm, nun habe ich in der Funktion eine eigene Funktion erstellt

void usb_cdc_putint(uint8_t *s){
  VCP_DataTx((uint8_t*)s);
}

Aufruf...
usb_cdc_putint(&counter);

Die Kommunikation funktioniert fast, im Terminal zeigt er als ascii 
wieder nur den Kasten an, aber als Hex, Dec und Binär zeigt er die 
richtige Zahl an.

Ich benutze HTerm als Terminal

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.