【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嵌入式竞赛板部分芯片功能及作用

经验分享 程序员 微信小程序 职场和发展