新闻中心

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

评论


技术专区

关闭