基于STM32之UART串口通信协议(一)详解

一、前言

1、简介

  写的这篇博客,是为了简单讲解一下UART通信协议,以及UART能够实现的一些功能,还有有关使用STM32CubeMX来配置芯片的一些操作,在后面我会以我使用的STM32F429开发板来举例讲解(其他STM32系列芯片大多数都可以按照这些步骤来操作的),如有不足请多多指教。

2、UART简介

  嵌入式开发中,UART串口通信协议是我们常用的通信协议(UART、I2C、SPI等)之一,全称叫做通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)。

3、准备工作

1)Keil5

  链接:点击下载
  提取码:wrt9

2)STMCubeMX5.1.0版本

  链接:点击下载
  提取码:20xs

3)STMF429开发板

  

注:

  只要是stm32的开发板都可以用到的,在STM32CubeMx里选对型号、配置好就行了。

二、UART详解

1、UART简介

  嵌入式开发中,UART串口通信协议是我们常用的通信协议(UART、I2C、SPI等)之一,全称叫做通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),是异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输,它能将要传输的资料在串行通信与并行通信之间加以转换,能够灵活地与外部设备进行全双工数据交换。

注:

  在此开发板中,是有USART(Universal Synchronous Asynchronous Receiver and Transmitter通用同步异步收发器)串口的,USART相当于UART的升级版,USART支持同步模式,因此USART 需要同步始终信号USART_CK(如STM32 单片机),通常情况同步信号很少使用,因此一般的单片机UART和USART使用方式是一样的,都使用异步模式。因为USART的使用方法上跟UART基本相同,所以在此就以UART来讲该通信协议了。

2、UART通信协议

1)起始位

  当未有数据发送时,数据线处于逻辑“1”状态;先发出一个逻辑“0”信号,表示开始传输字符。

2)数据位

  紧接着起始位之后。资料位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。从最低位开始传送,靠时钟定位。

3)奇偶校验位

  资料为加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。

4)停止位

  它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。 由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

5)空闲位或起始位

  处于逻辑“1”状态,表示当前线路上没有资料传送,进入空闲状态。

  处于逻辑“0”状态,表示开始传送下一数据段。

6)波特率

  表示每秒钟传送的码元符号的个数,是衡量数据传送速率的指标,它用单位时间内载波调制状态改变的次数来表示。

  常用的波特率有:9600、115200……

  时间间隔计算:1秒除以波特率得出的时间,例如,波特率为9600的时间间隔为1s / 9600(波特率) = 104us。

3、UART功能说明

  接口通过三个引脚从外部连接到其它设备。任何 USART 双向通信均需要 至少两个引脚:接收数据输入引脚 (RX) 和发送数据引脚输出 (TX):
  RX:接收数据输入引脚就是串行数据输入引脚。过采样技术可区分有效输入数据和噪声,从而用于恢复数据。
  TX:发送数据输出引脚。如果关闭发送器,该输出引脚模式由其 I/O 端口配置决定。如果使 能了发送器但没有待发

  • 12
    点赞
  • 125
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
STM32UART是指STM32单片机的串行通信模块,它可以配置为异步模式,也就是UARTUART是一种通用的串行通信协议,用于在设备之间传输数据。与SPI和I2C类似,UART也可以用于与外部设备进行通信。USART则是STM32单片机的一个端口模块,可以根据需要配置成同步模式(如SPI,I2C),也可以配置为异步模式UART)。所以UART可以被认为是与SPI和I2C对等的协议,而USART则是一个实体。\[1\] 在STM32中,可以使用USART模块进行串口通信。在代码中,可以使用USART_SendData函数来发送一个字节的数据,该函数将要发送的数据写入TDR寄存器。如果要发送一个字符串,可以编写一个发送函数,如Send_data函数,该函数使用USART_SendData函数循环发送字符串中的每个字符,直到遇到字符串结束符'\0'。\[3\] 在main函数中,可以使用USART_Config函数来配置USART模块的工作模式和波特率。然后可以使用Usart_SendByte函数发送一个字节的数据,使用Usart_SendHalfWord函数发送一个16位的数据,使用Usart_SendArray函数发送一个数组,使用Usart_SendString函数发送一个字符串。\[2\] 总之,UARTSTM32单片机的串行通信模块,可以配置为异步模式,而USART是一个端口模块,可以根据需要配置为同步模式或异步模式。在代码中,可以使用USART_SendData函数发送数据,也可以编写发送函数来发送字符串。 #### 引用[.reference_title] - *1* *3* [STM32学习总结——UART](https://blog.csdn.net/m0_58838850/article/details/126331577)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【STM32UART串口通信详解](https://blog.csdn.net/yli001/article/details/129518889)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值