打印
[STM32F1]

串口重定向使用Printf

[复制链接]
5160|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dawei360|  楼主 | 2014-5-27 00:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 dawei360 于 2014-5-27 00:18 编辑

printf 函数实在是太好用了,怎么利用串口重定向使用Printf 函数呢?

1、添加头文件#include “stdio.h”


2、51 中串口重定向:只需要在初始化完串口后,添加TI=1;



3、STM32 中的使用:
int fputc(int ch, FILE *f)
{

USART_SendData(USART1, (uint8_t) ch);

while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);

return ch;
}

修改一下选中Use MicroLIB   Target——Code Generation——选中Use MicroLIB

4、arm9 中的重定向:以S3C2416为例子,
#include <stdarg.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>


void Uart_Printf(char *fmt,...)
{
        __va_list ap;
        char string[1024];

        va_start(ap,fmt);
        vsprintf(string,fmt,ap);
        va_end(ap);

        Uart_0_SendString(string); //default send from uart0

}
沙发
mmuuss586| | 2014-5-27 08:23 | 只看该作者
啥意思??
有问题还是分享经验啊

使用特权

评论回复
板凳
Three_water| | 2014-5-27 08:40 | 只看该作者
51怎么使用Printf 举个例子

使用特权

评论回复
地板
dawei360|  楼主 | 2014-5-28 13:10 | 只看该作者
#include <stdio.h>
void UartInit(void)                //9600bps@11.0592MHz
{
        SCON = 0x50;                //8位数据,可变波特率
        AUXR &= 0xBF;                //定时器1时钟为Fosc/12,即12T
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                //设定定时器1为16位自动重装方式
        TL1 = 0xE8;                //设定定时初值
        TH1 = 0xFF;                //设定定时初值
        ET1 = 0;                //禁止定时器1中断
        TR1 = 1;                //启动定时器1
                    TI = 1;
}
然后就可以用printf 函数了

使用特权

评论回复
5
dawei360|  楼主 | 2014-5-28 13:10 | 只看该作者
mmuuss586 发表于 2014-5-27 08:23
啥意思??
有问题还是分享经验啊

分享分享

使用特权

评论回复
6
rtgchym| | 2014-5-29 08:45 | 只看该作者
STM32用printf经常会出现一些莫名其妙的问题。。所以很少用这个。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

735

帖子

5

粉丝