MDK环境下stm32实现printf函数

printf虽然是C语言的标准函数,但是是针对有stdin, stdout设备的系统的,在嵌入式平台上是没有标准的stdin, stdout的,需要映射到串口后某个输出对象的,而嵌入式平台各不相同,如果又没有操作系统的支持,就只能靠自己实现了,因此STM32下的printf不在标准库里,而在定制的库里。而且一般在嵌入式平台一般也不用printf,可以自己使用sprintf()函数先将数据格式化到缓冲里,然后数据想输出到哪里就输出到哪里。

如果使用的是MDK,请在工程属性的“Target“-》”Code Generation“中勾选”Use MicroLIB

#ifndef __UART_INTERFACE_H
#define __UART_INTEFFACE_H
#include "stm32f10x_lib.h"
#include "stdio.h"
void UART_Init(unsigned long UART_baud); //波特率,如115200
int fputc(int ch, FILE *f);     //fputc重定向
int fgetc(FILE *f); //fgetc重定向
#endif

关于两个关键函数的重定义:

 int fputc(int ch, FILE *f)
{
   USART_SendData(USART1, (u8) ch);
   while(!(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == SET));
   return ch;
}
int fgetc(FILE *f)
{
   while(!(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == SET));
   return (USART_ReceiveData(USART1));
}


你可能感兴趣的:(嵌入式开发)