Posílání řetězce na uart

ahoj, tenhle dotaz je spíše k Céčku než k ARMu, ale jelikož dělám na procesoru STM32F0, postu to sem. Jsem začátečník, jak v Céčku, tak v programování mikrokontrolérů. Mám aplikaci s AD převodníkem a hodnotu z něj si chci zobrazit na hyperterminálu (přes uart-usb převodník). Zatím umím poslat jen jeden znak pomocí

USART_SendData(USART2, ‘x’);

Můj dotaz je, jak poslat proměnou ADC1ConvertedValue (která má hodnotu třeba 3000) jako řetězec aby mi to ty 3000 ukázalo? Předem díky za odpovědi :slight_smile:

Ahoj, třeba ti alespoň trochu pomůže toto…

#include "string.h"  
void serial_transmitx(char *buffer, uint16_t pocet){
  uint16_t size = strlen(buffer);
  if(pocet != 0){ size = pocet;}
  while(size){
    while(!(DEBUG_UART_REG->SR & USART_CR1_TCIE));                              // wait while TX buffer full
    DEBUG_UART_REG->DR = *buffer;                                               // send single character to transmit buffer
    buffer++;                                                                   // transmit next character on following loop
    size--;                                                                     // loop until all characters sent (when size = 0)
    }
  while(DEBUG_UART_REG->SR & USART_CR1_TCIE);                                   // wait for last transmission to finish
  return;
  }

void print_number(int16_t cislo){
   char szNumber[12];
   itoa(cislo, szNumber, 10);  
   serial_transmitx(szNumber,0);
   serial_transmitx("\n",0);
   }

int16_t itoa(int16_t number, char* out, int16_t base){
   int16_t t, count;
   char *p, *q;
   char c;
 
   p = q = out;
   if(base < 2 || base > 36) base = 10;
 
   do{
     t = number;
     number /= base;
     if(out) 
       *p = ALPHANUMS[t+35 - number*base];
     p++;
     }while (number);
 
   if(t < 0){
     if (out) *p = '-';
     p++;
     }
   count = p-out;
   if(out){
     *p-- = '\0';
     while(q < p){
       c = *p;
       *p-- = *q;
       *q++ = c;
       }
     }
   return count;
   }

ještě by se ti mohlo hodit toto :slight_smile:

#define ALPHANUMS "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz"
void serial_transmitx(char *buffer, uint16_t pocet);
void print_number(int16_t cislo);
int16_t itoa(int16_t number, char* out, int16_t base);

Ok díky, projedu si to, snad z toho něco pochytim :smiley:

Přesměruj (přepiš) funkci putchar() - nahraď tou co umí odeslat ten jeden znak. V prostředí KEIL je na to soubor retarget.c Pak už můžeš používat prostě formátovaný výstup printf().

Použijte nějakou minimalistickou implementaci funkce printf(). Třeba xprintf() od Elm-Chan.