0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

冬至子 来源:纷纭杂谈 作者:CY_CHEN 2023-07-22 10:16 次阅读

在前两天介绍的串口输出中,函数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
    +关注

    关注

    2270

    文章

    10906

    浏览量

    356565
  • printf函数
    +关注

    关注

    0

    文章

    31

    浏览量

    5899
  • USART串口
    +关注

    关注

    0

    文章

    32

    浏览量

    6867
收藏 人收藏

    评论

    相关推荐

    介绍stm32串口isp实现方法

    这里介绍stm32串口isp实现方法,包含st官方协议整理和实现代码。已提交到github 。概述stm32
    发表于 08-05 07:15

    使用STM32 BSP中的串口驱动在串口输出HelloWorld

    目录前言串口初始重定向C库的printf函数到串口在main中添加测试代码完整的main.c代码编译下载程序效果扩展实验1:格式化字符
    发表于 08-11 06:22

    怎样将stm32串口格式化打印字符的函数进行封装呢

    怎样将stm32串口格式化打印字符的函数进行封装呢?
    发表于 11-26 06:38

    基于RTOS的STM32串口通信有哪几种方法

    串行端口的通信方式是指什么?基于RTOS的STM32串口通信有哪几种方法呢?
    发表于 12-07 08:03

    有什么方法可以实现stm32串口接受不定长数据呢

    有什么方法可以实现stm32串口接受不定长数据呢?有哪几种方法
    发表于 12-08 06:59

    2.6 python字符格式化

    2.6 python字符格式化格式化输出,主要有三种方式使用 % 进行格式化使用 format 函数进行
    发表于 02-21 16:28

    格式化硬盘

    格式化硬盘 软盘只需要一次格式化,硬盘却需要两级,即低级格式化和高级格式化。  硬盘的低级格式化在每个磁片上划分
    发表于 12-25 15:40 1097次阅读

    格式化是什么

    格式化(format)是指对磁盘或磁盘中的分区(partition)进行初始的一种操作,这种操作通常会导致现有的磁盘或分区中所有的文件被清除。格式化通常分为低级格式化和高级
    的头像 发表于 01-09 15:20 8.6w次阅读

    STM32串口下载软件FLYMCU免费下载

    本文档的主要内容详细介绍的是STM32串口下载软件FLYMCU免费下载。
    发表于 12-16 08:00 33次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b>下载软件FLYMCU免费下载

    计算机扩展RS-232串口的三种方法和区别及应用

    计算机扩展串口的三种方法现在的计算机,特别是笔记本计算机基本上没有带RS-232串口了,但是在许多工业通信的场合需要用到RS-232和RS-485
    的头像 发表于 01-21 17:14 1.2w次阅读

    剖析提升字符格式化效率的小技巧

    一、前言 在嵌入式项目开发中,字符格式化是很常见的操作,我们一般都会使用 C 库中的 sprintf 系列函数来完成格式化。 从功能上来说,这是没有问题的,但是在一些时间关键场合,字符
    的头像 发表于 04-30 13:43 1609次阅读
    剖析提升字符<b class='flag-5'>串</b><b class='flag-5'>格式化</b>效率的小技巧

    stm32串口代码详解

    stm32串口
    发表于 12-24 18:38 52次下载
    <b class='flag-5'>stm32</b><b class='flag-5'>串口</b>代码详解

    python字符格式化

    python字符格式化 格式化输出,主要有三种方式 使用 % 进行格式化 使用 format 函数进行
    的头像 发表于 02-21 16:28 1593次阅读
    python字符<b class='flag-5'>串</b><b class='flag-5'>格式化</b>

    格式化字符常量f-strings一些不常见的特性

    【导语】:本文介绍了“格式化字符常量”f-strings一些不常见的特性,包括:格式化日期和时间、同时打印变量名和变量值等,嵌套使用f-strings等,此外与其他
    的头像 发表于 08-15 12:00 1170次阅读

    STM32串口输出字符串几种方法

    C语言中有个很好用的函数:printf()。printf()是格式化输出函数,可以按照规定格式输出消息。相信每个工程师开始学习的C语言第一课都会遇到printf(“Hello Worl
    的头像 发表于 07-22 10:44 5928次阅读
    <b class='flag-5'>STM32</b>—<b class='flag-5'>串口</b><b class='flag-5'>输出字符串</b>的<b class='flag-5'>几种方法</b>