精华内容
下载资源
问答
  • 51串口重定向
    2021-11-19 12:08:41

    #include "stdio.h"

    void Uart1Init(void)        //115200bps@11.0592MHz
    {
        SCON = 0x50;        //8位数据,可变波特率
        AUXR |= 0x40;        //定时器时钟1T模式
        AUXR &= 0xFE;        //串口1悬着定时器1为波特率发生器
        TMOD &= 0x0F;        //选择定时器模式
        TL1 = 0xE8;        //设置定时初始值
        TH1 = 0xFF;        //设置定时初始值
        ET1 = 0;        //禁止定时器%d中断
        TR1 = 1;        //定时器1开始计时
    }

    void UART1_SendData(char dat)
    {
        ES=0;            //关串口中断
        SBUF=dat;            
        while(TI!=1);    //等待发送成功
        TI=0;            //清除中断标志位
        ES=1;            //打开串口中断
    }
    void UART1_SendString(char *s)
    {
        while(*s)//检测字符串结束符
        {
            UART1_SendData(*s++);//发送当前字符    }
    }

    //串口重定向

    char putchar(char c)
    {
        UART1_SendData(c);
        return c;
    }
     

    更多相关内容
  • stm32f103串口printf,scanf函数串口重定向stm32f103串口printf,scanf函数串口重定向串口重定向的步骤:首先配置USART串口(初始化这些)重定向函数首先配置USART串口(初始化这些)先看代码uart.c中#include #include ...

    stm32f103串口printf,scanf函数串口重定向

    stm32f103串口printf,scanf函数串口重定向

    串口重定向的步骤:

    首先配置USART串口(初始化这些)

    重定向函数

    首先配置USART串口(初始化这些)

    先看代码

    uart.c中

    #include

    #include

    void usart2_init(unsigned long blud)

    {

    GPIO_InitTypeDef GPIO_InitStruct;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

    //PA2-TX

    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;

    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;

    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOA,&GPIO_InitStruct);

    //PA3_RX

    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;

    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;

    GPIO_Init(GPIOA,&GPIO_InitStruct);

    USART_InitTypeDef USART_InitStruct;

    USART_InitStruct.USART_BaudRate = blud;

    USART_InitStruct.USART_HardwareFlowControl =USART_HardwareFlowControl_None;

    USART_InitStruct.USART_Mode =USART_Mode_Rx | USART_Mode_Tx;

    USART_InitStruct.USART_Parity = USART_Parity_No;

    USART_InitStruct.USART_StopBits = USART_StopBits_1;

    USART_InitStruct.USART_WordLength =USART_WordLength_8b;

    USART_Init(USART2,&USART_InitStruct);

    USART_Cmd(USART2,ENABLE);

    /*

    USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);

    NVIC_InitTypeDef NVIC_InitStruct;

    NVIC_InitStruct.NVIC_IRQChannel = USART2_IRQn;

    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;

    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;

    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

    NVIC_Init(&NVIC_InitStruct);*/

    }

    void sendbit(USART_TypeDef* USARTx,unsigned char uchar)

    {

    USART_SendData(USARTx,uchar);

    while(!USART_GetFlagStatus(USARTx,USART_FLAG_TXE));

    }

    void senstring(USART_TypeDef* USARTx,char* string)

    {

    char* str=string;

    while(*str)

    {

    sendbit(USARTx,*str);

    str++;

    }

    }

    int fputc(int ch,FILE *f)

    {

    sendbit(UART_PRINTF,(uint8_t)ch);

    return ch;

    }

    /*int fputc(int ch,FILE *f)

    {

    while(USART_GetFlagStatus(USART2,USART_FLAG_TC) != SET);

    USART_SendData(USART2,(unsigned char)ch);

    while(USART_GetFlagStatus(USART2,USART_FLAG_TC) != SET);

    return (ch);

    }

    */

    int fgetc(FILE *f)

    {

    while(!USART_GetFlagStatus(USART_SCANF,USART_FLAG_RXNE));

    return (int)USART_ReceiveData(USART_SCANF);

    }

    main函数中

    int main(void)

    {

    int a;

    usart2_init(115200);

    while(1)

    {

    printf("Hello");

    scanf("%d",&a);

    printf("a+1=%d",a+1);

    }

    }

    附上效果图吧

    70dc8cd5cae0f43f2bc54e4c100fbc0a.png

    值得注意的是重定义函数之后之前定义的NVIC中断都不需要了

    stm32f103串口printf,scanf函数串口重定向相关教程

    展开全文
  • 输入输出重定向详解

    2021-05-21 13:35:51
    输入重定向 输入重定向是指把命令(或可执行程序)的标准输入重定向到指定的文件中。也就是说,输入可以不来自键盘,而来自一个指定的文件。所以说,输入重定向主要用于改变一个命令的输入源,特别是改变那些需要...

    1. 标准输入与输出

    我们知道,执行一个shell命令行时通常会

    1. 标准输入与输出我们知道,执行一个shell命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。

    我们以cat命令为例,cat命令的功能是从命令行给出的文件中读取数据,并将这些数据直接送到标准输出。若使用如下命令:

    $ cat config

    将会把文件config的内容依次显示到屏幕上。但是,如果cat的命令行中没有参数,它就会从标准输入中读取数据,并将其送到标准输出。例如:

    $ cat

    Hello world

    Hello world

    Bye

    Bye

    $

    用户输入的每一行都立刻被cat命令输出到屏幕上。

    另一个例子,命令sort按行读入文件正文(当命令行中没有给出文件名时,表示从标准输入读入),将其排序,并将结果送到标准输出。下面的例子是从标准输入读入一个采购单,并将其排序。

    $ sort

    bananas

    carrots

    apples

    apples

    bananas

    carrots

    $

    这时我们在屏幕上得到了已排序的采购单。

    直接使用标准输入/输出文件存在以下问题:

    输入数据从终端输入时,用户费了半天劲输入的数据只能用一次。下次再想用这些数据时就得重新输入。而且在终端上输入时,若输入有误修改起来不是很方便。

    输出到终端屏幕上的信息只能看不能动。我们无法对此输出作更多处理,如将输出作为另一命令的输入进行进一步的处理等。

    为了解决上述问题,Linux系统为输入、输出的传送引入了另外两种机制,即输入/输出重定向和管道。

    输入重定向

    输入重定向是指把命令(或可执行程序)的标准输入重定向到指定的文件中。也就是说,输入可以不来自键盘,而来自一个指定的文件。所以说,输入重定向主要用于改变一个命令的输入源,特别是改变那些需要大量输入的输入源。

    例如,命令wc统计指定文件包含的行数、单词数和字符数。如果仅在命令行上键入:

    $ wc

    wc将等待用户告诉它统计什么,这时shell就好象死了一样,从键盘键入的所有文本都出现在屏幕上,但并没有什么结果,直至按下<ctrl+d>,wc才将命令结果写在屏幕上。

    如果给出一个文件名作为wc命令的参数,如下例所示,wc将返回该文件所包含的行数、单词数和字符数。

    $ wc /etc/passwd

    20 23 726 /etc/passwd

    $

    另一种把/etc/passwd文件内容传给wc命令的方法是重定向wc的输入。输入重定向的一般形式为:命令$ wc < /etc/passwd

    20 23 726

    $

    另一种输入重定向称为here文档,它告诉shell当前命令的标准输入来自命令行。here文档的重定向操作符使用

    >this text forms the content

    >of the here document,which

    >continues until the end of

    >text delimter

    >delim

    4 17 98

    在<

    由于大多数命令都以参数的形式在命令行上指定输入文件的文件名,所以输入重定向并不经常使用。尽管如此,当要使用一个不接受文件名作为输入参数的命令,而需要的输入内容又存在一个文件里时,就能用输入重定向解决问题。

    阅读(8043) | 评论(0) | 转发(3) |

    展开全文
  • #include 头文件 #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define ... 这里是用来进行printf的重定向的,就是我们像用我们C语言标准库的的printf一样来适用prinf来作为串口的输出。

    #include  头文件

    #ifdef __GNUC__

    #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

    #else

    #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

    #endif

    PUTCHAR_PROTOTYPE

    {

    USART_SendData(EVAL_COM1, (uint8_t) ch);

    while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET)

    {}

    return ch;

    }

    定义了以上的

    然后就可以调用 printf("\n\rPlease enter valid number between 0

    and 9");

    ===============================================================

    C库函数重定向

    用户能定义自己的C语言库函数,连接器在连接时自动使用这些新的功能函

    数。这个过程叫做重定向C语言库函数,如下图所示。

    举例来说,用户有一个I/O设备(如UART)。本来库函数fputc()是把字符输出

    到调试器控制窗口中去的,但用户把输出设备改成了UART端口,这样一来,

    所有基于fputc()函数的printf()系列函数输出都被重定向到UART端口上去

    了。

    下面是实现fputc()重定向的一个例子:

    extern void sendchar(char*ch);

    int fputc(intch,FILE*f)

    char tempch=ch;

    sendchar(&tempch);

    return ch;

    }这个例子简单地将输入字符重新定向到另一个函数sendchar(),sendchar()

    假定是个另外定义的串口输出函数。在这里,fputc()就似乎目标硬件和标

    准C库函数之间的一个抽象层。

    这里是用来进行printf的重定向的,就是我们像用我们C语言标准库的的printf一样来适用prinf来作为串口的输出。

    展开全文
  • printf函数的重定向实现(2014-09-05 13:50:29)标签:佛学在嵌入式系统中,串口常用来辅助调试输出一些调试信息。所以有必要实现串口的格式化输出功能,这可以由3种方法实现(就我目所知).1)使用系统库函数printf(),这...
  • C语言重定向fputc函数

    千次阅读 多人点赞 2018-03-26 19:43:18
    重定向 即自己重写C的库函数 提示 链接器检查到用户编写了与C库函数相同名字的函数时,优先调用用户编写函数,这样就可实现重定向 重定向printf()函数 需重写fputc()这个c标准库函数(printf()在c标准...
  • 关于printf重定向串口的问题简单地说:想在mdk 中用printf,需要同时重定义fputc函数和避免使用semihosTIng(半主机模式),标准库函数的默认输出设备是显示器,要实现在串口或LCD输出,必须重定义标准库函数里调用...
  • Linux 终端串口重定向

    2022-03-29 10:42:17
    Linux 终端串口重定向 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <sys/ioctl.h> #include <unistd.h> #define LOG_FILE ...
  • 使用printf打印信息是在程序调试环节非常重要的一种手段,但是printf默认是打印到终端的,实际使用过程中不一定能满足需求,那么能不能把printf的打印重定向到文件或者串口呢? 答案当然是可以的。使用如下代码,就...
  • 这一节我们讲一讲怎样将串口的输出重定向到printf。 对应printf这个函数大家一定非常熟悉,这个函数用于打印输出。一般c语言编程的入门程序,就是用printf打印hello world。 而在单片机中,裸机编程的条件下,并...
  • 如果在STM32中使用串口时,不能直接使用printf函数。...///重定向c库函数printf到串口重定向后可使用printf函数 int fputc(int ch, FILE *f) { /* 发送一个字节数据到串口 */ USART_SendData(DEBUG_USARTx, (ui
  • STM32—重定向printf和getchar函数到串口

    千次阅读 多人点赞 2019-07-30 17:17:15
    在STM32测试串口的时候经常需要在开发板和上位机之间传输数据,我们可以用c语言中的printf()函数和getchar()函数来简化传输。 以printf()为例: printf()函数实际上是一个宏,最终调用的是 fputc(int ch,FILE *f)这...
  • 文章目录一、前言二、CubeMX2.1、选择串口2.2、Parameter Settings三、代码3.1、usart.h3.2、usart.cKeilIARSTM32CubeIDE3.3、main.c 一、前言 **printf是调试程序与打印信息的强大工具,必须要掌握。**在实际项目上...
  • keil中串口重定向问题

    2018-08-17 09:45:01
    重定向是指用户可以自己重写C语言的库函数,当连接器检查到用户编写了与C语言库函数相同名字的函数时,优先采用用户编写的函数,这样就可以对库函数进行修改了。 若要printf( )函数工作,需要把printf( )函数重新...
  • 1.建立工程2.核心:添加新文件usar_fputc.c (名字随便自己命名),把文件添加到项目中去#include "stdio.h"#include "stm32f1xx_hal.h"extern ...//重写这个函数,重定向printf函数到串口/*fputc*/int fputc(int c, ...
  • 这段代码就是通过对库函数fputc的重新定义,且在fputc函数中调用HAL_UART_Transmit函数来实现库函数fputc的重定向(库函数printf内部要调用fputc函数)。 最后在再引入头文件stdio.h,就可以再main.c函数处使用...
  • linux重定向串口打印到telnet

    千次阅读 2018-01-25 18:09:16
    在嵌入式开发中,我们都是...需要一种方法把串口所有输出重定向到telnet。  这就涉及到一些终端概念,可以参考上篇博文linux下tty, ttyn, pts, pty, ttySn, console理解。主要是利用tty的ioctl重定向方法来实现重
  • 2、Keil添加C语言头文件 #include "stdio.h" 3、Keil添加重定向语句 int fputc(int ch,FILE *f) { uint32_t temp = ch; HAL_UART_Transmit(&huart1,(uint8_t *)&temp,1,1000); //huart3是串口的句柄 ...
  • 在进行STM32开发时,需要将日志打印出来,直接使用C语言的库函数printf是不起作用的,此时就需要我们将串口重定向printf函数。首先我们需要在keil集成开发环境中勾选STM32官方的微库,如下图所示: 然后就是重写...
  • 2、重定向fputc 在usart.c里面 int fputc(int ch, FILE *f) { USART_SendData(USART1, (uint8_t)ch); //将字符强制转换为无符号整型 while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==RESET); //检测 ...
  • printf重定向

    2021-05-29 20:23:20
    重定向printf函数到串口输出前言一、printf函数介绍二、重定向实现在MDK中使用MicroLib库总结 前言 在初学C语言时,最常用的一种调试方式或者显示数据方式就是利用printf函数将自己想看的数据显示出来,但是到了STM...
  • 提示:以前在学stm8的时候非常不解用printf串口打印为什么要加上重定义,它定义在了什么地方!为什么函数可以有不确定的参数(学了这么久,这也从没有见过啊!)在函数的参数中,今天来说明一下! 提示:文末有个...
  • STM32使用串口重定向系统printf函数输出时出现一初始化或使用printf函数系统卡死的原因及解决办法 在STM32开发当中,会经常使用系统自带的printf函数来查看调试输出,通常是将系统的printf输出内容发往串口,具体...
  • printf重定向,在STM32的IAR环境下的printf重定向实例程序
  • 利用STM32F4串口重定向Printf()

    千次阅读 2018-07-19 12:08:58
     我们需要将PA9和PA10当做USART1的Tx和Rx引脚来用,也就是说此节课的PA9和PA10已不是通用IO的作用了,而是芯片内部的外设的接口引脚。STM32将这种应用叫做“I0引脚复用”,这也就说PA9将被配置成“复用推挽输出模式...
  • C语言中,打印函数主要包括printf/sprintf/fprintf/snprintf等等,目的是将“给定的内容”按照“指定的格式”输出到“指定目标内”。通常要使用时,需要包括#inlcude <stdio.h>头文件。 用法为:void ...
  • printf 重定向

    千次阅读 2014-04-17 09:25:47
    usart这部分代码我也是从网上copy出来的,一下是作者的解释: 简单地说:想在mdk 中用printf,需要同时重定义fputc函数和避免使用...例如:printf输出到串口,需要将fputc里面的输出指向串口(重定向),方法如下: 
  • usart这部分代码我也是从网上copy出来的,一下是作者的解释: 简单地说:想在mdk 中用printf,需要同时重定义fputc函数和避免使用...例如:printf输出到串口,需要将fputc里面的输出指向串口(重定向),方法如下:
  • STM32关于printf重定向串口

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,784
精华内容 1,113
关键字:

c语言串口重定向