USART串口(通用同步异步收发器)--Part2


在Part1部分我们介绍了一些基础概念,在这章中我们介绍一下USART的配置过程以及我们想要收发单字符和收发字符串应该怎么实现。

1.USART的初始化配置过程及实现

1.1USART配置流程梳理

在这里插入图片描述
配置流程:

1.开启时钟线(GPIOx,USARTx)

2.配置GPIO(复用)

3.改变引脚重映射

4.配置USART

5.使能USART

1.2代码示例

void USART1_Init(u32 baud)
{
	//开启时钟
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
	
	//GPIO引脚复用
	GPIO_InitTypeDef GPIO_InitStruct;
	//GPIO端口模式为复用
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
	//配置引脚9和引脚10
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
	//初始化GPIO
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	//将引脚9和引脚10重映射到USART1上
	GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
	GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
	
	
	
	//USART1配置
	USART_InitTypeDef USART_InitStruct;
	
	//波特率设置传入的baud
	USART_InitStruct.USART_BaudRate = baud;
	//设置无硬件流控制
	USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	//设置接收和发送使能
	USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
	//设置无奇偶校验
	USART_InitStruct.USART_Parity = USART_Parity_No;
	//设置1位停止位
	USART_InitStruct.USART_StopBits = USART_StopBits_1;
	//设置字长为8位
	USART_InitStruct.USART_WordLength = USART_WordLength_8b;
	//初始化USART1
	USART_Init(USART1, &USART_InitStruct);
	
	//使能USART1
	USART_Cmd(USART1,ENABLE);
}

2.USART1单字节与字符串收发函数

2.1 USART1单字节收发函数


//单字节发函数
void USART1_SendByte(u8 data)
{
	//等待发送缓冲区为空后再开始调用发送库函数
	while(!USART_GetFlagStatus(USART1, USART_FLAG_TXE));
	USART_SendData(USART1, data);
}


//单字节收函数
u8 USART1_RecByte(void)
{
	//等待接收缓冲区不为空后再开始调用接收库函数,并将其直接返回
	while(!USART_GetFlagStatus(USART1, USART_FLAG_RXNE));
	return USART_ReceiveData(USART1);
}

2.2 USART1字符串收发函数


//字符串发函数
void USART1_SendString(char * data)
{
	while(* data != '\0')
	{
		USART_SendData(USART1, * (data++));
		SysTick_DelayMs(1);
	}

	USART_SendData(USART1, *data);

}



//字符串收函数
void USART1_RecString(char * data)
{
	
	char i = 0;
	i = USART1_RecByte();
	while(i != '\r' && i != '\n' && i != '\0')
	{
		//将接收到的字符转换成大写
		* data = toupper((unsigned char)i);
		data++;
		i = USART1_RecByte();
	}
	//给data补充一个结束符以便于发送data终止
	* data = '\0';

}

3.代码中所使用的USART的库函数

//按照配置的结构体初始化USART
 void  USART_Init (USART_TypeDef *USARTx, USART_InitTypeDef *USART_InitStruct) 
 //使能USART
 void  USART_Cmd (USART_TypeDef *USARTx, FunctionalState NewState) 
  

由于篇幅限制,需要查看函数具体参数内容请移步stm32f4xx_usart.c文件

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值