printf重定义:
C语言里面的printf函数默认输出设备是显示器,如果要实现printf函数输出正在串口或者LCD显示屏上,必须要重定义标准库函数里调用的与输出设备相关的函数,比如printf输出到串口,需要将fputc里面的输出指向串口。
应用:
usart.h
#ifndef USART_H_
#define USART_H_
void my_usart_init(void);
void My_Usart_Send_Byte( USART_TypeDef* USARTx, uint16_t Data);
void My_Usart_Send_Sting( USART_TypeDef* USARTx, char * string);
#endif
usart.c
#include"stm32f10x.h"
#include"usart.h"
#include "stdio.h"
void my_usart_init(void)
{
GPIO_InitTypeDef GPIOInitstruct;
USART_InitTypeDef Usart_initstruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE);
//A9
GPIOInitstruct.GPIO_Pin = GPIO_Pin_9;
GPIOInitstruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIOInitstruct.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&GPIOInitstruct);
//A10
GPIOInitstruct.GPIO_Pin =GPIO_Pin_10;
GPIOInitstruct.GPIO_Mode =GPIO_Mode_IPU;
GPIO_Init(GPIOA,&GPIOInitstruct);
Usart_initstruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
Usart_initstruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
Usart_initstruct.USART_BaudRate = 115200;
Usart_initstruct.USART_Parity = USART_Parity_No;
Usart_initstruct.USART_StopBits = USART_StopBits_1;
Usart_initstruct.USART_WordLength = USART_WordLength_8b;
USART_Init(USART1,&Usart_initstruct);
USART_Cmd(USART1,ENABLE);
}
void My_Usart_Send_Byte(USART_TypeDef* USARTx, uint16_t Data)
{
USART_SendData(USARTx, Data);
while( USART_GetFlagStatus( USARTx, USART_FLAG_TXE) == RESET);
}
void My_Usart_Send_Sting( USART_TypeDef* USARTx, char * string)
{
uint16_t i=0;
do
{
My_Usart_Send_Byte(USARTx,*(string+i));
i++;
}while(*(string+i) != '\0');
while( USART_GetFlagStatus( USARTx, USART_FLAG_TC) == RESET);
}
int fputc(int ch, FILE * p) //printf重定义
{
USART_SendData(USART1, (u8)ch);
while( USART_GetFlagStatus( USART1, USART_FLAG_TXE) == RESET);
return ch;
}
main.c
#include "stm32f10x.h"
#include "main.h"
#include "led.h"
#include "bear.h"
#include "key.h"
#include "shake.h"
#include "usart.h"
#include "stdio.h"
void delay(uint16_t time)
{
uint16_t i=0;
while(time--)
{
i =12000;
while(i--);
}
}
int main()
{
my_usart_init();
// My_Usart_Send_Byte( USART1, 'A');
// My_Usart_Send_Byte( USART1, 'B');
// My_Usart_Send_Byte( USART1, 'C');
// My_Usart_Send_Sting( USART1, "\r\n");
// My_Usart_Send_Sting(USART1 , "fei \r\n");
while(1)
{
printf("Hello,shi \r\n");
}
}
串口显示
