计算机系统应用教程网站

网站首页 > 技术文章 正文

我在高职教STM32——串口通信(二)

btikc 2024-10-12 11:44:18 技术文章 5 ℃ 0 评论

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正是如此,才有了借助头条平台寻求认同感和成就感的想法。在这里,我准备陆续把自己花了很多心思设计的教学课件分享出来,如果您正是一名单片机爱好者或是一名同行,欢迎点赞+关注,各位的支持是本人持续输出的动力,多谢多谢!#30天学会STM32##单片机#

通信,按照传统的理解就是信息的传输与交换。对于像STM32这样的单片机来说,通信则与传感器、存储芯片、外围控制芯片等技术紧密结合,成为整个单片机系统的“神经中枢”。没有通信,单片机所实现的功能仅仅局限于单片机本身,就无法通过其它设备获得有用信息,也无法将自己产生的信息告诉其它设备。如果单片机通信没处理好的话,它和外围器件的合作程度就会受到限制,最终整个系统也无法完成强大的功能,由此可见单片机通信技术的重要性。UART(Universal Asynchronous Receiver/Transmitter,即通用异步收发器)串行通信是单片机最常用的一种通信技术,通常用于单片机和电脑之间、单片机和单片机之间、单片机与外围器件的通信。

【学习目标】

  1. 知道通信基本概念的含义;
  2. 理解通信机制中物理层和协议层分离的理念;
  3. 学会配置STM32的串口功能;
  4. 了解printf()函数“打印”至串口的实现过程;
  5. 掌握使用串口调试软件对单片机的调试方法。

STM32串口通信涉及的知识较多,为了不让篇幅太长,本章打算分五个部分来讲解,本文是第二部分。

二、串口通信的电气特性与逻辑协议

串口通信(Serial Communication)是一种设备间非常常用的通信方式,因为它简单便捷,因此大部分电子设备都支持该通信方式,电子工程师在调试设备时也经常使用该通信方式输出调试信息。

2.1 通信协议的分层理念

对于通信协议,通常以分层的方式来理解,最基本的是把它分为物理层协议层物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。打个比方,物理层规定我们用嘴巴还是用肢体来交流,协议层则规定我们用中文还是英文来交流。

2.2 物理层之RS-232标准

提到串口,就不得不先聊聊RS-232这个古老而经典的有线通信协议。因为无论学习哪一种通信协议,都需要了解其信号的用途、通讯接口以及信号的电平标准,而RS-232通信协议就是初学者入门的最佳选择。首先,我们先来瞅瞅它的接口和线缆,如图5所示。

其次,我们还得知道,在我们的STM32开发板上,3.3V代表高电平而0V代表低电平的,但这并不意味着其他场合都遵照这套逻辑。对于RS-232标准来说,它是个反逻辑,也叫做负逻辑。为何叫负逻辑?如图6所示,在它的传输线缆中,-3V~-15V电压代表是逻辑1,+3~+15V电压代表是逻辑0。即低电平代表的是1,而高电平代表的是0,所以称之为负逻辑。至于为什么采用这样“别扭”的负逻辑,这与早期线缆抗干扰性能不足有关,电压高一些、跨度范围大一些可以适当弥补这个不足。

因此,传统的RS-232线缆上传输信号的电平是不能直接被控制器直接识别,这些信号会经过一个“电平转换芯片”转换成单片机能够承受和识别的“TTL标准”的电平信号,才能实现通信,如图7所示。看到这里,大家似乎慢慢有点明白了,其实RS-232串口和单片机串口,它们的协议类型是一样的,只是电平标准不同而已。

我们再来看一下图8中的DB9接头,虽然它有9个针脚(孔),但在目前工业控制使用的串口通讯中,一般只使用RXD(接收)、TXD(发送)以及GND(接地)三条线,其他信号都被裁剪掉了。因此,就算不使用这种形状的接头,单独接三根导线也能完成通信(只不过抗干扰性能差点),如图9所示,一方的发送连另一方的接收(反之亦然)。通过以上讲解,不知大家是否理解了通信物理层和协议层分离的理念。

2.3 协议层之UART数据格式

通用异步收发器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种串行、异步、全双工的通信协议,在嵌入式领域应用的非常广泛。如图10所示,它规定了数据帧的内容,它由起始位、主体数据、校验位以及停止位组成,通讯双方的数据帧格式要约定一致才能正常收发数据。

  • 波特率:两个通信设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码,图10中用虚线分开的每一格就是代表一个码元。常见的波特率有4800、9600、115200等。
  • 通信的起始位停止位:串口通信的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑0的数据位表示,而数据包的停止信号可由0.5、1、1.5 或2个逻辑1的数据位表示,只要双方约定一致即可。最常用的是1个停止位。
  • 有效数据:在数据包的起始位之后紧接着的就是要传输的主体数据,也称为有效数据,有效数据的长度常被约定为5、6、7或8位长。最常用的8位有效数据,因为正好是一个字节。
  • 数据校验位:由于数据通信容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验、偶校验、0校验、1校验以及无校验。最常用的是无校验。

对于以上最常用的数据格式,我们通常简写成“8-N-1”,即8位有效数据、无校验、1个停止位。

2.4 USB转串口通信

随着技术的发展,工业上还有RS-232串口通信的大量使用,但是商业技术的应用上,已经慢慢的使用USB转UART技术取代了RS-232串口,绝大多数台式机和笔记本电脑已经没有串口这个东西了,更很少见DB9接头和线缆。那我们要实现单片机和电脑之间的通信该怎么办呢?我们只需要在电路上添加一个USB转串口芯片,就可以成功实现USB通信协议和标准UART 串行通信协议的转换,在我们的开发板上,使用的是CH340G这个芯片,开发板上的实物如图11所示,电路原理如图12所示。

CH340G这个电路结构和原理我们不做分析,只需要知道6脚和7脚的D+和D-分别接micro-USB口的2个数据引脚上去,2脚和3脚接到了STM32芯片的USART1_RX和USART1_TX上,配合必要的外围电路,就能通过USB线缆实现电脑与开发板的串口通信。

(第二部分完,共五部分)

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表