STM32 proteus + STM32Cubemx仿真教程(第四课串口教程)

发布于:2024-06-14 ⋅ 阅读:(188) ⋅ 点赞:(0)


前言

本篇文章开始带大家学习如何使用proteus和STM32Cubemx来完成STM32的学习,第四节课我们来学习串口通信。

proteus使用8.9版本。

STM32Cubemx使用6.3版本。

一、串口通信概念讲解

串口通信概念

串口通信(Serial Communication)是一种数据传输方式,它通过一根数据线按位(bit)顺序发送数据。这种方式通常用于长距离数据传输以及需要简单硬件连接的场合。常见的串口通信接口有RS-232、RS-485、USB等。

串行通信和并行通信

串行通信(Serial Communication):数据按位(bit)顺序通过一条或几条数据线传输,传输速度较慢,但电缆长度可以较长,适合远距离传输。

并行通信(Parallel Communication):数据同时通过多条数据线传输(通常为8位或16位),传输速度较快,但电缆长度有限,适合短距离传输,如计算机内部总线。

(此图片参考https://new.juyingele.com/news/2704.html)
在这里插入图片描述

波特率

波特率(Baud Rate)是指每秒钟传输的符号(或波特)数量。在串行通信中,通常一个符号代表一个比特(bit)。常见的波特率有9600、19200、38400、57600、115200等。波特率越高,数据传输速度越快,但对传输介质的要求也越高。

串口数据帧格式

在串口通信中,数据是以帧的形式发送的。一个典型的数据帧包括以下几个部分:
起始位(Start Bit):用于通知接收端数据传输的开始,通常为1位。
数据位(Data Bits):实际的数据内容,通常为5位到8位。
校验位(Parity Bit):用于错误检测,可以有无校验、奇校验或偶校验。
停止位(Stop Bits):用于标识一帧数据的结束,通常为1位或2位。
示例:8N1格式
8:表示8个数据位。
N:表示无校验位(None)。
1:表示1个停止位。

在这里插入图片描述

同步通信和异步通信

在串口通信中,数据传输的时间控制方式主要分为同步通信(Synchronous Communication)和异步通信(Asynchronous Communication)。这两种方式在数据传输的时间协调上有所不同。

同步通信(Synchronous Communication)

概念
同步通信是指发送端和接收端在同一个时钟信号(Clock Signal)的控制下进行数据传输。时钟信号确保数据传输的时序一致,发送端和接收端同时按照时钟的节奏发送和接收数据。

特点

  1. 时钟信号:需要额外的一条线传输时钟信号,保证发送和接收同步。
  2. 高速传输:由于有时钟信号同步,可以实现高速数据传输。
  3. 复杂性:硬件和协议实现较为复杂,需要发送和接收双方保持时钟同步。

应用

  • SPI(Serial Peripheral Interface)
  • I2C(Inter-Integrated Circuit)
  • CAN(Controller Area Network)

示例
在SPI通信中,主设备(Master)生成时钟信号,所有从设备(Slave)都以这个时钟信号为基准进行数据传输。

异步通信(Asynchronous Communication)

概念
异步通信不使用共享的时钟信号,而是通过起始位(Start Bit)和停止位(Stop Bit)来标识数据帧的开始和结束。数据传输的时间间隔可以不一致,接收端通过起始位和停止位来确定每个数据帧的位置。

特点

  1. 无需时钟信号:不需要额外的时钟线,降低了硬件复杂度。
  2. 灵活性高:数据可以在任意时间发送和接收,适合不定期数据传输。
  3. 较低速率:由于需要增加起始位和停止位,数据传输速率相对较低。

应用

  • RS-232串口通信
  • UART(Universal Asynchronous Receiver/Transmitter)

示例
在UART通信中,每个数据帧由一个起始位、5到8个数据位、一个可选的校验位和一个或两个停止位组成。接收端通过检测起始位来同步,并在停止位时重新准备接收下一帧数据。

对比总结

特性 同步通信(Synchronous Communication) 异步通信(Asynchronous Communication)
时钟信号 需要外部时钟信号 无需外部时钟信号
数据传输速率 高速 较低
硬件复杂度 较高 较低
适用场景 连续、高速数据传输 不定期、低速数据传输
常见协议 SPI、I2C UART、RS-232

实际应用

  • 同步通信:适用于需要高数据传输速率和精确时序控制的场合,如嵌入式系统中传感器数据采集、存储设备通信等。
  • 异步通信:适用于不定期数据传输且对时序要求不高的场合,如计算机与外设的通信、远距离低速数据传输等。

通过了解同步通信和异步通信的基本原理和区别,可以在实际应用中选择合适的通信方式,确保系统的可靠性和效率。

串口通信连接方式

串口通信的连接方式主要涉及四个重要的引脚:接收数据(RX)、发送数据(TX)、地(GND)和电源(VCC)。正确连接这些引脚可以确保设备之间的数据传输顺畅和可靠。

连接方式

  • 设备A的VCC连接设备B的VCC(如果需要)

典型连接示例

假设我们有两个设备:设备A和设备B。它们的串口引脚连接如下:

设备A 引脚 连接方式 设备B 引脚
TX --------> RX
RX <-------- TX
GND --------> GND
VCC --------> VCC

图示

设备A                     设备B
+---------+               +---------+
|         |               |         |
|    TX  -|-------------->|-  RX    |
|         |               |         |
|    RX  -|<--------------|-  TX    |
|         |               |         |
|   GND  -|-------------->|-  GND   |
|         |               |         |
|   VCC  -|-------------->|-  VCC   |
+---------+               +---------+

二、STM32Cubemx创建工程

这里我们选择使用串口1来完成这次的实验。

PA10作为串口接收数据的引脚。

PA9作为串口发送数据的引脚。
在这里插入图片描述

三、proteus仿真电路图

首先找到串口:

在这里插入图片描述
连接串口线:

这里需要注意的就是RXD是连接到单片机上面的RXD,TXD是连接到单片机上面的TXD,大家不要连接反了。
在这里插入图片描述

找到虚拟终端:

在这里插入图片描述

这里的连线就是RXD - TXD,TXD-RXD。
在这里插入图片描述
整体仿真图:

在这里插入图片描述

四、代码编写

下面先给大家讲解一下串口的发送函数:

HAL_UART_Transmit函数是STM32 HAL库(硬件抽象层库)中用于通过UART(通用异步收发传输器)接口发送数据的函数。STM32 HAL库为开发者提供了一个高层次的接口,以简化STM32微控制器外设的操作。HAL_UART_Transmit函数可以在非阻塞或阻塞模式下工作,具体取决于传输完成前是否需要等待。

函数定义和原型

HAL_UART_Transmit函数的原型通常如下所示:

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);

