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

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

3天内不再提示

如何实现Printf()接口重定向到UART

CHANBAEK 来源:开心果 Need Car 作者:开心果 Need Car 2023-10-01 10:13 次阅读

车规级MCU开发,不像PC端,包含stdio.h头文件就可以使用Printf()函数。为了实现PC端Printf()接口功能,需要在MCU端实现Printf()接口的"重定向"。所谓的重定向,就是重新定义Printf()接口函数里调用的与输出设备相关的函数,eg:使用Printf()接口将MCU中的信息,通过串口或者Ethernet输出到终端上位机

所以,如果要实现Printf()接口的重定向,选择合适的MCU驱动是第一步,本文选择UART(Universal Asynchronous Receiver-Transmitter)实现Printf()接口的重定向,讨论如何实现Printf()接口重定向到UART。

1、UART驱动实现

对于UART驱动的实现,根据芯片类型而定。本文使用TC397,文末给出源码,不做具体讨论。

2、重定向Printf()

重定向Printf()接口,本文重新命名为Debugger_printf(),在Debugger_printf()接口中调用UART驱动发送接口sendUARTMessage(),Debugger_printf()接口代码示意如下:

图片

(一)头文件

Debugger_printf()接口中需要包含头文件,因为在如上代码中使用到了va_list,而宏va_list在头文件中定义。头文件并不在工程文件中,而是在Mingw64编译环境库中,示意如下:

图片

除了宏va_list之外,使用到的va_start(v,l)、va_end(v)等也在头文件中。

3、Debugger_printf()使用

完成Debugger_printf()接口重定向以后,即可在程序任意需要输出信息的位置打印log,之后在串口终端中显示信息。eg:在main线程中打印信息,代码示意如下:

图片

输出的log信息如下所示:

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16019

    浏览量

    343668
  • 接口
    +关注

    关注

    33

    文章

    7640

    浏览量

    148512
  • uart
    +关注

    关注

    22

    文章

    1159

    浏览量

    99973
  • 代码
    +关注

    关注

    30

    文章

    4556

    浏览量

    66800
  • Printf
    +关注

    关注

    0

    文章

    79

    浏览量

    13481
收藏 人收藏

    评论

    相关推荐

    STM32使用串口重定向系统

    STM32使用串口重定向系统printf函数输出时出现一初始化或使用printf函数系统卡死的原因及解决办法在STM32开发当中,会经常使用系统自带的printf函数来查看调试输出,通
    发表于 08-24 08:19

    实现printf函数的重定向

    目录重定向函数属性设置重定向函数在配置好串口之后需要在相关文件中添加以下函数以实现printf函数的重定向//注意添加头文件#include
    发表于 08-24 07:09

    如何实现printf()函数与scanf()的串口重定向

    如何实现printf()函数与scanf()的串口重定向
    发表于 12-01 07:01

    STM32使用串口重定向printf打印时程序不执行是为啥呢?

    STM32使用串口重定向printf打印时程序不执行是为啥呢?
    发表于 12-01 07:56

    如何利用STM32F4串口重定向Printf()?

    如何利用STM32F4串口重定向Printf()?
    发表于 12-01 07:32

    如何将串口重定向printf函数呢

    如何将串口重定向printf函数呢?有哪些操作流程呢?
    发表于 12-01 06:01

    如何去实现STM32 printf的串口重定向

    如何去实现STM32 printf的串口重定向呢?有哪些操作流程?
    发表于 12-01 07:03

    如何去实现printf()函数与scanf()的串口重定向

    如何去实现printf()函数与scanf()的串口重定向呢?有哪些操作流程呢?
    发表于 12-02 07:29

    怎么去解决STM32串口重定向printf出现FILE未定义的问题呢

    怎么去解决STM32串口重定向printf出现FILE未定义的问题呢?
    发表于 12-02 07:34

    printf()函数重定向LCD怎么实现

    printf()函数也可以 重定向LCD吗?把printf()函数重定向LCD怎么
    发表于 12-02 06:01

    如何去实现sw4stm32串口重定向

    如何去实现sw4stm32串口重定向呢?使用printf打印浮点数为什么会有警告信息提示呢?
    发表于 12-02 06:49

    口重定向是什么意思?

    口重定向是什么意思?
    发表于 12-08 06:57

    如何去实现STM32的串口重定向

    UART是什么?如何去实现STM32的串口重定向呢?
    发表于 02-18 06:48

    使用printf()函数时默认UART0输出,请教如何重定向printf()UART1?

    芯片:N76E003; 编译环境:keil5 使用printf()函数时默认UART0输出,请教如何重定向printf()
    发表于 06-25 07:12

    Keil下使用STlink重定向printf的配置

    Keil下使用STlink重定向printf的配置1. printf 重定向Keil默认下使用Micro LIB库,该库调用 fputs 实现
    发表于 12-27 18:43 18次下载
    Keil下使用STlink<b class='flag-5'>重定向</b><b class='flag-5'>printf</b>的配置