往期内容
interrupt子系统专栏:
- 专栏地址:interrupt子系统
- Linux 链式与层级中断控制器讲解:原理与驱动开发
-- 末片,有专栏内容观看顺序pinctrl和gpio子系统专栏:
专栏地址:pinctrl和gpio子系统
编写虚拟的GPIO控制器的驱动程序:和pinctrl的交互使用
-- 末片,有专栏内容观看顺序
input子系统专栏:
- 专栏地址:input子系统
- input角度:I2C触摸屏驱动分析和编写一个简单的I2C驱动程序
-- 末片,有专栏内容观看顺序I2C子系统专栏:
- 专栏地址:IIC子系统
- 具体芯片的IIC控制器驱动程序分析:i2c-imx.c-CSDN博客
-- 末篇,有专栏内容观看顺序总线和设备树专栏:
- 专栏地址:总线和设备树
- 设备树与 Linux 内核设备驱动模型的整合-CSDN博客
-- 末篇,有专栏内容观看顺序
目录
前言
串口(UART)作为嵌入式系统中广泛应用的通信接口,以其结构简单、稳定可靠的特点,成为调试与模块连接的首选。串口硬件由发送与接收部分组成,通过三根线(TXD、RXD、GND)实现数据交互。本文介绍了串口的基本参数,如波特率、数据位、校验位等,分析了不同逻辑电平(TTL/CMOS与RS-232)的差异及其在实际应用中的适配性。现代ARM芯片通常采用TTL电平,通过转换芯片支持RS-232或USB接口,实现与外设或电脑间的数据通信。还讲解了串口的内部结构与数据传输流程。
1.串口的硬件介绍
UART的全称是Universal Asynchronous Receiver and Transmitter,即异步发送和接收。
串口在嵌入式中用途非常的广泛,主要的用途有:
- 打印调试信息;
- 外接各种模块:GPS、蓝牙;
串口因为结构简单、稳定可靠,广受欢迎。通过三根线即可,发送、接收、地线。
TxD线把PC机要发送的信息发送给ARM开发板。最下面的地线统一参考地。
2.串口的参数
- 波特率:一般选波特率都会有9600,19200,115200等选项。每秒传递的码元个数,二进制调制下意思就是每秒传输这么多个比特位数(bit)。(二进制调制下波特率其实就是等同于比特率,如果是多进制下则不是。)
- 起始位:先发出一个逻辑"0"的信号,表示传输数据的开始。
- 数据位:可以是5~8位逻辑"0"或"1"。如ASCII码(7位),扩展BCD码(8位)。小端传输。
- 校验位:数据位加上这一位后,使得"1"的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。
- 停止位:它是一个字符数据的结束标志。
怎么发送一字节数据,比如'A'?
双方约定好波特率:每一位占据的时间,假设为1s(夸张的情况下)
原来TxD和RxD(发送引脚和接收引脚)之间是高电平,ARM拉低电平,保持1bit时间
PC在低电平处开始计时
ARM根据数据(bit)驱动TxD电平(驱动发送引脚处的电平),好让PC处的RxD引脚去接收
TxD = Data[0]
TxD = Data[1]
...
TxD = Data[7]
以上结合起来为数据位
PC则每个数据位 的中间读取RxD引脚的状态(收到的TxD数据发然PC读取存进PC)
Data[0] = RxD(t0)
Data[1] = RxD(t1)
...
Data[7] = RxD(t7)
如果是以前的电子,那TxD可能还会在发送完数据后再发送一个校验位
分为奇数位和偶数位:数据位+校验位中为1的位的个数为奇还是偶数
传输完数据后,还要引入停止位,把电平恢复到原来的电平状态(高电平)
前面图中提及到了逻辑电平,也就是说代表信号1的引脚电平是人为规定的。
如图是TTL/CMOS逻辑电平下,传输'A'时的波形:
在xV至5V之间,就认为是逻辑1,在0V至yV之间就为逻辑0。
如图是RS-232逻辑电平下,传输'A'时的波形:
在-12V至-3V之间,就认为是逻辑1,在+3V至+12V之间就为逻辑0。
RS-232的电平比TTL/CMOS高,能传输更远的距离,在工业上用得比较多。
市面上大多数ARM芯片都不止一个串口,一般使用串口0来调试,其它串口来外接模块。
3.串口电平
ARM芯片上得串口都是TTL电平的,通过板子上或者外接的电平转换芯片,转成RS232接口,连接到电脑的RS232串口上,实现两者的数据传输。
现在的电脑越来越少有RS232串口的接口,当USB是几乎都有的。因此使用USB串口芯片将ARM芯片上的TTL电平转换成USB串口协议,即可通过USB与电脑数据传输。
上面的两种方式,对ARM芯片的编程操作都是一样的。
电脑是USB接口
差不多,把电平转换芯片换成USB串口芯片,如果采用的逻辑电平方式不同的话,额外加上电平转换芯片即可 -- JZ2440开发板
注意:
串口0一般都是用来与电脑相连打印调试信息,其它串口用来连接模块,如果连接的模块和串口1、2...是相同的逻辑电平那可以直接连接,如果不是那也是需要用到电平转换芯片
4.串口内部结构
ARM芯片是如何发送/接收数据?
如图所示串口结构图:
上图为开发板内串口的UART协议
Transmit Shifter: 发送移位器,将开发板的数据逐位发送到TxD引脚发送给PC端的UART硬件
Transmmit Buffer:发送缓冲寄存器,接收开发板内存发送过来的数据然后发送给移位器
Receive Shifter: 接收移位器,逐行接收PC发送给开发板上的UART硬件中的引脚的数据,然后发送给Receive Buffer
Receive Buffer: 接收缓冲寄存器,开发板内存中会将Receive Buffer中的数据读走
要发送数据时,CPU控制内存要发送的数据通过FIFO传给UART单位,UART里面的移位器,依次将数据发送出去,在发送完成后产生中断提醒CPU传输完成。
接收数据时,获取接收引脚的电平,逐位放进接收移位器,再放入FIFO,写入内存。在接收完成后产生中断提醒CPU传输完成。
5.串口和引脚
串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。
引脚,任何一个芯片都要在有电的时候去工作,那么它必然就有一个VCC,一个GND,这个VCC和GND就是两个引脚,除了这些,还有一些其他的引脚,比如RST,普通的IO都是引脚。
引脚与串口的区别,他们都是物理接口,若干个特定的IO(引脚)组成一个串口,比如我们的单片机的串口(包涵了引脚GND VCC RXD TXD)。
串口(Serial Port):串口是一种用于在计算机和外部设备之间进行数据传输的接口。它通常用于通过串行通信协议(如RS-232、RS-485、UART等)来传输数据。串口通常具有多个引脚,包括数据线(如TX、RX)、控制线(如RTS、CTS)和地线(GND)。串口可以用于与各种外部设备进行通信,如调制解调器、打印机、传感器等。
引脚(Pin):引脚是电子设备上的接点,用于连接和传输电信号。引脚通常用于连接电子元件(如集成电路、传感器、电机等)或连接外部设备(如显示器、键盘、LED等)。引脚可以用于输入和输出电信号,以实现数据的传输和控制。引脚的功能和用途取决于所连接的设备或电路的设计。