STM32串口(USART)详解1 收发数据

 1. 基本简介

USART有两种模式:同步模式和异步模式。在同步模式中,发送器和接收器使用相同的时钟信号来同步数据传输;在异步模式中,发送器和接收器使用不同的时钟信号,但需要保持相同的波特率(即每秒传输的位数)。以下我们讲解的是异步模式。我们需要把将一个设备的数据传送到另一个设备,因此负责设备之间的数据传输的通信接口则十分重要,而不同的环境我们需要的通信接口协议也不同,比如单片机和电脑之间,单片机和单片机之间等,而本文中所讲的USART就是其中一种,但是针对不同环境串口的标准也不相同。有以下几种。

1.1 RS232

S232标准使用的是负逻辑电平,即逻辑1对应于负电压(通常为-3V至-25V),逻辑0对应于正电压(通常为+3V至+25V)。这种电压级别的选择使得RS232能够在较大距离内进行可靠通信,并具有一定的抗干扰能力。

1.2 USB转串口

这个也是我们比较常用的,相对于其他两种而已。我们一般开发板都是这种,也是我们开发板和电脑之间通信的方式,常说的CH430,PL2303,因为,在使用时需要安装相应驱动,这里就不放图了。

1.3 原生串口对串口

这个就不必多言,什么 GPS,串口连WIFI 之类。

 1.4 电平标准

2  结构浅讲
   

      这里既然是浅,那么我就不用手册里面的图,让人不容易快速了解。

了解代码之前需要的前置知识

在异步模式中,一个字符帧包含三部分:起始位+数据帧+停止位。起始位是一个逻辑0,用于标识数据帧的开始;数据帧是8位或9位的数据,根据USART_CR1的M位设置;停止位是一个或多个逻辑1,用于标识数据帧的结束。数据帧的最高位(MSB)先发送,最低位(LSB)后发送。

字符帧的设置主要包括以下几个方面:

  • 数据位:可以是5~9位,一般常用的是8位。
  • 校验位:可以是无校验、奇校验或偶校验,用于检测数据是否有误。
  • 停止位:可以是0.5、1、1.5或2个,用于标识数据帧的结束。
  • 波特率:表示每秒传输的位数,需要与通信双方保持一致。

3.代码实例

第一步开启GPIO的时钟,把TX配置为复用输出,RX配置成输入


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOX, ENABLE);	//开启GPIOA的时钟
	
	/*GPIO初始化*/
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //将引脚初始化为复用推挽输出
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_X;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOX, &GPIO_InitStructure);		
			
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;           //将PA10引脚初始化为上拉输入
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_X;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOX, &GPIO_InitStructure);	


第二步开启钟配置USART,(结构体)

   RCC_APB2PeriphClockCmd(RCC_APB2Periph_USARTX, ENABLE);	//开启USART的时钟 
    USART_InitTypeDef USART_InitStructure;					//定义结构体变量
	USART_InitStructure.USART_BaudRate = ;				//波特率
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;	//硬件流控制,不需要
	USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;	//模式,发送模式和接收模式均选择
	USART_InitStructure.USART_Parity = USART_Parity_No;		//奇偶校验,不需要
	USART_InitStructure.USART_StopBits = USART_StopBits_1;	//停止位,选择1位
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;		//字长,选择8位
	USART_Init(USARTX, &USART_InitStructure);

第三步 中断和查询

其实这部分每个人习惯不一样,出于普适应项目,用中断较好当然这里提供相关代码,

NVIC_InitTypeDef NVIC_InitStructure;
  
  /* 嵌套向量中断控制器组选择 */
		/* 提示 NVIC_PriorityGroupConfig() 在整个工程只需要调用一次来配置优先级分组*/
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  
  /* 配置USART为中断源 */
  NVIC_InitStructure.NVIC_IRQChannel = ;
  /* 抢断优先级*/
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = ;
  /* 子优先级 */
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = ;
  /* 使能中断 */
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  /* 初始化配置NVIC */
  NVIC_Init(&NVIC_InitStructure);
   USART_ITConfig();

USART_ITConfig是一个函数,用于配置USART外设的中断功能。USART是通用同步/异步收发器的缩写,是一种常用的串行通信协议。USART外设提供了多个中断源,可以在特定事件发生时触发中断处理程序。

函数原型如下:
void USART_ITConfig(USART_TypeDef* USARTx, uint32_t USART_IT, FunctionalState NewState);

该函数有三个参数:

1. `USARTx`:标识要配置的USART外设,如USART1、USART2等。
2. `USART_IT`:指定要配置的中断源,可以是如下值之一:

   - `USART_IT_PE`:奇偶校验错误中断使能
   - `USART_IT_TXE`:发送寄存器空中断使能
   - `USART_IT_TC`:传输完成中断使能
   - `USART_IT_RXNE`:接收寄存器非空中断使能
   - `USART_IT_IDLE`:空闲线路状态中断使能
   - `USART_IT_LBD`:LIN中断使能
   - `USART_IT_CTS`:CTS中断使能
   - `USART_IT_ERR`:错误中断使能

3. `NewState`:指定中断状态,可以是以下两个值之一:

   - `ENABLE`:使能中断
   - `DISABLE`:禁用中断

通过调用该函数,可以根据需要使能或禁用USART外设的不同中断源。例如,调用以下代码可以使能USART1的接收寄存器非空中断:
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE)

使用USART_ITConfig函数可以实现USART外设的中断配置,以便在特定事件发生时进行中断处理。


第四步 个人需求进行数据收发

如果·你配置了中断,那么接下来这部分肯定是这中断服务函数中间写

USART_SendData和USART_ReceiveData是用于发送和接收数据的函数,用于与USART外设进行数据的收发操作。

// 发送数据
uint16_t dataToSend = 0x55;
USART_SendData(USART1, dataToSend);

// 接收数据
uint16_t receivedData = USART_ReceiveData(USART1);

4.注意事项 

波特率设置:波特率是指数据传输的速度,必须在发送和接收端口上设置相同的波特率。确保与通信设备或主机之间的数据传输速率一致。
数据帧格式:USART支持不同的数据帧格式,包括数据位数、校验位和停止位等。确保发送和接收端口上的数据帧格式一致,以确保正确的数据传输。
信号电平:USART使用不同的信号电平来表示逻辑1和逻辑0。确保发送和接收设备之间的电平兼容,否则数据传输可能会出现错误。
缓冲区管理:USART通常使用缓冲区来存储待发送或接收的数据。在使用过程中,确保及时处理缓冲区中的数据,避免溢出或数据丢失。
错误检测和处理:USART提供错误检测和处理机制,如奇偶校验、帧错误和溢出错误等。在数据传输过程中,检测和处理这些错误是非常重要的,以确保数据的完整性和准确性。
时钟源选择:USART使用时钟来控制数据传输的时序。在使用USART之前,确保正确选择和配置时钟源,以确保数据传输的稳定性和可靠性。
中断处理:USART通常支持中断功能,以提高数据传输的效率和可靠性。合理使用中断功能可以减少CPU的占用率,同时及时响应数据传输事件。
异步和同步模式:USART可以在异步和同步模式下工作。在选择模式时,根据具体的应用需求和硬件支持选择合适的模式。


 

  • 29
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值