printf()函数重定向到STM32串口输出

来源:本站
导读:目前正在解读《printf()函数重定向到STM32串口输出》的相关信息,《printf()函数重定向到STM32串口输出》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《printf()函数重定向到STM32串口输出》的详细说明。
简介:最近遇到需要MCU输出数字的问题,而STM32的串口输出的是字符型,最先想到的方法是将整型数据转换为字符型输出,C库函数中提供了相关的函数 。

C语言中使用printf()函数输出是非常方便功能非常强大的,如果能将printf()函数使用到串口上,能实现非常多的强大输出功能,极大方便我们使用串口输出功能。

printf()函数是输出到显示器,而MCU是没有显示器的,要使他输出到串口,需要重定向该函数

printf()函数中调用fputc()函数,只要对该函数进行重定向,即可实现功能

//使用printf()函数要添加头文件“stdio.h"

#include "stdio.h"

//printf()函数重定向到USART2

int fputc(int ch,FILE *f)

{

//ch送给USART

USART_SendData(USART2, ch);

//等待发送完毕

while(!USART_GetFlagStatus(USART2, USART_FLAG_TC)) ;

//返回ch

return ch;

}

库函数中有宏定义

#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

所以也可以写为

PUTCHAR_PROTOTYPE

{

//ch送给USART1

USART_SendData(USART2, ch);

//等待发送完毕

while(!USART_GetFlagStatus(USART2, USART_FLAG_TC)) ;

//返回ch

return ch;

}

完整原文(网上copy来的,这个是定向到USART1):

#ifdef __GNUC__

#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

#else

#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

#endif

PUTCHAR_PROTOTYPE

{

USART_SendData(USART1, (uint8_t) ch);

while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);

return ch;

}

但是这样做之后在KEIL中仍然不能正常输出,网上查到原因是printf()函数使用标准库,标准库中包括printf()等函数使用了半主机模式,导致无法运行(见参考)

解决办法:

1,使用微库,在工程属性的Target->Code Generation中勾选Use MicroLIB

2, 重新实现库中某些函数,避免使用标准库(见参考)

提醒:《printf()函数重定向到STM32串口输出》最后刷新时间 2024-03-14 01:08:28,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《printf()函数重定向到STM32串口输出》该内容的真实性请自行鉴别。