学习嵌入式可谓是有很多很杂很烦的东西要学,串口传输算是其中最最基础的东西了吧。接触单片机开始,这个东西就是很重要的学习部分。这片博文是从最最基础的东西讲起。
首先,串口最初有9针和25针的接头,各种引脚的定义如下
9 针串口(DB9)
针脚 简写 功能说明
1 CD 载波侦测(Carrier Detect)
2 RXD 接收数据(Receive)
3 TXD 发送数据(Transmit)
4 DTR 数据终端准备(Data Terminal Ready)
5 GND 地线(Ground)
6 DSR 数据准备好(Data Set Ready)
7 RTS 请求发送(Request To Send)
8 CTS 清除发送(Clear To Send)
9 RI 振铃指示(Ring Indicator)
25 针串口针脚定义(DB25)
注:除以下定义外,其作针脚均为空
针脚 简写 功能说明
8 CD 载波侦测(Carrier Detect)
3 RXD 接收数据(Receive)
2 TXD 发送数据(Transmit)
20 DTR 数据终端准备(Data Terminal Ready)
7 GND 地线(Ground)
6 DSR 数据准备好(Data Set Ready)
4 RTS 请求发送(Request To Send)
5 CTS 清除发送(Clear To Send)
22 RI 振铃指示(Ring Indicator)
很显然最开始的时候这种通信机制还不是很精简,很多信号被使用着,现在的串口已经有一套标准了,UART里的U就是通用的意思。最简化的串口只要3根信号线就可以搞定(地,发送,接受)。
还有一个电平的变化需要解释:计算机用的是RS232C电平(1:-3~-12V,0:3~12V),一般嵌入式设备用的是TLL电平(1:5V附近,0:0V附近)。所以一般与嵌入式设备连接的时候会要用一个转换装置,USB转串就是这么一个东东。
好了,电平说完了说说时序,古老的时候时序什么的我不就不追溯了,说说现在的,来张图先:
发送数据过程:空闲状态,线路处于高电位;当收到发送数据指令后,拉低线路一个数据位的时间T,接着数据按低位到高位依次发送,数据发送完毕后,接着发送奇偶校验位和停止位(停止位为高电位),一帧资料发送结束。
接收数据过程:空闲状态,线路处于高电位;当检测到线路的下降沿(线路电位由高电位变为低电位)时说明线路有数据传输,按照约定的波特率从低位到高位接收数据,数据接收完毕后,接着接收并比较奇偶校验位是否正确,如果正确则通知后续设备准备接收数据或存入缓存。
由于UART是异步传输,没有传输同步时钟。为了能保证数据传输的正确性,UART采用16倍数据波特率的时钟进行采样。每个数据有16个时钟采样,取中间的采样值,以保证采样不会滑码或误码。一般UART一帧的数据位数为8,这样即使每个数据有一个时钟的误差,接收端也能正确地采样到数据。
UART的接收数据时序为:当检测到数据的下降沿时,表明线路上有数据进行传输,这时计数器CNT开始计数,当计数器为24=16+8时,采样的值为第0位数据;当计数器的值为40时,采样的值为第1位数据,依此类推,进行后面6个数据的采样。如果需要进行奇偶校验,则当计数器的值为152时,采样的值即为奇偶位;当计数器的值为168时,采样的值为"1"表示停止位,一帧数据接收完成。
参考博文:http://blog.sina.com.cn/s/blog_3e6ed8f90100mkv0.html
阅读(6934) | 评论(0) | 转发(0) |