<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 單片機使用printf函數(shù)進行串口打印輸出

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

          作者: 時間:2016-11-26 來源:網(wǎng)絡(luò) 收藏

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

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

          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 下一頁

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();