在人与人对话中应满足以下条件
- 1、你说的语言对方能听懂
- 2、你的语速对方能接受
相应的,在多机通信中,也应满足一定条件
- 1、双方约定的通信协议相同
- 2、双方满足时序要求
类比如上。
下面开始举例
校验位
以前的串口传输不太可靠,就会用一个位来作为校验位
校验位有奇校验、偶校验。意思是加上校验位,1的个数必须是奇数、偶数
假设选择奇校验,传输的数据有偶数个1。那么奇校验位上的数据就是1,这样1的个数就是奇数个了。
结社选择偶校验,传输的个数已经是偶数个1。那么偶校验位上的数据就是0,这样1的个数仍然是偶数个。
波特率
一秒钟能传输多少位的数据
以上为基础知识
——————————————————————————————————
UART
Universal Asynchronous Receiver/Transmitter
通用的异步收发传输
串口通信
为什么需要电平转换芯片
在开发板到电平转换芯片之间
- 用0V表示0——低电平
- 用3.3V表示1——高电平
在电平转换芯片到PC之间
距离可能很长,为了使信号具备强的抗干扰性,我们会让它的电压比较高,比如
- 用-9V ~ -12V表示0 ——低电平
- 用9V ~ 12V表示1 ——高电平
具体这个数字是多少,我们不去关心。只要知道它中间的原理是这样即可。
UART如何传数据
假设我们要传一个数据——A
A的10进制是0x41
2进制是0x0100,0001
假设双方约定好,传输的数据都是8位
UART传输步骤
1、在最开始没有传输数据时,一直保持高电平。如果开发板如2440想发送数据时,就让RxD0变为低电平——0,并保持一个时间单位T。
- 2、PC感觉到RxD0从1变为0,就知道2440即将发送数据。
这个即将,就是一个时间单位T后。这个T是通过事先约定的波特率来决定,T=1s/波特率。这个约定只能提前约定好,没办法同时约定,就叫做异步。 - 3、起始位过了一个时间单位T后,开始传输数据位(这也是提前约定好的,比如这里是8位)。然后每过一个时间单位T传输一个数据位。检测发送的数据是在一个时间单位T的中间进行检测。
- 4、发送数据位结束后,返回原来的状态——高电平。并保持至少一个时间单位T。
保持的时间也是可以在发送之前约定好,有几个停止位。
在传输之前,必须约定好。如一个停止位,8个数据位。
使用串口工具的时候就能看到设置。
校验位是否使用可以进行选择,一般不需要。
串口调试软件可以很简单的设置这些,但开发板2440如何设置呢?
这时候就需要来设置开发板中的串口控制器
串口控制器
开发板如2440里面都会有一个串口控制器
想象一下,如果每传一个位的数据,都手动改变电平。这会非常麻烦。
这就需要使用串口控制器。
如果使用者想要发送数据,那么只需要将需要发送的数据如A,丢给这个串口控制器就可以了。它就会自动产生起始位,然后根据数据来产生电平变化,并且最后产生停止位。
2440串口控制器的设置
大概看一下2440中的串口控制器有哪些设置项。
打开芯片手册,点开UART一栏
它有三个串口,对应三个寄存器
校验位
Odd parity——奇校验
Even parity——偶校验
强制将校验位设置为1
强制将校验位设置为0
停止位
可以设置停止位有多少个。
至少为一个。
从芯片手册中得知,2440的停止位要么一个要么两个。
数据位
串口上的数据可以是5-8的任意位数。
一般为了简单,都是设置成8位。
TX/RX状态相关
有关于数据是否发送完毕等状态
UART发送相关
如果想发送数据的话,如A。
只要把0x41的二进制写入第一个寄存器的地址里即可
波特率
波特率是通过公式计算出来的。
根据串口工作与什么时钟。
计算好后写入相应寄存器即可。
——————————————————————————
串口控制器就会更具使用者以上的设置将信息发送到目标机 。
硬件的接线
只要注意MCU1和MCU2的TX和RX交叉详解即可。
即TX1接上RX2;TX2接上RX1