通信协议之UART串口通信(HAL库)

        在嵌入式开发中,常见的通信协议有UART、I2C、SPI、CAN、USB等等,这些通信协议各有各的特点,依据他们的特性跟使用场景被运用在各个地方。本文主要学习的是串口通信。

        串口通信,即串行通信,是一种在设备间进行数据传输的通信方式。在串口通信中,数据按位顺序传输,这种传输方式占用引脚资源少,但相对于并行通信而言,其传输速度较慢。

        串口通信的外围电路比较简单,只需要将设备1的发送端TXD与设备2的接收端RXD,以及设备2的发送端RXD与设备1的接收端TXD相连接。注意因为串口通信本质是,电平数据的发送,因此,进行串口通信的两个设备必须得进行共地操作。必须得进行共地操作!必须得进行共地操作!

一、电平标准

        串口通信的电平标准是指在串行通信中,数据传输时所采用的电压标准,用于定义数据位1和数据位0的电压表示方式。常见的串口通信电平标准包括以下几种:

1.1 TTL电平标准

        TTL(Transistor-Transistor Logic)电平标准是一种较为新的标准,广泛应用于电子电路中的设备间通信。在TTL电平标准中:

  • 逻辑1(高电平)通常表示为+3.3V或+5V(不同芯片可能有所不同)。
  • 逻辑0(低电平)则表示为0V。

        TTL电平标准的优点是电平范围较小,使用的电压较低,同时也不容易受到干扰。但缺点是传输距离较短,一般只能达到几米左右。

1.2 RS_232电平标准

        RS-232是一种较为老旧但广泛应用的串口通信标准,主要用于计算机与外部设备之间的通信。在RS-232电平标准中:

  • 逻辑1(高电平)的电平范围为-3V至-15V(负电平表示高电平 1)。
  • 逻辑0(低电平)的电平范围为+3V至+15V(正电平表示低电平 0)。

        RS-232标准的优点是传输距离较远,可以达到50英尺(约15米)以上,且具有较强的抗干扰能力。但缺点是电平范围较大,需要使用较高的电压,且对信号线的电气特性有一定要求。

1.3 RS-422和RS-485电平标准

        RS-422和RS-485是专为长距离和高速度数据传输设计的串口通信标准,它们采用了差分信号传输方式,即利用两根信号线之间的电压差来表示数据。

        两线压差+2~+6V表示1-2~-6V表示0

  • RS-422和RS-485的电平范围和传输距离都比RS-232和TTL更大,可以实现数百米甚至数千米的传输距离。
  • 它们的抗干扰能力和噪声抑制能力也非常强,适用于工业环境中的长距离通信。

但需要注意的是,RS-422和RS-485标准需要使用特殊的收发器来实现信号的差分传输和接收。

二、通信时序

对于串口通信来说,具有以下几种参数。

2.1 波特率(Baud Rate)

  • 定义:波特率是指在单位时间内传输的数据位数,通常以“位/秒”(bit/s)为单位。它表示了通信速率的高低。
  • 常见值:常见的波特率有9600、19200、38400、57600、115200等。当波特率设置过高时,数据传输的准确性可能会降低;而设置过低则会影响数据传输的速率。
  • 作用:选择一个适当的波特率可以保证串口通信的稳定和准确。

2.2 数据位(Data Bits)

  • 定义:数据位是指每个字符传输的位数,它决定了传输字符的大小。
  • 常见值:数据位通常为5、6、7或8位。在某些特殊应用中,也可能使用其他位数。
  • 作用:数据位设置过低会影响数据传输的准确性,而设置过高则会浪费传输带宽。一般来说,数据位应当和打印机、调制解调器等设备的设置保持一致。

2.3 停止位(Stop Bits)

  • 定义:停止位是指字符传输完毕后等待一段时间后再停止传输的方式,用于确保数据传输的完整性和准确性。
  • 常见值:常用的停止位有1位和2位。某些特殊情况下,还可能使用1.5位停止位(但较为少见)。
  • 作用:停止位的设置需要根据具体的设备要求进行,以确保数据传输的准确性和稳定性。

