STM32F103串口配置

/*usart.c*/
#include "usart.h"

int fputc(int ch, FILE *f)	//printf函数重定向(使用printf可通过USARTx打印数据)
{
	USART_SendData(USART1,(uint8_t)ch);

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

	return ch;
}

/*初始化串口,baud:波特率*/
//接收:PA10
//发送:PA9
void Init_USART1(unsigned int baud)
{
	USART_InitTypeDef Init_USART_Structure;
	GPIO_InitTypeDef Init_GPIO_Structure;
	NVIC_InitTypeDef NVIC_Initstrue;
	
	//USART_DeInit(USART1);			//复位USART1
	//USART1->DR = 0X00;			//清空数据寄存器的值
	
	/*开串口1时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);	//开串口1时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);	//开GPIOA时钟
	
	Init_GPIO_Structure.GPIO_Mode = GPIO_Mode_IN_FLOATING;	//浮空输入
	Init_GPIO_Structure.GPIO_Pin = GPIO_Pin_10;				//管脚10
	Init_GPIO_Structure.GPIO_Speed = GPIO_Speed_50MHz;		//IO口速度50MHz
	GPIO_Init(GPIOA,&Init_GPIO_Structure);					//配置RX
	Init_GPIO_Structure.GPIO_Mode = GPIO_Mode_AF_PP;		//复用推挽输出
	Init_GPIO_Structure.GPIO_Pin = GPIO_Pin_9;				//管脚9
	GPIO_Init(GPIOA,&Init_GPIO_Structure);					//配置TX
	
	Init_USART_Structure.USART_BaudRate = baud;				//波特率
	Init_USART_Structure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;	//无硬件数据流
	//数据流控就是用来解决在数据传输中双方速率不一致而可能导致数据丢失的的问题,它的基本含义非常简单,
	//当接收端接收到的数据处理不过来时,就向发送端发送不再接收的信号,发送端接收到这个信号之后就会停止发送,
	//直到收到可以继续发送的信号再继续发送。因此流控本身是可以控制数据传输的进度,进而防止数据丢失。
	Init_USART_Structure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;					//收发模式
	Init_USART_Structure.USART_Parity = USART_Parity_No;								//无奇偶校验
	Init_USART_Structure.USART_StopBits = USART_StopBits_1;								//停止位:1
	Init_USART_Structure.USART_WordLength = USART_WordLength_8b;						//数据长度8bit
	USART_Init(USART1,&Init_USART_Structure);											//初始化串口
	USART_Cmd(USART1,ENABLE);															//使能串口1
	
	USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);										//接收中断使能

	NVIC_Initstrue.NVIC_IRQChannel=USART1_IRQn;											//在stm32f10x.h头文件里面找到
	NVIC_Initstrue.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Initstrue.NVIC_IRQChannelPreemptionPriority=1;			//抢占优先级
	NVIC_Initstrue.NVIC_IRQChannelSubPriority=1;				//响应优先级
	NVIC_Init(&NVIC_Initstrue);									//使能中断
}

void USART1_IRQHandler(void)	//中断服务函数,USART1_IRQHandler是在启动文件startup_stm32f10x_hd.s里面找到
{															//该函数是一旦串口接收到数据,就进入到串口中断函数
	u8 flag;												//函数内再将接收到的数据原封不动的再发出去
	if(USART_GetITStatus(USART1,USART_IT_RXNE))
	{
		flag =USART_ReceiveData(USART1);					//读取接收到的数据
	//	USART_SendData(USART1,flag);						//发送接收到的数据
	}
	USART_ClearFlag(USART1,USART_IT_RXNE);					//清中断标志位
}
/*usart.h*/
#ifndef __USART_H__
#define __USART_H__

#include "stdio.h"
#include "stm32f10x_usart.h"

int fputc(int ch, FILE *f);
void Init_USART1(unsigned int baud);

#endif
/*main.c*/
#include "usart.h"

int main(void)
{
	Init_USART1(115200);
	while(1)
	{
		printf("hello world\r\n");	//这里必须用\r\n
		//delay_ms(500);
	}
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值