串口输出重定向到 printf

//#include "uart.h"
#include "stdio.h" 

// static int uart_putchar(char c, FILE *stream);

static int uart_putchar(char c, FILE *stream)  // 自定义函数,  static int  uart_putchar(char  c)  也可以。
{
 if (c == '\n')
 uart_putchar('\r', stream); //换行符 

//串口输出字符
 loop_until_bit_is_set(UCSR0A, UDRE0);  //  或 :while (!(UCSR0A & (1<<UDRE0)));    表示串口数据寄存器可写。
 UDR0 = c;
 return 0;
}

 

static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL,_FDEV_SETUP_WRITE);

 

void uart_init(void)
{

//串口初始化
 UCSR0A |= (1<< U2X0);//倍速
 UCSR0B =  (1<<RXEN0) | (1<<TXEN0);
 UBRR0L = (unsigned char) USART_BAUD_SELECT;
 UBRR0H = (unsigned char) (USART_BAUD_SELECT>>8);

//重定向
 stdout = &mystdout;   
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将printf函数重定向串口输出,需要进行以下步骤: 1. 引入相关的头文件和库文件,如stdio.h和uart.h,以便使用相关的函数和宏定义。 2. 在程序中定义一个名为putchar的函数,用于重定向printf函数的输出串口。putchar函数的输入参数是一个字符,类型为int。在该函数内,需要调用串口发送函数,将字符发送到串口。 3. 在main函数中调用相关的初始化函数,对串口进行初始化设置,以便正常使用。 4. 使用宏定义将标准输出重定向到putchar函数。可以使用以下方式完成重定向: #define putchar(c) putc(c, stdout) 5. 在需要使用printf函数输出的地方,直接使用printf进行输出输出的内容将通过putchar函数重定向串口输出。 下面是一个示例程序,展示了如何将printf函数重定向串口输出: #include <stdio.h> #include "uart.h" int __attribute__((used)) putchar(int c) { uart_send_byte(c); // 调用串口发送函数将字符发送到串口 return c; // 返回字符,与printf函数的返回一致 } int main() { uart_init(); // 初始化串口设置 printf("Hello, world!\n"); // 通过printf函数将字符串输出串口 return 0; } 在上述示例程序中,我们通过定义putchar函数并使用宏定义重定向标准输出,实现了将printf函数的输出重定向串口。而在main函数中,通过调用uart_init函数进行串口初始化设置,然后使用printf函数输出字符串"Hello, world!\n"到串口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值