串口打印数据输出

嵌入式系统重定向printf的三种方法 对printf()进行重定向的三种方法 方法1: 使用MircoLib并重定义fputc 方法2: 停用半主机模式,在MDK中使用标准库重定向printf() 方法3: 在Gcc中使用标准库重定向printf 1. MDK使用MircoLib并重定义fputc printf()函数实际上是调用了fputc()根据 format 字符串给出的格式打印输出到 stdout(标准输出)中。这两个函数都定义在<stdio.h>中: int printf(const char *format, ... 阅读详情

使用MDK的情况

1.使用printf库函数时,要加入头文件<stdio.h>

2.另外在keil里面需要把:use MicroLIB 勾选上,不然程序没办法在线调试。编译的时候不会报错。

3.当然可以不用库函数,自己写。正点原子里面的代码:

 //加入以下代码,支持printf函数,而不需要选择use MicroLIB

#if 1
 #pragma import(__use_no_semihosting) 
 //标准库需要的支持函数 
struct __FILE 
{ 
  int handle;

};

FILE __stdout; 
//定义_sys_exit()以避免使用半主机模式 
_sys_exit(int x) 
{ 
  x = x; 
} 
//重定义fputc函数 
int fputc(int ch, FILE *f)
{ 
  while((USART1->SR&0X40)==0);//循环发送,直到发送完毕 
  USART1->DR = (u8) ch; 
  return ch;
}
#endif


/*使用microLib的方法*/

/* 
int fputc(int ch, FILE *f)
{
  USART_SendData(USART1, (uint8_t) ch);

  while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {}	
  return ch;
}
int GetKey (void)

{

  while (!(USART1->SR & USART_FLAG_RXNE));

  return ((int)(USART1->DR & 0x1FF));
}
*/


不使用printf 自己使用vsprint函数

#include <stdarg.h>

uint8_t g_uartPrintStr[256];
void shellPrint(const char *fmt, ...)
{
    va_list ap;
    int i;
	
    va_start(ap, fmt);
    vsprintf((char *)g_uartPrintStr, fmt, ap);
	
    va_end(ap);


    for (i = 0; i < 128; i++)
    {
        if (g_uartPrintStr[i] == '\0')
        {
             break;
        }
    }


    shellSnd((uint8_t *)g_uartPrintStr , i);
}


再增加一个:

/*******************************************************************************
* Function Name  : int fputc(int ch, FILE *f)
* Description    : Retargets the C library printf function to the USART.printfÖØ¶¨Ïò
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
//int fputc(int ch, FILE *f)
//{
//  UART_SendByte(UART_0, (uint8_t) ch); /* Write a character to the USART */
//  while((LPC_UART0->LSR&0x40)==0){}; /* Loop until the end of transmission */
//  return ch;
//}

/*******************************************************************************
* Function Name  : int fgetc(FILE *f)
* Description    : Retargets the C library printf function to the USART.fgetcÖØ¶¨Ïò
* Input          : None
* Output         : None
* Return         : Read a character from the USART
*******************************************************************************/
//int fgetc(FILE *f)
//{
//  while((LPC_UART0->LSR&0x1)==0){};//* Loop until received a char */
//  return (UART_ReceiveByte(UART_0));/* Read a character from the USART and RETURN */
//}


Keil MDK printf()函数重定向(移植printf函数) 3.在主函数中调用Serial_Printf(),并在串口打印。3.测试:在主函数中使用printf函数,并在串口中打印。2.重写fputc函数,无需在串口头文件中声明该函数。2.点击target,勾选Use MicroLIB。//对printf重定向到串口。2.封装,并在串口头文件中声明。1.点击魔法棒,打开工程选项。1.在串口模块中添加头文件。//直接在主函数中使用。 阅读详情

相关推荐

Keil MDK开发实战:3种printf重定向方法全解析(附代码)

本文深入解析Keil MDK环境下printf()函数重定向的三种实战方法:经典单串口重定向、sprintf间接输出法及自定义日志模块封装。详细对比了各方案的实现原理、代码示例、适用场景及性能权衡,帮助嵌入式开发者根据项目需求选择最优调试输出方案,提升开发效率。

b0c1d2的博客 518

关于stm32中串口重定向问题详解(找个时间好好理解下)

usart这部分代码我也是从网上copy出来的,一下是作者的解释: 简单地说:想在mdk 中用printf,需要同时重定义fputc函数和避免使用semihosting(半主机模式),  标准库函数的默认输出设备是显示器,要实现在串口或LCD输出,必须重定义标准库函数里调用的与输出设备相关的函数.  例如:printf输出到串口,需要将fputc里面的输出指向串口(重定向),方法如下:

苦行僧 8239

使用Jlink的RTT Viewer实现串口打印输出数据功能

问题提出: 自从Keil MDK的编译器从AC5更新到AC6之后,原先使用的ITM串口输出方式编译时总提示错误, 因为结构替__FILE需要重新定义; 而目前又没有找到合适的让AC6编译通过的办法。 无奈之下,寻找能替代ITM串口输出的办法,还真找到了,就是RTT Viewer方式的串口输出。 问题解答: ITM方式串口输出,使用了MCU的SWO(Serial Wire Output)引脚, RTT方式串口输出,不需要通过SWO引脚,即可实现printf输出,而且性能(耗时)远远高于ITM方式。 如上图所

David_xtd的专栏 3314

MDK printf 、scanf 实现

在MDK中使用printf,需要同时重定义fputc函数和避免使用semihosting(半主机模式),标准库函数的默认输出设备是显示器,要实现在串口或LCD输出,必须重定义标准库函数里调用的与输出设备相关的函数。所以需要将printf需要调用的fputc里面的输出指向串口(重定向)。 方法1--使用微库:( 使用微库的话,不会使用半主机模式。) 选择use Microlib https:...

鱼藏剑 1901

使用Arduino接收串口数据并打印输出整数类型数据

通过以上的代码和步骤,你可以实现串口数据的接收和处理,以及与其他设备进行数据交互。上传完成后,打开串口监视器(Serial Monitor),选择与Arduino连接的串口端口,并设置波特率为9600。完成代码编写后,将Arduino板连接到计算机,并确保选择了正确的Arduino板和串口端口。在Arduino开发中,串口通信是一种常见的方式,可以用于与其他设备进行数据交互。本文将介绍如何使用Arduino接收串口数据,并将接收到的数据以整数类型进行打印输出。函数将读取整数类型的数据,并将其存储在。

PnServer的博客 1529

串口数据输出实时打印某一列MATALAB程序

串口打印某一列实时图形化显示MATALAB 程序源码。

weixin_45547778的博客 453

arduino数据类型串口打印输出

arduino数据类型串口打印输出

perseverance51博客 5146

VisionMaster 4.2.0安装

按照顺序安装。

XuXing_java的专栏 3790

STC15-串口通信打印输出数据printf函数与sprintf函数

本文主要比较了printf和sprintf函数在STC15单片机串口通信中的应用差异。printf直接将格式化数据输出到屏幕,而sprintf将数据存入指定缓冲区。文章详细介绍了STC15串口1的初始化配置,包括波特率设置、中断处理和数据发送函数实现,并解析了相关寄存器(SCON、PCON、SBUF等)的功能。示例代码展示了如何使用sprintf格式化字符串并通过printf输出,为单片机串口通信开发提供了实用参考。

weixin_41226265的博客 1916

ChatUI vs Ant Design X 技术选型对比

维度ChatUI优势轻量级、易上手、完美兼容 Ant Design全能型框架、企业级扩展性、深度模型集成局限性功能单一、缺乏高级交互支持学习曲线陡峭、包体积较大最佳实践单独聊天窗口集成整体智能助手系统开发通过对比可见,ChatUI 适合快速实现基础对话功能,而Ant Design X 更适合构建复杂的 AI 驱动应用。实际选择时需结合项目规模、团队技术栈和对交互复杂度的需求综合评估。

四楼没电梯的专栏 2265

从时序博弈到数据稳定:CS1237驱动中的信号滤波与卡尔曼实践

本文探讨了CS1237高精度ADC驱动在复杂工业环境中的信号处理挑战,重点介绍了一阶滤波与自适应卡尔曼滤波算法的实践应用。通过参数优化和动态调整策略,有效提升了数据稳定性和抗干扰能力,为嵌入式系统在噪声环境下的精密测量提供了可靠解决方案。

rnn9storyteller的博客 863

使用J-Link也能实现串口打印输出数据的功能

关注+星标公众号,不错过精彩内容作者 | strongerHuang微信公众号|嵌入式专栏嵌入式软件基本都会存在打印输出数据的情况,我们最常见就是串口打印输出。如果我们手里没有232...

strongerHuang 7603

海康威视VS互联网大厂:薪资、福利、工作强度全方位对比

本文全面对比了海康威视与互联网大厂在薪资、福利和工作强度等方面的差异。海康威视提供稳定的薪资结构和较低的工作强度,适合追求专业深度的职场人;而互联网大厂则以高薪和快速成长吸引人才,但工作压力较大。文章还分析了职业发展路径和长期价值,帮助求职者做出明智选择。

weixin_29171129的博客 389

stm32c语言串口输出,STM32F103程序串口调用printf打印数据

程序开发过程中调试必不可少,一种简单直接的调试方式是使用串口发送数据,并使用串口助手进行观测。以前使用MSP430做项目时也同样使用printf打印数据,所以现在想在stm32 上实现。通常串口发送单字节库函数:USART_SendData(USART1, (uint8_t) ch);对显示小数等数据比较复杂,如果能够直接使用C语言 stdio.h中的printf直接输出就可以省去大部分格式输出转...

weixin_39830020的博客 1130

YOLOv8傻瓜式教程

YOLOv8傻瓜式教程,附带详细参数配置。

Father_of_Python的博客 1万+

【C++ 使用libxlsxwriter库向excel表格中插入图片 CMake + VS2019】

使用libxlsxwriter向excel表格插入图片

恒星游历者的博客 755

计算机串口输出数据的方式,什么是串口通信?基于STM32的printf打印输出

前言:平时我们进行c语言编程的时候会经常用到printf函数进行打印输出,来调试代码。可是这个printf函数C库已经帮我们实现好了,通常只需要直接调用即可,但是如果在一个新的开发平台,如果库没有帮我们实现好,比如STM32开发板,那么我们怎么实现printf打印输出呢?首先我们来了解一下串口通信!1、什么是串口通信?串口通信(Serial CommunicaTIon),是指外设和计算机间,通过数...

weixin_35373786的博客 2588

QMI8658A和QMC5883L传感器校准全攻略:从零偏校准到椭球拟合

本文详细解析了QMI8658A和QMC5883L传感器的校准方法,从零偏校准到椭球拟合,涵盖了9轴运动传感器的核心误差来源及补偿技术。通过实战案例和数学建模,帮助开发者提升传感器精度,适用于无人机、AR/VR等智能硬件应用。

weixin_29189381的博客 158

为什么在串口接收中断函数中打印数据(串口输出数据)会导致出错?

在用华大单片机HC32L110操作时,会出现标题所示的错误,下面是数据手册中的一句话: then,看下实际工程中的代码(无关代码已经删除,保留关键代码),串口配置为接收中断,输出不用中断方式 串口发送: en_result_t Uart_SendData(uint8_t u8Idx, uint8_t u8Data) { Uart_ClrStatus(u8Idx,UartTxEmpty); //发送完成标志位清零=FALSE pstcData->pstcInstance-&...

我的博客 3035

Educoder | 计算机网络实验-Ping命令与ICMP协议分析

任务描述本关任务:捕获 Ping 程序生成的数据包。相关知识ping命令Ping 程序是一个简单的工具,允许任何人(例如:网络管理员)验证主机是否存在。源主机中的 Ping 程序将数据包发送到目标 IP 地址;如果目标是在线的,则目标主机中的 Ping 程序将会发送响应 Ping 数据包证明他在线,这两个 Ping 数据包都是 ICMP 数据包。在 Unix/Linux,序列号从 0 开始计数,依次递增。而 Windows 中 ping 程序的 ICMP 序列号是没有规律;;。

Mksg_28的博客 7626

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

STM32串口打印输出数据时好时坏

用STM32F103串口输出数据的时候,一会正常,一会出错。完全没有规律性,怀疑到外部晶振震荡频率不对,于是取消外部晶振,直接用内部时钟,运行程序果然是正常了。...

a18840715238的博客 2696

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

STM32F103VE基于标准库下DHT11数据串口打印输出

STM32F103VE基于标准库下DHT11数据串口打印输出

perseverance51博客 1097

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

2021-12-17 linux 往/dev/kmsg 里面写数据在串口里面会打印出来,以及应用层cpp如何输出串口打印信息。

一、linux 往/dev/kmsg 里面写数据在串口里面会打印出来,效果如下。 二、随手记录。

海月汐辰 1456

关于串口上电后的前几秒不输出打印

总结出只有上电后串口前四秒左右是不输出的,重启就可以,虽然没找出具体原因,但是结合ai给出的理由是上电电压小串口不能及时初始化好,从而不能打印,但是4秒确实有点久,可能让mcu每个分区都供上电会好吗,也没有尝试。通电后大概前4秒左右,写的串口打印的的数据用串口软件是接收不到的,但是led等等操作是没有问题的,如果此时按下重启,前几秒的东西是可以打印出来的,用的事stm32f103,串口输出程序,

2401_85900564的博客 115

STM32使用ITM调试_通过仿真器实现串口打印

调试单片机时,如果要打印数据往往需要另接一根线通过USB转TTL接到电脑上。但这样做往往并不方便,尤其是身边没有USB转TTL工具时。这时可以使用单片机自带的ITM单元,仅靠ST-Link仿真器即可实现串口打印,并且可以轻易把波特率设置到M以上的级别。使用ITM进行串口打印并不是什么新方法,IAR、STM32CubeIDE等都集成了相应的调试工具窗口,或者直接使用ST-Link的客户端(可参考博客【嵌入式】CLion & CubeMX。

m0_74349248的博客 3237

vivado工程编写的双Dout线路的AD7606串行输出,串口打印八通道数据

AD7606的串行输出驱动程序,串口打印八个通道的采集数据

weixin_47761339的博客 1028
上一篇: Win 7 使用 XP的超级终端 hyper terminal
下一篇: nandflash介绍
obins_Iee
博客等级 码龄15年 217粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值