rs232 订阅
RS-232标准接口(又称EIA RS-232)是常用的串行通信接口标准之一,它是由美国电子工业协会(EIA)联合贝尔系统公司、调制解调器厂家及计算机终端生产厂家于1970年共同制定,其全名是“数据终端设备( DTE)和数据通信设备(DCE)之间串行二进制数据交换接口技术标准”。 [1] 展开全文
RS-232标准接口(又称EIA RS-232)是常用的串行通信接口标准之一,它是由美国电子工业协会(EIA)联合贝尔系统公司、调制解调器厂家及计算机终端生产厂家于1970年共同制定,其全名是“数据终端设备( DTE)和数据通信设备(DCE)之间串行二进制数据交换接口技术标准”。 [1]
信息
型    式
(DB-9)与(DB-25)
指定组织
EIA等
中文名
异步传输标准接口
外文名
RS-232
RS-232简介
在串行通讯时,要求通讯双方都采用一个标准接口,使不同的设备可以方便地连接起来进行通讯。RS-232-C 接口(又称EIARS-232-C)是目前最常用的一种串行通讯接口。(“RS-232-C”中的“-C”只不过表示RS-232的版本,所以与“RS-232”简称是一样的)。 [2]  它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”该标准规定采用一个25个脚的DB-25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。后来IBM的PC机将RS232简化成了DB-9连接器,从而成为事实标准。而工业控制的RS-232口一般只使用RXD、TXD、GND三条线。 [2] 
收起全文
精华内容
下载资源
问答
  • RS232

    2019-09-27 12:17:20
    RS232 RS232是一种常见的串行通讯接口,一种常见的RS232通信接口是9针的接口(DB-9),如下图所示: 在RS232的针脚上,一般使用-3V~-15V(有些文档说明中为-5V~-15V)之间的任意电平表示逻辑1,而使用+3V...

    RS232是一种常见的串行通讯接口,一种常见的RS232通信接口是9针的接口(DB-9),如下图所示:1479998-20190626154505188-1998854214.jpg

    在RS232的针脚上,一般使用-3V~-15V(有些文档说明中为-5V~-15V)之间的任意电平表示逻辑1,而使用+3V~+15V(有些文档说明中为5V~15V)之间的任意电平表示逻辑0。图中对管脚的标号做了标注,其中pin 2是RXD,pin 3是TxD,pin 5是GND。只需要这三个端口就能完整的实现RS232的数据传输功能。稍后我们将在Vivado环境进行一个简单实现。

    RS232的其余特性包括:

    • 允许采用双向全双工的通信方式(PC机可以在发射数据的同时通过该接口接收数据);
    • 可以最高以10KByte/s的速度进行数据通信。

    在开始之前,首先定义清楚RS232信号线上的时序。在RS232关键的三根信号线当中并没有时钟线,相邻两个字符(一个字,一般假定为1个byte,8bits)之间需要开始和终值位进行标定,所以相邻字符的间隔完全可以是任意的,因而也可以认为这是一种异步通信方式。一般认为单个字符在进行传输的时候首先传输低位,我们进行以下约定。

    • 发射模块idle状态的时候TXD ='1';
    • 发射模块发送开始位start bit的时候TXD = '0';
    • 发射模块发送终止位stop bit的时候TXD = '1';

    如果发送0x55的话发送数据线上的时序信号如下(注意发送'1'的时候信号线为低电平):

    1479998-20190626154512855-90581348.gif

    我们实现的传送速度为115200bauds,bauds(波特率)本身表示传送符号的速率,但是这里是异步通信方式,我们认为1个bit就是一个符号,包含所有数据位和起始终止符号位。传输速率为115200bauds的情况下,每个bits的持续时间为(1/115200=)8.7us。

    1.波特率产生

    在数字系统当中,时钟与数据速率紧密相关,时钟驱动着时序电路的数据流动,数据传输的速度与数字电路的时钟是紧密相关。在不考虑数据有效位的情况下,时钟速率与数据传输速率(bit/s)应该是相等的。前文提到,RS232的9根线当中并没有定义时钟线,那么115200 bauds的数据应该如何驱动呢。事实上,驱动时钟在数据发送端和接收端。假设接口全速运行,数据传送都是连续的,那么需要的最小时钟就是115.2kHz。如果有25MHz的启动时钟(\(clk\_freq\))的话如何产生115.2kHz的驱动时钟(\(BaudTick\))呢。

    在200MHz的时钟驱动下每间隔217.014(25MHz/115.2kHz)个时钟周期就输出一个高电平(可以说是间隔217个数或218个数输出一个高电平,但是大多是间隔217个数),那么就能得到\(BaudTick\)。如果采用计数规则的话,就必须用到取模运算。为了充分利用二进制运算本身的特性,设计如下代码:

    parameter ClkFrequency = 25000000; // 25MHz
    parameter Baud = 115200;//115200 bauds,32bits数据精度
    parameter BaudGeneratorAccWidth = 16;
    parameter BaudGeneratorInc = ((Baud<<(BaudGeneratorAccWidth-4))+(ClkFrequency>>5))/(ClkFrequency>>4);//由于该parameter运算数字位整数,所以其输出一定为整数
    reg [BaudGeneratorAccWidth:0] BaudGeneratorAcc;
    always @(posedge clk)
        BaudGeneratorAcc <= BaudGeneratorAcc[BaudGeneratorAccWidth-1:0] + BaudGeneratorInc;//注意累加的时候不取最高位。
    
    wire BaudTick = BaudGeneratorAcc[BaudGeneratorAccWidth];//最高位输出表示到达累加数字。

    2.发射端

    RS232发射端框图可以表达为

    1479998-20190626154528273-1560619666.gif

    所以我们要完成的工作实际上就是并串的转换。另外,

    • 该模块要能够自动添加串行的起始终止位;
    • 该模块要能够响应TxD_start以开始数据传输(数据到来应该晚于Tx_start一个baudtick周期);
    • 在传输数据的时候,busy输出逻辑'1';

    由于同时要处理数据位和数据起始和终止位,所以可以使用状态机构造该结构。

    reg [3:0] state;
    
    // the state machine starts when "TxD_start" is asserted, but advances when "BaudTick" is asserted (115200 times a second)
    always @(posedge clk)
    case(state)
        4'b0000: if(TxD_start) state <= 4'b0100;//idle
      4'b0100: if(BaudTick) state <= 4'b1000; // start
      4'b1000: if(BaudTick) state <= 4'b1001; // bit 0
      4'b1001: if(BaudTick) state <= 4'b1010; // bit 1
      4'b1010: if(BaudTick) state <= 4'b1011; // bit 2
      4'b1011: if(BaudTick) state <= 4'b1100; // bit 3
      4'b1100: if(BaudTick) state <= 4'b1101; // bit 4
      4'b1101: if(BaudTick) state <= 4'b1110; // bit 5
      4'b1110: if(BaudTick) state <= 4'b1111; // bit 6
      4'b1111: if(BaudTick) state <= 4'b0001; // bit 7
      4'b0001: if(BaudTick) state <= 4'b0010; // stop1
      4'b0010: if(BaudTick) state <= 4'b0000; // stop2
        default: if(BaudTick) state <= 4'b0000;//idle
    endcase

    数据输出端口表示为:

    reg muxbit;
    
    always @(state[2:0])
    case(state[2:0])
      0: muxbit <= TxD_data[0];
      1: muxbit <= TxD_data[1];
      2: muxbit <= TxD_data[2];
      3: muxbit <= TxD_data[3];
      4: muxbit <= TxD_data[4];
      5: muxbit <= TxD_data[5];
      6: muxbit <= TxD_data[6];
      7: muxbit <= TxD_data[7];
    endcase
    
    // combine start, data, and stop bits together
    //原始代码为(原始代码start状态有问题)
    //assign TxD = (state<4) | (state[3] & muxbit);
    assign TxD = (state<=4) | (state[3] & muxbit);

    3.接收端

    数据接收端的框图如下所示:
    1479998-20190626154537450-1933294251.gif

    该模块要完成的功能是:

    • 串并转换,并且能够根据同步起始和终止位进行数据同步;
    • 在串并转换完成之后data_ready输出一个时钟周期(baudtick)逻辑'1',表明数据已经准备好;

    由于在RS232的标准当中没有时钟线,所以采样的相位基本不可能保持一致。想象,如果采样的边沿时钟在数据跳变的边沿,这就总是会导致采样数据与发送数据不一致。因而,在接收系统当中一般都会采用过采样的机制来保证数据的可靠性。这里我们采用8倍过采样的时钟对数据进行数据采样。

    另一点,数据在传输的时候可能会产生一些尖峰,直接进行采样是有一些不妥的。为了保持数据结果的可靠性,在8个过采样周期,连续的4个数据都一致,我们才输出这比较可靠的数据输出。为了不产生数据延时,我们使用两个寄存器来接收数据

    reg [1:0] RxD_sync;
    always @(posedge clk) if(Baud8Tick) RxD_sync <= {RxD_sync[0], RxD};

    再使用一个2位的计数器实现计数功能呢:

    reg [1:0] RxD_cnt;
    reg RxD_bit;
    
    always @(posedge clk)
    if(Baud8Tick)
    begin
      if(RxD_sync[1] && RxD_cnt!=2'b11) RxD_cnt <= RxD_cnt + 1;
      else 
      if(~RxD_sync[1] && RxD_cnt!=2'b00) RxD_cnt <= RxD_cnt - 1;
    
      if(RxD_cnt==2'b00) RxD_bit <= 0;
      else
      if(RxD_cnt==2'b11) RxD_bit <= 1;
    end

    使用状态机有一个优势就是自动串行化

    reg [3:0] state;
    
    always @(posedge clk)
    if(Baud8Tick)
    case(state)
      4'b0000: if(~RxD_bit) state <= 4'b1000; // start bit found?
      4'b1000: if(next_bit) state <= 4'b1001; // bit 0
      4'b1001: if(next_bit) state <= 4'b1010; // bit 1
      4'b1010: if(next_bit) state <= 4'b1011; // bit 2
      4'b1011: if(next_bit) state <= 4'b1100; // bit 3
      4'b1100: if(next_bit) state <= 4'b1101; // bit 4
      4'b1101: if(next_bit) state <= 4'b1110; // bit 5
      4'b1110: if(next_bit) state <= 4'b1111; // bit 6
      4'b1111: if(next_bit) state <= 4'b0001; // bit 7
      4'b0001: if(next_bit) state <= 4'b0000; // stop bit
      default: state <= 4'b0000;
    endcase

    next_bit实际上标定了一种数据速率的关系,如下所示:

    reg [2:0] bit_spacing;
    
    always @(posedge clk)
    if(state==0)
      bit_spacing <= 0;
    else
    if(Baud8Tick)
      bit_spacing <= bit_spacing + 1;
    
    wire next_bit = (bit_spacing==7);

    最后使用移位寄存机对数据进行暂存,然后定期置位data_ready信号即可

    reg [7:0] RxD_data;
    always @(posedge clk) if(Baud8Tick && next_bit && state[3]) RxD_data <= {RxD_bit, RxD_data[7:1]};

    最后对输入输出进行封装

    module serialGPIO(
        input clk,
        input RxD,
        input TxD_data_ready,
        output TxD,
        output RxD_data_ready,
        output reg [7:0] GPout,  // general purpose outputs
        input [7:0] GPin  // general purpose inputs
    );
    
    //wire RxD_data_ready;
    wire [7:0] RxD_data;
    async_receiver RX(.clk(clk), .RxD(RxD), .RxD_data_ready(RxD_data_ready), .RxD_data(RxD_data));
    always @(posedge clk) if(RxD_data_ready) GPout <= RxD_data;
    
        async_transmitter TX(.clk(clk), .TxD(TxD), .TxD_start(TxD_data_ready), .TxD_data(GPin));
    endmodule
    posted on 2019-06-26 15:46 luckfyzh 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/lafiizh/p/11090290.html

    展开全文
  • rs232

    2008-01-03 23:06:27
    用VC编写的RS232串口
  • RS232串口通信

    2018-03-30 16:39:22
    RS232串口通信RS232串口通信RS232串口通信RS232串口通信RS232串口通信
  • rs232 传输

    2014-05-26 11:20:28
    传输 rs232 相互学习 大家以后有机会可以相互交流
  • Published on:15.04.2018My motivation for monitoring RS232 with Python.I had PC and LG TV screen communicating via RS232 cable.PC was turning TV screen on and off via RS232 commands.But TV screen was n...

    0f9fa28e67ca70a69dc980c6e0bdb758.png

    Published on:15.04.2018

    My motivation for monitoring RS232 with Python.

    I had PC and LG TV screen communicating via RS232 cable.

    PC was turning TV screen on and off via RS232 commands.

    But TV screen was not acting normally, it was always in standby mode.

    So, either PC was not sending RS232 commands or TV screen was not responding to them .

    In order to diagnose the problem, I decided to spy on their communication .

    half-duplex and full-duplex RS232

    There are two types of communication in RS232 : half-duplex and full-duplex.

    In half-duplex while one device is talking another one is listening, just like people communication should be.

    In full-duplex both devices are talking and listening at the same time, people think that they can do this also, but it is not working in practice.

    Hardware

    The first step was to make special half duplex RS232 spy cable because I did not have software access on PC.

    So the only solution was to sniff communication between PC and TV .

    60238f602cc680382b6eb65cc21bb6c1.png

    On the same website, there are also Schematics for full duplex RS232 spy cable.

    Software

    For redirecting, all communication data from the RS232 compliant serial port device into a text file Eltima RS232 Data Logger can be used.

    The program is working fine, the only problem that I had was that there is no output on screen just to text file.

    No real-time watching of communication data was possible, due to that I decided to make my own program for viewing RS232 communication data in real-time .

    Python to the rescue

    The best thing about Python program language is that there is a package for everything.

    For access to the serial port in Python, there is pySerial package.

    My Python program was reading communication data and showing it on screen in real-time with timestamps of reading, and time difference between the last read.

    Python source code for RS232 sniffing:

    import serial # pyserial

    import datetime

    def to_hex(input_str):

    outpur_str = " ".join("{:02x}".format(ord(c)) for c in input_str)

    # 4b 41 20 30 20 46 46 0d

    return outpur_str

    def main():

    ser = serial.Serial(

    port='COM1',

    baudrate=9600,

    parity=serial.PARITY_NONE,

    stopbits=serial.STOPBITS_ONE,

    bytesize=serial.EIGHTBITS

    )

    # open if not opened

    if ser.isOpen() == False:

    print "OPENING port."

    ser.open()

    # header

    fmt = "{0:15}{1:35}{2}"

    print fmt.format('TIME', 'RAW HEX', 'TIME DELTA')

    # so to have first value

    time_of_last_read = datetime.datetime.now()

    while True:

    data_to_read = ser.in_waiting

    if data_to_read != 0: # read if tehre is new data

    time_now = datetime.datetime.now()

    data = ser.read(data_to_read)

    hex_with_space = to_hex(data)

    time_with_miliseconds = time_now.strftime("%H:%M:%S.%f")[:-3]

    time_delta = time_now - time_of_last_read

    print fmt.format(time_with_miliseconds, hex_with_space, time_delta)

    # last time

    time_of_last_read = time_now

    ser.close()

    if __name__ == '__main__':

    main()

    注意:本文来自Sasa Buklijas。本站无法对本文内容的真实性、完整性、及时性、原创性提供任何保证,请您自行验证核实并承担相关的风险与后果!

    CoLaBug.com遵循[CC BY-SA 4.0]分享并保持客观立场,本站不承担此类作品侵权行为的直接责任及连带责任。您有版权、意见、投诉等问题,请通过[eMail]联系我们处理,如需商业授权请联系原作者/原网站。

    展开全文
  • RS232 RJ45-RS232接线图

    2013-06-15 14:24:51
    RJ45-RS232接线图 MOXA 连接线针脚定义
  • RS232C

    2019-09-17 12:27:25
    2019.9.17 ## 开始RS232学习

    2019.9.17

    ## 开始RS232学习

    展开全文
  • RS232调试

    2019-08-25 22:23:17
    目前使用的是TTL转RS232RS232转TTL,这样的电路结构,作用是保证数据在远距离传输保真。 2.原理图 3.问题 基本原理是数据从mcu的TX_2232端输入,从RS232_TX端输出,目前遇到的问题是从示波器看数据是有输入...

    1.介绍
    目前使用的是TTL转RS232转RS232转TTL,这样的电路结构,作用是保证数据在远距离传输保真。

    2.原理图
    这里写图片描述

    3.问题
    基本原理是数据从mcu的TX_2232端输入,从RS232_TX端输出,目前遇到的问题是从示波器看数据是有输入的,但是数据没有输出

    4.解决过程
    (1)当先看看是不是芯片没有工作,看看芯片的电源有没有供电,使用万用表量C155电容两端是有3v输入的。
    (2)感觉是四周的电容没有焊接好,重新焊了一下,发现没有任何变化。
    (3)感觉是芯片坏了,或者芯片焊错了,重新换了芯片之后还是那样。

    这时心理是比较崩溃的,不管从哪些方面看,应该都是正常的。其实主要是我对这个芯片的特性不了解,这个芯片的工作电压是通过四周的电容升上去的,表面上看是3v的输入电压,但是实际供电是通过给电容蓄电,并联的电容在供电,这样的一种升压的方案,实际工作电压是远远大于3v的,(只是将电压升高,功率还是有限,如果对功率要求比较高,是不能通过这种方式升压的),使用万用表量了一下,发现除了C155这个电容是3v,C151是0v,其他的电容都是2.5v,这样看来肯定是电容出了问题,再将这个电容换掉(测量是0v的电容),再测试四周的电容的电压是5v,这样就正常了,烧好代码,程序运行,一切正常。
    在此需要注意的特性是转出来TX的电压是负值,还有就是如果遇到了此类问题,首先要从数据的发射源开始调试,比如我的发射源的mcu,我首先是先量mcu的tx到rs232的tx是不是通的,如果是通的,那么我就接着使用万用表测量从mcu出来的的数据对不对,软件上需要注意的点有,mcu串口的数据有没有发出,RS233这个芯片有没有使能,串口的配置对不对,一般的串口配置包括波特率,串口的io口等,我们这里用的波特率是115200,当量出从mcu出来的数据到232这里断了的时候,开始着重研究这部分的电路图,如上发现了电容的问题(陶瓷电容,在焊接的时候迅速升温,可能会损坏)。
    当解决了这个问题,还会有下一个问题在等着我们,但是只要有清晰的头脑,明确的思路,解决困难只是时间问题。所以在遇到了这样的困难,心理不要慌张,慢条斯理的理清思路,比如说在调试的最好,发现发送数据之后,系统直接死机了。
    这个时候,因为我的板子是带有看门狗的,我先将看门狗关闭,使用iar打断点调试,后来发现断点停在了发送数据的函数那里,我就在思考这个是什么原因造成的,因为发送数据的函数,我仔细检查了一遍,发现并没有什么问题,这个时候我将发出去的数据短接了一下(TX和RX短接),发现还是死机。这个时候我将rx断开,重新发数据,又很正常,说明问题出现在接受数据上面。
    这个时候又重新检查接受数据的原理图和电路图,发现一切都很正常,这说明软件是有原因的,这个时候心理在思考是不是rx的中断没有配置好,按照这个思路检查中断的配置,果然发现,因为是改版比较匆忙在初始化的时候讲中断的处理函数没有初始化,改正之后一切就正常了。
    注意:在调试板子的时候,拿到了新的板子,不能直接上电,先使用万用表量电源,电容是不是有短路的情况,今天就没有量,结果板子直接烧坏了,很影响调试的进度,这样不得不花时间排查是哪个器件烧坏了,一方面是浪费时间,另一方面也是无形中增加了成本,还有回带来安全隐患,所以在调试板子的过程中,一定要仔细谨慎才行,遇到问题不可怕,可怕的是没有一颗解决问题的心。畏难的心理最可怕。

    展开全文
  • RS232接口电路

    2018-09-27 16:30:46
    RS232通讯电路原理图,该通讯电路原理图简单描述。通讯电路原理图
  • FPGA 串口通信RS232

    2020-08-20 09:39:14
    本文主要介绍了FPGA串口通信RS232
  • RS232串口实验

    2018-03-16 10:23:50
    RS232串口实验,通过串口助手发送数据到单片机,同时单片机将接收到的数据发送到串口助手
  • RS232封装库

    2017-09-30 16:15:23
    德州仪器官方提供的RS232的全部接口,芯片,完善的PCB。
  • RS232官方手册

    2018-07-06 10:22:32
    包含TI的TIA/EIA-RS232-F 英文及中文手册,Maxim半导体的RS-232英文及中文手册。主要介绍了RS-232的电气特性。
  • I am new in USB communication in Android and I want to communicate my android phone with an rs232 device. Firstly , i have an OTG cable an and USB to RS232 converter (model : Digitus USB to serial ada...
  • RS232驱动程序

    2014-01-25 11:54:00
    RS232驱动程序
  • PLC的资料(免费),你要吗...RS232和RS485是用的很多的串口通讯,来了解一下他们的区别RS232接口管脚定义,一般只用3根线,2--3.3--2.5--5.RS232的信号电压是参考地线来的。高电平1用-5V到-15V表示,低电平0用+5V到+1...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,478
精华内容 2,991
关键字:

rs232