关于串口打印函数测试
我在用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;
}
你自己调用下printf2不就知道了? shanji 发表于 2019-4-16 09:49
你自己调用下printf2不就知道了?
怎么调用呀?在主函数里吗?那还需要再写读数据的函数吗?
用串口打印就可以。如果没有用到printf,可以将串口重定义到printf,如果printf占用了,而打印的又不是该串口时,可以使用printf2打印。USART_puts就需要自己写打印的代码。 安 发表于 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);
}
}
这样的可以吗?
#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]