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
Karl schrieb: > Beim AVR habe ich dafür immer itoa über die stdlib verwendet, wie mache > ich es beim stm32? wenn es dort kein itoa gibt(was ich kaum glauben kann) gibt es ja immer noch sprintf.
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
Nachtrag:
> usb_cdc_printf(&s);
sicher das hier %s stehen muss? sieht mir merkwürdig aus.
Peter II schrieb: > sicher das hier %s stehen muss? das ist kein Prozent, sonder ein &(und) für die Adresse der Aufruf void usb_cdc_printf(char *s);
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.
Peter II schrieb: ... > dort nimmst du nicht die Adresse! Ein Array ist die Adresse. jain... ein Array ohne Angabe des Elements liefert die Adresse auf das erste Element des Arrays.
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 -.-
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 ^^
thegameboy schrieb: > nimm wieder > usb_cdc_printf(&s); Natürlich, gut gesehen... Leider bekomme ich im Terminal auch so nichts. Das funktioniert... usb_cdc_printf("Hello World!\n"); jenes nicht usb_cdc_printf(itoa(s,counter,2));
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
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
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
Wenn die Funktion ihrem Namen gerecht wird, sollte reichen:
1 | usb_cdc_printf("%i", counter); |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.