【STM32f401学习之路-02】USART串口通信

本文介绍了USART在STM32中的应用,包括USART的基本配置、数据发送和接收的实现,以及中断配置。通过实例展示了如何使用USART进行串口通信,如MCU与WIFI、PC或传感器之间的交互,并提供了接收字节数据并进行简单操作的示例。
摘要由CSDN通过智能技术生成

USART 简介

什么是UART?–>串口
作用:两个设备/器件之间进行信息交换
例子:MCU与WIFI通信,MCU与PC通信,MCU与传感器通信
通信是产品的核心
UART其实通信协议,是一种标准的通信协议,需要遵守这种通信协议才能正常通信

UART四要素

波特率:控制通信速度 常用波特率 115200 9600
停止位:表示一帧数据的起始 1bit
数据位:5~8位可选
奇偶校验:默认无校验位

USART的功能运用

USART的配置

void Usart_config(u32 bps){

	
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//开启复用接口的时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//开启串口1的时钟
	
	
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //设置PA9为USART1的复用接口
	GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);//设置PA10为USART1的复用接口
	
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;//设置gpio口为复用模式
	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽模式
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;//pin9,pin10
	GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//浮空
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;//高速
	
	GPIO_Init(GPIOA,&GPIO_InitStruct);//gpio初始化
	
	USART_InitTypeDef USART_InitStruct;
	
	USART_InitStruct.USART_BaudRate = bps;//这里的bps为初始化函数可以填入的bps
	USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//不使用硬件流控制
	USART_InitStruct.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;//设置串口模式为接收与发送
	USART_InitStruct.USART_Parity = USART_Parity_No;//不使用验证位
	USART_InitStruct.USART_StopBits = USART_StopBits_1;//停止位为1位
	USART_InitStruct.USART_WordLength = USART_WordLength_8b;//数据长度为8位
	
	USART_Init(USART1,&USART_InitStruct);//串口初始化
	
	
	
	
	
	NVIC_InitTypeDef NVIC_InitStructure_usart;
	NVIC_InitStructure_usart.NVIC_IRQChannel = USART1_IRQn;
	NVIC_InitStructure_usart.NVIC_IRQChannelCmd = ENABLE;
	NVIC_InitStructure_usart.NVIC_IRQChannelPreemptionPriority = 2;
	NVIC_InitStructure_usart.NVIC_IRQChannelSubPriority = 2;
	
	NVIC_Init(&NVIC_InitStructure_usart);//初始化中断
	
	
	USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//打开接收中断
	
	USART_Cmd(USART1,ENABLE);//启动串口
}

USART接收发送

/*
函数:发送一个字节数据
形参 u8 data
返回值 void
*/
void usart1_send_byte(u8 data)
{
	while(!USART_GetFlagStatus(USART1,USART_FLAG_TXE)) {}  //假如没有收到

		USART_SendData(USART1,data);
}

/*
函数:接收一个字节数据
形参 void
返回值 u8
*/
u8 usart1_rec_byte(void)
{
	while(!USART_GetFlagStatus(USART1,USART_FLAG_RXNE)) 		{}

		return USART_ReceiveData(USART1);
}

USART 接收字节数据点灯

本学习之路
已弃坑,原因大致就是自己学会了不少东西,但是却懒得花时间再次重复一遍,以后可能会发更多的发一些自己认为特别一些的内容,就不再重复造别人已经造过很多次的轮子了。

2022/11/9 KVG

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值