你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于串口打印函数测试

[复制链接]
thereborn000 提问时间:2019-4-16 09:34 /
我在用stm32f107和dw1000做测距,现在希望通过串口通信打印所测距离。不知道官方自带程序中的printf2可不可以显示,或者是否需要再自己写打印函数?我可以用什么简单的输入输出测试一下串口通信是否配置成功吗?
  1. #include <stdio.h>
  2. #include <stdarg.h>
  3. #include <stdlib.h>
  4. void printf2(const char *format, ...)
  5. {
  6.         va_list list;
  7.         va_start(list, format);

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

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

  12.         USART_puts(s);

  13.         free(s);
  14.         va_end(list);
  15.         return;
  16. }
复制代码


收藏 评论5 发布时间:2019-4-16 09:34

举报

5个回答
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就需要自己写打印的代码。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

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

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

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


  10. void USART_putstr(const char *s)//向串口输出字符串
  11. {
  12.         int i;
  13.         for(i=0; s[i]!=0; i++)
  14.         {
  15.                 USART_putc(s[i]);
  16.         }
  17. }

复制代码

这样的可以吗?
废鱼 回答时间: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);
}

评分

参与人数 1ST金币 +2 收起 理由
thereborn000 + 2

查看全部评分

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版