知識社群Login
Position: 艾鍗學院 Blog > 專業論壇 > Discussion
如何使用UART傳送printf ()函式之字串
1
大家好:
   我想將Stdio.h內的I/O標準函式----printf()以UART傳輸ASCII至其它PC的終端機上面
 
   之前我的Hello World.c都是用Dev C編譯過後在黑色終端機上面顯示"Hello World!"
   現在 同樣的結果
   我希望Hello World的printf("Hello World");可以透過MCU以UART傳輸給其他PC的HyperTermal來顯示
   我已經可以用MCU傳輸單一個英文字母給PC 的Hypertermal讓其顯示之 所以硬體傳輸的部份是沒有問題的
  
   所以要怎麼做呢?
2
雖然看不太懂你的意思 >>  printf()以UART傳輸ASCII至其它PC的終端機上面

建議google , linux serial howto , 答案應該就在裡面


最近都在寫Uart 相關的程式, 可來信互相討論討論
3
我也有同樣的問題, 即printf 是打印在 screen 上, 但我是要真正傳出至 RS232 出去, 要怎麼做 ?

4

基本上的流程如下, 要做到C函式的printf (char *fmt, ...) 這種寫法, 
可以copy一下C函式 vsprintf 的實作 (google下就有了), 另外配合C函式庫的 stdarg.h
就可以完成了

void printf (const char *fmt, ...)  
{  
    va_list args;  
    uint i;  
    char printbuffer[CFG_PBSIZE];  
  
    va_start (args, fmt);  
  
    /* For this to work, printbuffer must be larger than  
     * anything we ever want to print.  
     */  
    i = vsprintf (printbuffer, fmt, args);  
    va_end (args);  
  
    /* Print the string */  
    puts (printbuffer);  
}

void  puts ( char *s);  
 {
 while (s !=NULL && *s!=0)
     serial_putc(*s);

}

/*  
 * Output a single byte to the serial port.  
 */  
void serial_putc (const char c)//发送数据  
{  
    SoC_UART * const uart = SoC_GetRegBase_UART(UART0);  
  
    /* wait for room in the tx FIFO */  
    while (!(uart->UTRSTAT & 0x2));  
  
      uart->UTXH = c;  
  
    /* If \n, also do \r */  
    if (c == '\n')  
        serial_putc ('\r');  
}