写在前面:
一个嵌入式系统往往不能单独工作,需要多个设备协同运作。这就需要通信,而通信的本质就是信息的传递,就像我们日常面对面的交流一样。在STM32微控制器的世界中,通信的目的就是将一个设备上的数据传输到另一个设备上。为了使这种数据传输能够顺利进行,双方必须使用相同的语言,这就涉及到通信协议。通信协议规定了数据传输的规则和格式,使得数据收发双方能够按照这些预定的规则正确地交换信息。
本节课将介绍在单片机中常用的串口通信功能。串口是一种在单片机,传感器,执行模块等诸多设备上常用的通讯接口,在比赛中,可以通过串口读取遥控器发送来的数据,也可以通过串口读取超声波等传感器的数据,也可以使用串口在单片机和运行计算机视觉的电脑之间进行通讯。
通过本节课的学习,将掌握如何通过APB时钟计算串口的波特率,串口在cubeMX中的配置方法,串口的接收中断与空闲中断功能,串口的发送函数与发送中断。
串口通信是一种常见的数据传输方式,简单来说,就是设备之间通过一根线一位一位地传输数据。串口通信就像一个英语听力考试,以下是详细的类比:
在串行通信中,TX、RX 和 GND 是三个关键的引脚,它们分别代表数据的发送、接收和接地。以下是对每个引脚的详细介绍:
串行通信是一种数据传输方式,它将数据一位一位地通过一条线传输到另一个设备。这个过程有点像把一长串的珠子一颗一颗地穿到一条线上,然后再一颗一颗地取下来。所以数据在传输前需要转换成二进制格式,这是因为计算机和电子设备只能处理二进制(0和1)。以下是数据变成二进制格式并通过串行通信发送的过程:
数据转换:将要传输的数据(如字符或数字)转换成二进制格式。例如,字符'A'的ASCII码是65,对应的二进制是01000001。
添加控制信息:在实际传输中,每个数据字节可能会加上一些额外的信息,如起始位、停止位和校验位。
①起始位: 起始位必须是持续一个比特时间的逻辑0电平,标志传输一个字符的开始,接收方可用起始位使自己的接收时钟与发送方的数据同步。
②数据位: 数据位紧跟在起始位之后,是通信中的真正有效信息。数据位的位数可以由通信双方共同约定。传输数据时先传送字符的低位,后传送字符的高位。
③奇偶校验位: 奇偶校验位仅占一位,用于进行奇校验或偶校验,奇偶检验位不是必须有的。如果是奇校验,需要保证传输的数据总共有奇数个逻辑高位;如果是偶校验,需要保证传输的数据总共有偶数个逻辑高位。
④停止位: 停止位可以是是1位、1.5位或2位,可以由软件设定。它一定是逻辑1电平,标志着传输一个字符的结束。
⑤空闲位: 空闲位是指从一个字符的停止位结束到下一个字符的起始位开始,表示线路处于空闲状态,必须由高电平来填充。
逐位传输:数据按顺序一位一位地通过发送线传输。例如,对于字符'A',完整的传输序列可能是:起始位(0)- 01000001(数据位)- 停止位(1)