【STM32】USART的初始化与基本使用(CT117E电路)
USART(Universal Synchronous/Asynchronous Receiver/Transmitter):通用同步/异步串行接收/发送器 USART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备。
USART的初始化
GPIO口初始化初始化配置
该装置具有两个多功能的UART / FIFO控制器, 可以在多种不同模式下进行单独地配置。不仅UART接口,FIFO接口和第二代FT232B与FT245B装置的Bit-Bang IO模式之外,FT2232D还提供了多种新的操作模式,包括多协议同步串行引擎(MPSSE)接口。专为同步串行协议而设计, 如I2C,JTAG和SPI总线。
首先我们需要知道该芯片的作用:FT2232D芯片,完成对USB协议和JTAG协议的转换。
从上图可以看到RXD2与M_PA3,TXD2与M_PA3相对应,所以以上初始化代码我们初始化GPIOA的Pin2与Pin3。
对于GPIOA的Pin2(与TXD2对应),这里使用的GPIO_Mode_AF_PP是复用推挽模式。意味着,这个引脚允许功能复用,也就是该引脚允许在一定情况下使能多个外设。因为,我们这个引脚作为串口输出数据到终端(电脑)的引脚。不可避免它本身具有的一定的功能,我们需要复用它来输出,保证功能。
对于GPIOA的Pin3与RXD2对应),当前的模式是浮空输入,一般串口应该就是这个。
中断初始化配置
这里注意中断频道是USART2_IRQn(参考stm32f10x.h)
USART初始化配置
USART相关函数的使用
函数的基本介绍
void USART2_IRQHandler(void)
{
}
以上是USART2中断服务函数,一般用于接收数据。
USART_ITConfig(USART2,USART_IT_RXNE,DISABLE);
控制接收中断打开或者关闭,以上代码表示接收中断关闭。
USART_GetITStatus(USART2,USART_IT_RXNE)
引脚无数据为RESET=0,有数据为SET=1(SET=!RESET);当引脚有数据时,说明可以接受数据。
USART_GetFlagStatus(USART2,USART_FLAG_TXE)
引脚无数据为RESET=0,有数据为SET=1(SET=!RESET),当引脚有数据时,数据发送结束。
USART_ITConfig(USART2,USART_IT_RXNE,DISABLE);
控制USART中断的开启和关闭,参数2:ENABLE(开启)或DISABLE(关闭)。
函数的使用举例
字符串发送
void USART2_SendString(u8 *str)
{
u8 index = 0;
do
{
USART_SendData(USART2,str[index]);
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
//无使能相应中断时用USART_GetFlagStatus判断标志位是否置位
index++;
}while(str[index] != 0);
}
以上函数主要用于发送字符串,字符串的发送是在需要时使用,所以不需要一直保持中断,故可不用中断来进行。
字符串的接收
u8 usart_rec_str[20];//接收字符串
u8 usart_rec_flag=0;
void USART2_IRQHandler()
{
static u8 counts = 0;
u8 temp;
if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET)
{ // 1:接受 0:
USART_ClearITPendingBit(USART2,USART_IT_RXNE);//清除中断预处理位
temp=USART_ReceiveData(USART2);
if(temp==
)
{
usart_rec_flag=1;//接收完成标志
counts=0;
USART_ITConfig(USART2,USART_IT_RXNE,DISABLE);//暂时关闭
}
else
{
usart_rec_str[counts]=temp;
counts++;
}
}
}
以上函数主要用于接收字符串。
参考文献
[1] USART
[2] FTDI官网
[3] CT117E嵌入式竞赛板部分芯片功能及作用
