单片机如何把串口重定向_单片机自定义printf串口重定向 - CSDN
  • 几个步骤完成在SMT32的串口上使用printf函数 1.#include 2.添加三个小函数 void uart_put(u8 dat) {  while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);  USART_SendData(USART1,dat); }...

    几个步骤完成在SMT32的串口上使用printf函数

    1.#include <stdio.h>

    2.添加三个小函数

    void uart_put(u8 dat)
    {
             while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);
             USART_SendData(USART1,dat);
    }

    int fputc(int ch, FILE *f)
    {
             uart_put((u8)ch);
             return ch;
    }

    int fgetc(FILE *f)
    {
             /* Loop until received a char */
             while(!(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == SET));
             /* Read a character from the USART and RETURN */
             return (USART_ReceiveData(USART1));
    }


    3.勾选Use MicorLib

    4.即可在usart初始化成功的前提下,使用printf函数了~很过瘾。此处默认USART1。

    展开全文
  • 打印调试信息时我们习惯使用printf函数,但是在Keil C51环境下,由于我们的程序是下载到单片机里,使用printf函数时不能直接打印到串口上,这个时候就需要我们对printf函数输出重定向重定向 重定向printf很简单...

    概述

    进行C/C++开发的时候我们都会需要打印调试信息,打印调试信息时我们习惯使用printf函数,但是在Keil C51环境下,由于我们的程序是下载到单片机里,使用printf函数时不能直接打印到串口上,这个时候就需要我们对printf函数输出重定向。

    重定向

    重定向printf很简单,我们知道,printf函数是调用putchar实现字符数据传送的。我们只要重写putchar函数,就可以对printf进输出重定向。

    代码清单

    下面是自己在Keil 5环境下,使用单片机STC12测试printf重定向功能的代码清单

    #include <STC12C5A60S2.H>
    #include <stdio.h>
    
    //UART1 初始化
    void Uart1Init(void)    //115200bps@11.0592MHz
    {
        PCON &= 0x7F;       //波特率不倍速
        SCON    = 0x50;     //8位数据,可变波特率
        AUXR |= 0x04;       //1T模式
        BRT     = 0xFD;     //设置独立波特率发生器重装值
        AUXR |=0X01;        //串口1选择独立发生器为波特率发生器
        AUXR |=0X10;        //启动独立波特率发生器
        ES = 1;                 //使能串口1中断
    }
    
    //UART1 发送串口数据
    void UART1_SendData(char dat)
    {
        ES=0;           //关串口中断
        SBUF=dat;           
        while(TI!=1);   //等待发送成功
        TI=0;           //清除发送中断标志
        ES=1;           //开串口中断
    }
    
    //UART1 发送字符串
    void UART1_SendString(char *s)
    {
        while(*s)//检测字符串结束符
        {
            UART1_SendData(*s++);//发送当前字符
        }
    }
    
    //重写putchar函数
    char putchar(char c)
    {
        UART1_SendData(c);
        return c;
    }
    
    void main(void)
    {
        Uart1Init();
        UART1_SendString("Hello World!\r\n");
        printf("printf Test!\r\n");
        printf("Complie Time:%s\r\n", __TIME__);
    
        while(1)
        {
        }
    }
    

    打开串口把波特率调成115200bps,可以看到串口打印如下信息:

    Hello World! 
    printf Test! 
    Complie Time:11:12:36

     

    展开全文
  • printf 的串口输入重定向

    千次阅读 2014-07-22 20:29:12
    在调试的时候,可以使用Printf重定向来进行


    在调试的时候,可以使用Printf重定向来进行串口方式的调试,或者输出一些参数,经过设置后可像普通编程一样使用Printf进行输出


    设置步骤:

    先对Use Micro LIB进行勾选



    然后再在函数中包涵文件:


    #include "stm32f10x_lib.h"和#include <stdio.h>


    最后对于重定向函数进行声明:

    /****************************************************************************
    * 名    称:int fputc(int ch, FILE *f)
    * 功    能:printf函数的输出驱动函数
    * 入口参数:无
    * 出口参数:无
    * 说    明:
    * 调用方法:无 
    ****************************************************************************/
    int fputc(int ch,FILE *f)
    {
      USART_SendData(USART2, (unsigned char) ch);
      while (!(USART2->SR & USART_FLAG_TXE));
      return (ch);
    }
    /****************************************************************************
    * 名    称: fgetc(FILE *f)
    * 功    能: 键盘输入重定向函数
    * 入口参数:无
    * 出口参数:无
    * 说    明:
    * 调用方法:无 
    ****************************************************************************/
    int  fgetc(FILE *f)
    {
      while(!USART_GetFlagStatus(USART2,USART_FLAG_RXNE)==SET);
      return (USART_ReceiveData(USART2));
    }
    

    展开全文
  • 单片机printf函数,串口重定向

    千次阅读 2018-03-19 15:27:38
    搜索fputc函数,将fputc函数中的串口配置修改成所应用的串口,然后就可以使用printf函数打印了

    搜索fputc函数,将fputc函数中的串口配置修改成所应用的串口,然后就可以使用printf函数打印了


    展开全文
  • Keil C51重定向printf到串口

    万次阅读 2019-10-27 23:22:42
    打印调试信息时我们习惯使用printf函数,但是在Keil C51环境下,由于我们的程序是下载到单片机里,使用printf函数时不能直接打印到串口上,这个时候就需要我们对printf函数输出重定向
  • stm32的串口重定向方法在英飞凌单片机里是不适用的,这个工程重写了一个pirntf函数来实现串口打印功能,方便调试,具体细节可以看我的博客。注意这个解决方案不是真正的重定向,只能实现字符串打印功能
  • STM32单片机(7) 串口通信printf重定向

    千次阅读 2017-06-21 00:40:31
    此处是为了在串口中断通信[参见另一篇文章]中添加printf重定向功能 1、添加头文件 #include 2、工程“Target" -->勾选 "Use MicroLIB" 3、重定义fputc函数
  • 在使用stm32单片机时,大家都会将printf函数重定向串口方便调试,定义一个如下所示的函数,同时在文件头引用stdio.h即可: #include "stdio.h" int fputc( int ch, FILE *f ){ USART_SendData(USART1,(u8) ch )...
  • 51单片机printf重定向

    2020-04-26 22:11:05
    从keil的帮助文档里我们可以看到,printf是基于putchar实现的,所以我们只要重新实现putchar,就可以实现printf的重定向,即可以将printf用在其他串口上。 putchar的函数实现在…/C51/LIB下可以找到。 #include <...
  • 在IAR环境下,用寄存器实现STM8S003单片机串口打印函数printf功能。只需要将添加头文件stdio.h并将输出字符函数重定向即可。
  • usart这部分代码我也是从网上copy出来的,一下是作者的解释: 简单地说:想在mdk 中用printf,需要同时重定义fputc函数和避免使用...例如:printf输出到串口,需要将fputc里面的输出指向串口(重定向),方法如下:
  • 以前在单片机上使用OLED或者做...到网上一查还真有,但是大多数说的都做串口重定向,而且说的也不是很详细,但是经过两天的研究也大概了解了怎么去做printf的重定向。首先要了解什么是重定向,简单来说printf的...
  • PIC单片机printf()函数重定向

    千次阅读 2018-09-15 11:20:14
    基本信息: ...单片机:PIC18F66K22 下载器:PICKit3 一、串口初始化 /* 函数名:void USART1_Init( void ) 功能:使用的是串口1,串口初始化 */ void USART1_Init( void ) { TRISC6 = 1; ...
  • printf("hello world") ,后面也经常用来调试打印信息,但是我们在单片机开发的时候 printf 就用不了,因为 printf 会打印在命令行窗口上,但是单片机上肯定没有,所以我们通过改写函数,将 printf 重定向串口之上...
  • 1、配置好串口相关参数 2、可新建一个usart.c,或将代码存放到其他位置 3、添加如下代码 #ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf set to '...
  • 文章目录 在main.c中添加下面的代码 ...int fputc(int ch, FILE *f) //STM8 printf函数重定向 { while ( (USART2->SR&0x80) == 0 ); USART2->DR = (uint8_t)ch; return ch; } ...
  • 单片机程序,串口打印。要注意串口重定向的问题。 #include <stdio.h> //#pragma pack(4) //单片机程序,串口打印 void USART_SendString( char *str) { while (*str != '\0') { printf("%c", *str); ...
  • 最近有同学在51单片机的学习过程中困扰如何使用单片机串口在上位机串口助手上输出显示的问题,其实很多开发环境都支持使用C语言里面最常用的printf函数,Keil中也不例外,不仅仅是C52、keil下其他51系列单片机如STC...
  • 简介 UART: 通用异步收发传输器(Universal Asynchronous ...作为并行输入信 号转成串行输出信号的芯片,UART 通常被集成于其他通讯接口的连结上。 USART:(Universal Synchronous/Asynchronous Receiver/Tran...
1 2 3 4 5 ... 20
收藏数 676
精华内容 270
关键字:

单片机如何把串口重定向