STM32串口格式化输出的几种方法介绍

慧生活 20230725

  • STM32

在前两天介绍的串口输出中,函数Usart1_SendStr只能输出字符串,如果想输出一个整型或者其他类型的数据,单独用这个函数是不能实现的。今天跟大家简单介绍下格式化输出,让输出不再只有字符串。

格式化输出有****3种方法 :sprintf结合usart输出;使用MicroLIB调用printf输出;重定向输出。

1、sprintf结合usart输出

sprintf指的是字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。sprintf 是个变参函数。

函数原型

int sprintf( char *buffer, const char *format, [ argument] … );

参数列表:

buffer :char型指针,指向将要写入的字符串的缓冲区。

format :格式化字符串。

[argument]... :可选参数,可以是任何类型的数据。

通过sprintf把想要输出的数据格式化为字符串数据,再调用Usart1_SendStr就能输出任意想要输出的数据了。

2、使用MicroLIB调用printf输出

勾选Use MicroLIB,调用printf,再开启半主机模式,就可以输出数据了。但是使用MicroLIB存在bug,在跑操作系统时偶尔会出现死机的现象,所以这种方法不推荐使用。

3、重定向输出

在Keil的下载路径下找到Retarget.c文件,打开并复制整个文件,粘贴到串口源文件中,做一定的修改,如下所示。

#pragma import(__use_no_semihosting_swi)


struct __FILE { int handle; /* Add whatever you need here */ };
FILE __stdout;


int fputc(int ch, FILE *f) {
  while((USART1- >SR & (1< < 7)) == 0);
  USART1- >DR = ch;
  return ch;
}


int ferror(FILE *f) {
  /* Your implementation of ferror */
  return EOF;
}


void _sys_exit(int return_code) {
  while (1);    /* endless loop */
}

修改完成后,就可以直接调用printf输出任意类型的数据了。这种方法跑操作系统时不会有bug,为了避免后期跑操作系统出现死机或其它bug,推荐使用这种重定向输出的方法。

查看全文

点赞

慧生活

作者最近更新

  • 智慧管网新范式:凯米斯科技岸边站系统重塑城市污水运维体系
    慧生活
    1天前
  • 瑞之辰压力传感器,尺寸小可替代进口
    慧生活
    3天前
  • 从空间建模到生命存在:高精度传感如何让机器“看懂”世界
    慧生活
    3天前

期刊订阅

相关推荐

  • STM32图形加速器上新:NeoChrome GPU让UI体验再度飞跃

    2022-05-20

  • 基于STM32腾讯云物联网平台和微信小程序应用

    2022-05-30

  • ESP8266应用案例 基于STM32核心板获取网络天气数据

    2022-05-30

  • 意法半导体STM32全系产品部署Microsoft Azure RTOS开发包

    2022-06-10

评论0条评论

×
私信给慧生活

点击打开传感搜小程序 - 速览海量产品,精准对接供需

  • 收藏

  • 评论

  • 点赞

  • 分享

收藏文章×

已选择0个收藏夹

新建收藏夹
完成
创建收藏夹 ×
取消 保存

1.点击右上角

2.分享到“朋友圈”或“发送给好友”

×

微信扫一扫,分享到朋友圈

推荐使用浏览器内置分享功能

×

关注微信订阅号

关注微信订阅号,了解更多传感器动态

  • #{faceHtml}

    #{user_name}#{created_at}

    #{content}

    展开

    #{like_count} #{dislike_count} 查看评论 回复

    共#{comment_count}条评论

    加载更多

  • #{ahtml}#{created_at}

    #{content}

    展开

    #{like_count} #{dislike_count} #{reback} 回复

  • #{ahtml}#{created_at}

    #{content}

    展开

    #{like_count} #{dislike_count} 回复

  • 关闭
      广告