新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機使用printf函數進行串口打印輸出

        單片機使用printf函數進行串口打印輸出

        作者: 時間:2016-11-26 來源:網絡 收藏

        由說明文件可以看出,我們可以改寫這個底層的putchar函數來適應不同的硬件。keil里面的putchar函數是默認用串行口輸出信息的,我們可以自由定義成另外的輸出模塊,比如自定義IO向1602液晶輸出信息。

        keil的printf函數大致搞明白了,回頭再研究下IAR for MSP430,可惜,我沒有能夠查看該軟件標準函數庫里的printf.c 和 putchar.c,不過我覺得程序沒有通過串口向電腦打印輸出信息,是因為底層的putchar函數沒有定義為通過MSP430G2553的UART進行輸出,那如果我自己重定向一個putchar函數,覆蓋掉標準函數庫里面的putchar,是不是就能夠輸出了呢。于是編寫putchar函數如下:

        int putchar(int c)

        {

        if(c == )

        {

        while(UCA0STAT & UCBUSY);

        UCA0TXBUF = ;

        }

        while(UCA0STAT & UCBUSY);

        UCA0TXBUF = c;

        return c;

        }

        編譯后,輸出完全正確。大功告成。

        將測試程序向大家展示一下,希望能幫到大家。

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        uart.c

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        #include

        void UartInit()

        {

        BCSCTL1 = CALBC1_1MHZ; // Set DCO

        DCOCTL = CALDCO_1MHZ;

        BCSCTL2 &= ~(DIVS_3);

        P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD

        P1SEL2 = BIT1 + BIT2; // P1.1 = RXD, P1.2=TXD

        UCA0CTL1

        = UCSSEL_2; // SMCLK

        UCA0BR0 = 104; // 1MHz 9600

        UCA0BR1 = 0; // 1MHz 9600

        UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1

        UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**

        UC0IE

        = UCA0RXIE; // Enable RX int

        }

        int putchar(int c)

        {

        if(c == )

        {

        while(UCA0STAT & UCBUSY);

        UCA0TXBUF = ;

        }

        while(UCA0STAT & UCBUSY);

        UCA0TXBUF = c;

        return c;

        }

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        main.c

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        #include

        #include "uart.h"

        #include "stdio.h"

        void main()

        {

        float value = 123.123456789;

        char *string="http://www.hao123.com";

        WDTCTL = WDTPW + WDTHOLD;

        UartInit();

        printf("value = %f%s",value,string);

        while(1);

        }


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 彭阳县| 汕尾市| 四川省| 大竹县| 泰宁县| 南开区| 嘉定区| 石屏县| 丽江市| 水富县| 潜江市| 尤溪县| 万年县| 沭阳县| 土默特左旗| 德州市| 无棣县| 大兴区| 剑川县| 鹤峰县| 金湖县| 阳曲县| 云阳县| 保德县| 达州市| 平乡县| 郸城县| 澄城县| 东乌珠穆沁旗| 台北市| 明光市| 凤凰县| 沙雅县| 南京市| 广东省| 肇庆市| 景德镇市| 麟游县| 商南县| 阳朔县| 广州市|