全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 控制/MCU >

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

时间:2023-07-22 10:16

人气:

作者:admin

标签: 串口  输出    STM32  格式化 

导读:在前两天介绍的串口输出中,函数Usart1_SendStr只能输出字符串,如果想输出一个整型或者其他类型的数据,单独用这个函数是不能实现的。...

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

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信