Stm32 - Printf重定向(不)使用微库(Keil MDK)

转载 2017年01月02日 21:35:23


#define DEBUG_USART USART1


stm32芯片调试中经常用到串口来打印一些数据,因此如果能使用类似windowsConsole中的printf就很完美了~

方法1--使用微库:

1、使用微库(平台式keil-MDK),点击“魔术棒” Target标签下有个Use MicroLIB---勾选。

2、包含头文件:#include "stdio.h"

3Printf重定向,修改fputc()函数的内容~

int fputc(int ch, FILE *f)

{

USART_SendData(DEBUG_USART, (unsigned char) ch);

while (!(DEBUG_USART->SR & USART_FLAG_TXE));

return (ch);

}

这里的:USART_SendData(DEBUG_USART, (unsigned char) ch);

while (!(DEBUG_USART->SR & USART_FLAG_TXE));

就是往串口发送一个字节的代码,修改相应的串口,初始化。这样就能使用printf~可以一试。


方法2--不使用微库(那么就要强调不使用半主机(no semihosting)模式)

1、包含头文件#include "stdio.h"

2、重写fputc,但需要先加点东西:

#pragma import(__use_no_semihosting)

_sys_exit(int x)

{

x = x;

}

struct __FILE

{

int handle;

 

 

 

};

 

FILE __stdout;

int fputc(int ch, FILE *f)

{

USART_SendData(DEBUG_USART, (unsigned char) ch);

while (!(DEBUG_USART->SR & USART_FLAG_TXE));

return (ch);

}

这样,就完成了,同样可以使用printf语句了~

http://blog.sina.com.cn/s/blog_b4ce638e0102w9fw.html

KEIL编译上的问题

楼主后来怎么解决的? 我现在也遇到类似问题,也是在51822上,用keil5. 莫名其妙的就编译报错: .\_build\ble_app_uart.axf: Error: L6200E: Symbol...
  • cgh0817
  • cgh0817
  • 2015年05月23日 18:43
  • 2523

Keil重定向printf到串口UART输出

就是在你配置完串口的时候首先写一个数到SBUF寄存器中然后在用printf函数打印就可以,当让这个顺序是不可以变的,如果你想在追问细节为什么,我只能告诉你这应该是开发环境决定的,这一点我就理解这么多,...
  • xzongyuan
  • xzongyuan
  • 2014年06月05日 16:03
  • 8519

Keil 重定向 printf

Keil printf 使用
  • gmdjmawy
  • gmdjmawy
  • 2015年08月09日 14:19
  • 1512

Keil C51重定向printf到串口

进行C/C++开发的时候我们都会需要打印调试信息,打印调试信息时我们习惯使用printf函数,但是在Keil C51环境下,由于我们的程序是下载到单片机里,使用printf函数时不能直接打印到串口上,...
  • u012163234
  • u012163234
  • 2016年09月05日 11:31
  • 4640

【记录】STM32 printf函数实现方法

原文:STM32 Printf函数实现方法
  • iluzhiyong
  • iluzhiyong
  • 2016年07月02日 21:14
  • 3194

STM32 printf函数的调用

stm32中调用 printf()函数,实质上添加对应的   int fputc(int ch, FILE *f)  函数 (如 fputc对应目标是串口则printf输在串口上,如 fputc对应目...
  • C1099072422
  • C1099072422
  • 2017年03月03日 15:15
  • 911

Keil C51重定向printf到串口

概述 进行C/C++开发的时候我们都会需要打印调试信息,打印调试信息时我们习惯使用printf函数,但是在Keil C51环境下,由于我们的程序是下载到单片机里,使用printf函数时不能直接打...
  • a1299600490
  • a1299600490
  • 2017年08月14日 09:36
  • 116

STM32+Keil 如何使用printf函数?

【lanmanck原创】 Keil不支持Host-semi机制,即不支持直接在IDE打印字符串。 那么只能通过程序向硬件串口发数据了,这样调用的时候用自定义的函数即可,也很方便,例如: vo...
  • lanmanck
  • lanmanck
  • 2013年12月19日 11:07
  • 26013

STM32高级开发(12)-在GCC中使用printf打印串口数据

在大家使用keil或是iar开发stm32等arm芯片的时候,想来最不陌生的就是使用print通过串口输出一些数据,用来调试或是其他作用。但是要明确的是由于keil iar gcc 他们使用的标准C语...
  • zhengyangliu123
  • zhengyangliu123
  • 2017年02月10日 11:36
  • 1906

STM32中printf重定向到串口

STM32中printf重定向到串口           学习STM32过程中,经常打交道的莫过于串口,你可以将任何信息,当然重要的是调试信息打印到串口中输出,总是用一个字节发送函数或者字符串发送...
  • wdscq1234
  • wdscq1234
  • 2012年09月04日 22:13
  • 21476
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Stm32 - Printf重定向(不)使用微库(Keil MDK)
举报原因:
原因补充:

(最多只允许输入30个字)