thereborn000 发表于 2019-4-16 09:34:40

关于串口打印函数测试

我在用stm32f107和dw1000做测距,现在希望通过串口通信打印所测距离。不知道官方自带程序中的printf2可不可以显示,或者是否需要再自己写打印函数?我可以用什么简单的输入输出测试一下串口通信是否配置成功吗?
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
void printf2(const char *format, ...)
{
        va_list list;
        va_start(list, format);

        int len = vsnprintf(0, 0, format, list);
        char *s;

        s = (char *)malloc(len + 1);
        vsprintf(s, format, list);

        USART_puts(s);

        free(s);
        va_end(list);
        return;
}

shanji 发表于 2019-4-16 09:49:10

你自己调用下printf2不就知道了?

thereborn000 发表于 2019-4-16 09:53:44

shanji 发表于 2019-4-16 09:49
你自己调用下printf2不就知道了?

怎么调用呀?在主函数里吗?那还需要再写读数据的函数吗?

发表于 2019-4-16 11:14:40

用串口打印就可以。如果没有用到printf,可以将串口重定义到printf,如果printf占用了,而打印的又不是该串口时,可以使用printf2打印。USART_puts就需要自己写打印的代码。

thereborn000 发表于 2019-4-16 11:44:15

安 发表于 2019-4-16 11:14
用串口打印就可以。如果没有用到printf,可以将串口重定义到printf,如果printf占用了,而打印的又不是该串 ...

没有用到printf,怎样重定义呢?
void USART_putc(char c)//向串口输出字符
{
        //while(!(USART2->SR & 0x00000040));
        //USART_SendData(USART2,c);
        /* e.g. write a character to the USART */
        USART_SendData(USART1, c);

        /* Loop until the end of transmission */
        while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)        ;
}


void USART_putstr(const char *s)//向串口输出字符串
{
        int i;
        for(i=0; s!=0; i++)
        {
                USART_putc(s);
        }
}


这样的可以吗?

发表于 2019-4-16 13:46:15


#ifdef __GNUC__
/* With GCC/RAISONANCE, small debug_printf (option LD Linker->Libraries->Small debug_printf
   set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */

PUTCHAR_PROTOTYPE
{
        /* Place your implementation of fputc here */

        USART_SendData(USART1, ch);
        while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
        {
        }

        return (ch);
}
页: [1]
查看完整版本: 关于串口打印函数测试