【STM32】USART的初始化与基本使用(CT117E电路)

目录

USART的初始化

GPIO口初始化初始化配置

中断初始化配置

USART初始化配置

USART相关函数的使用 

函数的基本介绍

函数的使用举例

字符串发送

字符串的接收

参考文献


USART(Universal Synchronous/Asynchronous Receiver/Transmitter):通用同步/异步串行接收/发送器

USART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备。

USART的初始化

void INIT(USART2)(u32 bound)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	//时钟使能:因为任何外设的使用,都要开启对应的时钟,因为单片机工作离不开时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
	//这里使用了IO,和外设串口,所以需要对这两个时钟使能
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	//这是IO的引脚配置——这个需要根据芯片引脚找
	//找到输入引脚和输出引脚,千万别找错了
	//这里使用的GPIO_Mode_AF_PP是复用推挽模式
	//意味着,这个引脚允许功能复用,也就是该引脚允许在一定情况下使能多个外设
	//因为,我们这个引脚作为串口输出数据到终端(电脑)的引脚
	//不可避免它本身具有的一定的功能,我们需要复用它来输出,保证功能
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	//这个是输入,因为是数据输入,这个需要看外设要求,来选择合适的输入模式
	//输入模式很多,常见的就是上拉下拉输入,这个多用在按键这些硬件的地方
	//其次的模拟输入,多在adc的通道引脚读取值的时候
	//当前的模式是浮空输入,一般串口应该就是这个
	
	NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	//这是中断配置
	//我们要使用串口的接收中断,不然要设置中断的参数
	//终端参数最主要的就是三个——哪个中断通道,优先级设置,通道使能与否
	//NVIC_IRQChannel——中断通道的选择,这个部分一般存在于芯片的启动文件里
	//比如我都这块32,他就在我的截图里——在选择中断通道时,怎么选择,等下我会截图说明
	//NVIC_IRQChannelPreemptionPriority这个是设置抢占优先级——也可以理解成父优先级
	//NVIC_IRQChannelSubPriority这个是设置子优先级
	//通过设置这两个参数——实现中断的优先级配置
	//优先级的作用等下再说
	//最有NVIC_IRQChannelCmd,该中断通道是否使能/打开
	//NVIC_Init(&NVIC_InitStructure);调用函数,实现配置
	
	USART_InitStructure.USART_BaudRate = bound;
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
	USART_InitStructure.USART_StopBits = USART_StopBits_1;
	USART_InitStructure.USART_Parity = USART_Parity_No;
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	USART_Init(USART2, &USART_InitStructure);
		
	USART_Cmd(USART2,ENABLE);//对指定USART进行使能
	USART_ITConfig( USART2, USART_IT_RXNE,ENABLE);
}

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=='\n')
		{
			usart_rec_flag=1;//接收完成标志
			counts=0;
			USART_ITConfig(USART2,USART_IT_RXNE,DISABLE);//暂时关闭
		}
		else
		{
			usart_rec_str[counts]=temp;
			counts++;
		}
	}
}

以上函数主要用于接收字符串。

参考文献

[1] USART https://baike.baidu.com/item/USART/10593784?fr=aladdin

[2] FTDI官网 http://www.ftdichip.cn/Products/ICs/FT2232D.html

[3] CT117E嵌入式竞赛板部分芯片功能及作用 https://blog.csdn.net/qq_51558898/article/details/113055420

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值