参数说明

  • UART_HandleTypeDef *huart: 指向UART句柄的指针。该句柄包含了UART外设的配置信息和状态信息,通常在初始化UART外设时设置。
  • uint8_t *pData: 指向要发送的数据缓冲区的指针。
  • uint16_t Size: 要发送的数据字节数。
  • uint32_t Timeout: 发送操作的超时时间(以毫秒为单位)。如果在指定时间内没有完成发送操作,函数将返回超时错误。

返回值

该函数返回一个HAL_StatusTypeDef类型的值,表示函数的执行结果。可能的返回值包括:

  • HAL_OK:操作成功。
  • HAL_ERROR:操作失败。
  • HAL_BUSY:UART正在进行其他操作。
  • HAL_TIMEOUT:操作超时。

示例代码

以下是一个使用HAL_UART_Transmit函数发送数据的示例代码:


int main(void)
{
    while (1)
    {
        HAL_UART_Transmit(&huart1, "Hello World\r\n", sizeof("Hello World\r\n") - 1, 1000);
        HAL_Delay(1000); // 延时1秒
    }
}

运行效果:

在这里插入图片描述

总结

本篇文章就讲解到这里,大家有什么疑问都可以留言。

本篇文章代码和工程将放在微信公众号中。

回复 STM32仿真串口即可领取源码和工程。


网站公告

今日签到

点亮在社区的每一天
去签到