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文件