stm32 und itoa

Gast #3294696
Lesenswert?
• ▲
▼
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 #3294719
Lesenswert?
• ▲
▼
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 #3294795
Lesenswert?
• ▲
▼
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 #3294809
Lesenswert?
• ▲
▼
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 #3294889
Lesenswert?
• ▲
▼
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 #3295963
Lesenswert?
• ▲
▼
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 #3296006
Lesenswert?
• ▲
▼
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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.