关于printf打印函数重定义问题

2019-10-15 18:14发布

这几天移植了原子WIFI模块TCP Sever模式的程序
原子用的USART3连接WIFI模块,我的板子是USART1的
移植过来 除了串口变了外 程序基本上没变 但是接受数据一直
出错 最后发现是发送数据的几个函数中都用的Printf函数
感觉是这里数据互相干扰了  变重定义了打印函数 最后
程序果然正常了
操作实际上很简单
//重定义fputc
int fputc(int ch, FILE *f)
{      
       
        while((USART3->SR&0X40)==0);//Ñ-»··¢Ëí,Ö±μ½·¢Ëííê±Ï   
    USART3->DR = (u8) ch;      
        return ch;
}

里的USART1改成USART3  但是必须添加usart3_init函数
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
hlz1490781325
1楼-- · 2019-10-15 23:23
printf函数在MDK中,为什么需要重定向,楼主有没有深究???
DongInker
2楼-- · 2019-10-16 03:55
51里重新定义格式化打印函数
u8 _IDATA PrintfBuf[64];
#define DbgSendByte(m) Uart0Send(m)

u8 debug_printf(char *format,...)
{
        u8 length = 0,i = 0;

        va_list arg_ptr;

        va_start (arg_ptr, format);           /* format string */
        vsprintf (PrintfBuf, format, arg_ptr);
        va_end (arg_ptr);
        length = strlen(PrintfBuf);
        for(i=0;i<length;i++)
                DbgSendByte(PrintfBuf[i]);

        return length;
}
过眼烟云
3楼-- · 2019-10-16 09:46
 精彩回答 2  元偷偷看……
hlz1490781325
4楼-- · 2019-10-16 15:35
过眼烟云 发表于 2016-12-24 17:07
肯定是有问题的时候  比如当你需要用串口1但是程序其他部分调用了Printf函数 就可能出现问题

我是想问重定向的本质是什么,我看到原子哥有说,这是半主机模式,就想问一下你是否研究过

一周热门 更多>