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