#include "includes.h"
int fputc(int ch,FILE *f)//重定义printf函数
{
USART_SendData(USART1,(uint8_t) ch);
while (USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET); //判断标志位检测是否发送完毕
return (ch);
}
int fgetc(FILE *f)//重定义scanf函数
{
while (USART_GetFlagStatus(USART1,USART_FLAG_RXNE) == RESET);
return (USART_ReceiveData(USART1));
}
void uart1_init()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);//开启uart1和GPIOA的时钟
/*GPIO配置*/
GPIO_InitTypeDef gpio_pin9_init;
gpio_pin9_init.GPIO_Mode=GPIO_Mode_AF_PP;//tx初始化为推挽复用模式
gpio_pin9_init.GPIO_Pin=GPIO_Pin_9;
gpio_pin9_init.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&gpio_pin9_init);
GPIO_InitTypeDef gpio_pin10_init;
gpio_pin10_init.GPIO_Mode=GPIO_Mode_IN_FLOATING;//rx初始化为浮空输入模式
gpio_pin10_init.GPIO_Pin=GPIO_Pin_10;
gpio_pin10_init.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&gpio_pin10_init);
/*串口的配置*/
USART_InitTypeDef usart_init;//初始化串口
usart_init.USART_BaudRate=9600;
usart_init.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
usart_init.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//全双工需要发送接收都开启
usart_init.USART_Parity=USART_Parity_No;
usart_init.USART_StopBits=USART_StopBits_1;
usart_init.USART_WordLength=USART_WordLength_8b;
USART_Init(USART1,&usart_init);
USART_Cmd(USART1,ENABLE);
}
int main()
{
uart1_init();
unsigned int n;
while(1)
{
scanf("%d",&n);
printf("%d",n);
}
} |