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);//A9GPIOInitstruct.GPIO_Pin = GPIO_Pin_9;GPIOInitstruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIOInitstruct.GPIO_Speed = GPIO_Speed_10MHz;GPIO_Init(GPIOA,&GPIOInitstruct);//A10GPIOInitstruct.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");}
}
串口显示