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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren