stm32在keil5下重定向printf

简述

在单片机开发中,难免需要用到串口进行通信调试,对于部分人来讲习惯了使用printf进行打印输出,本文记录了该实现方法。

环境

软件:keil5、pc端串口调试助手
硬件:usb转ttl串口模块,stm32最小系统

要点

此处只记录关键步骤,其他的请参阅相关资料。
1.在工程设置Target中勾选Use MicroLiB如下图所示:
在这里插入图片描述2.在串口操作的源文件中加入以下代码

int fputc(int ch, FILE *f)
{
/* 将Printf内容发往串口 */
  USART_SendData(USART1, (unsigned char) ch);
  while (!(USART1->SR & USART_FLAG_TXE));
 
  return (ch);
}

完成以上步骤后,跟平常配置完串口后,直接使用printf就可以通过串口助手接收到单片机发出的信息。亲测有效,如有问题欢迎讨论交流。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32微控制器上,可以通过重定向标准输出流来实现printf函数的重定向。下面是一种常用的方法: 首先,在你的工程中打开一个串口进行通信。你需要确保你的STM32芯片上有一个可用的UART(串口)模块,并且已经正确地配置和初始化了该串口。 然后,你需要重定向标准输出流(stdout)到该串口。这可以通过以下步骤完成: 1. 在你的代码中,添加以下头文件: ```c #include <stdio.h> #include <sys/unistd.h> // 如果使用Keil MDK,可能需要使用 #include <unistd.h> 替代 ``` 2. 定义一个名为 `__io_putchar` 的函数,用于重定义 `_write` 函数,该函数将被printf调用来输出单个字符。在函数内部,你需要使用串口发送函数发送字符。以下是一个示例: ```c int __io_putchar(int ch) { // 发送单个字符到串口 // TODO: 使用你的串口发送函数发送字符 return ch; } ``` 3. 重定义 `_write` 函数。在代码的顶部或者初始化函数中,添加以下代码: ```c // 重定义 _write 函数 // 这样 printf 就会调用 __io_putchar 函数 FILE __stdout; int _write(int file, char *ptr, int len) { int DataIdx; for (DataIdx = 0; DataIdx < len; DataIdx++) { __io_putchar(*ptr++); } return len; } ``` 4. 现在,你可以在你的代码中使用printf函数,输出的内容将会通过串口发送出去。 请注意,以上步骤是一种通用的方法,具体的实现可能会因不同的开发环境和芯片型号而有所变化。你需要根据你的具体情况进行适当的调整和修改。 希望以上信息对你有帮助!如有更多问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值