2.4 奇偶校验位(Parity Bit)

  • 定义:奇偶校验位是用来检测并纠正数据传输中的错误的一种机制。
  • 类型:奇偶校验位通常有奇校验和偶校验两种。奇校验要求每个字符的二进制表示中,1的个数为奇数(包括校验位);偶校验则要求1的个数为偶数。此外,还有一种无校验位(None)的情况,即不进行奇偶校验。
  • 作用:奇偶校验位可以提高数据传输的可靠性,但也会增加一定的开销。具体是否需要设置奇偶校验位,以及设置为奇校验还是偶校验,需要根据具体设备的要求来确定。

        根据协议是否需要校验位来区分,如果不需要校验位,则通信协议一帧10位,其中8位数据位,1位起始位,1位停止位。

        如果不需要校验位,则通信协议一帧11位,其中1位起始位,9位数据位(其中8位数据,1位校验位)1位停止位。校验又分为奇校验与偶校验。

奇校验:在通信过程中发送的一帧数据,里面1的个数为奇数,如果当数据位中1的个数为奇数个,则校验位置0,如果数据位中1的个数为偶数个,则校验位置1;以此保证数据1的个数为奇数个。

偶校验则与奇校验相反。

        当串口处于空闲状态时,信号管脚为高电平,起始信号为一个下降沿信号,停止位信号为上升沿信号,从低电平置为高电平。

三、STM32内部的USART

        USART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步收发器。USART是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可自动接收RX引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里。
自带波特率发生器,最高达4.5Mbits/s
可配置数据位长度(8/9)、停止位长度(0.5/1/1.5/2)
可选校验位(无校验/奇校验/偶校验)
支持同步模式、硬件流控制、DMA、智能卡、IrDA、LIN

3.1 USART基本结构

3.2 数据位长度设置

停止位配置

四、 UART编程

        本笔记暂时只记录了以下几个程序:1.串口中断收发数据  2.串口收发解析HEX数据帧

3.串口收发解析字符串数据帧。

4.1 串口中断收发数据

STM32串口中断收发数据

4.2 串口中断收发解析HEX数据

STM32串口中断收发解析HEX数据

4.3 串口中断收发解析字符串数据

串口中断收发解析字符串数据

PS:程序经验证无误,如若需要点击连接自取或者评论区留下邮箱,以上三个代码后续会添加程序说明。

UART HAL串口通信是通过使用STM32 HAL库中的UART驱动函数来实现的。UART是一种通用异步收发传输协议,用于在微控制器和外围设备之间进行串行数据传输。在HAL库中,提供了一系列的函数来配置和操作UART串口通信。 其中,HAL_UART_Transmit函数用于发送数据,它的原型为: HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout) 该函数用于通过指定的UART通道发送数据,参数huartUART_HandleTypeDef结构体指针,用于指定UART通道;pData是要发送的数据缓冲区指针;Size是要发送的数据字节数;Timeout是发送超时时间。 HAL_UART_Receive函数用于接收数据,它的原型为: HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout) 该函数用于通过指定的UART通道接收数据,参数huartUART_HandleTypeDef结构体指针,用于指定UART通道;pData是接收数据的缓冲区指针;Size是要接收的数据字节数;Timeout是接收超时时间。 除了上述的阻塞模式的发送和接收函数,HAL库还提供了其他的发送和接收函数,如HAL_UART_Transmit_IT和HAL_UART_Receive_IT,它们是基于中断的非阻塞模式,以及HAL_UART_Transmit_DMA和HAL_UART_Receive_DMA,它们是基于DMA的非阻塞模式。这些函数可以根据具体的需求选择使用。 在UART通信中,还有一些与中断处理相关的回调函数,如HAL_UART_IRQHandler、HAL_UART_TxCpltCallback、HAL_UART_RxCpltCallback等,这些回调函数用于处理UART中断事件和传输完成的回调。 总结起来,UART HAL串口通信包括了配置和操作UART通道的函数,以及中断处理和回调函数。通过使用这些函数,可以实现UART串口通信。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【STM32】HAL库 STM32CubeMX教程四---UART串口通信详解](https://blog.csdn.net/as480133937/article/details/99073783)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值