小程序
传感搜
传感圈

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

2023-07-25 13:17:19
关注

在前两天介绍的串口输出中,函数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,推荐使用这种重定向输出的方法。

您觉得本篇内容如何
评分

评论

您需要登录才可以回复|注册

提交评论

广告

慧生活

这家伙很懒,什么描述也没留下

关注

点击进入下一篇

基于STM32设计的智能门锁(华为云IOT)

提取码
复制提取码
点击跳转至百度网盘