串口有9个管脚,其中只有三个是最重要的,分别是
下载 (5.47 KB)2009-12-16 23:26 pin 2: RxD (receive data).接收数据 pin 3: TxD (transmit data).发送数据 pin 5: GND (ground). 地 串行通信时序
我们先来看看字节0x55的发送
下载 (6.28 KB)2009-12-16 23:26 0x55的二进制代码是01010101,但发送时由低字节开始的,因此发送次序依次为1-0-1-0-1-0-1-0. 串行通信电平 ·
"1" is sent using -10V (or between -5V and -15V). ·
"0" is sent using +10V (or between 5V and 15V).
由于计算机RS232的电平与电路板(通常+5V)之间电平的不同所以要用到转换芯片 如果PCB板电源+-5V的话用MAX232 如果PCB板(FPGA)电源是+-3.3V的话用MAX3232 下载 (35.72 KB)2009-12-16 23:26
这个图的串口如果采用母头的话,要用交叉公母线,保证是PCB板上这边的RxD连计算机的TxD(3 Pin),PCB板这边的TxD连计算机的RxD(2 Pin).
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
其中Baud<<BaudGeneratorAccWidth,Baud左移BaudGeneratorAccWidth位,相当于Baud乘以2的BaudGeneratorAccWidth次方。
参照上面的程序与公式推导可以把程序修改如下:
parameter
ClkFrequency = 25000000; // 25MHz
parameter Baud = 115200;
parameter BaudGeneratorAccWidth = 16;
parameter BaudGeneratorInc = (Baud<<BaudGeneratorAccWidth)/ClkFrequency;
reg [BaudGeneratorAccWidth:0] BaudGeneratorAcc;
always @(posedge clk)
BaudGeneratorAcc <= BaudGeneratorAcc[BaudGeneratorAccWidth-1:0] + BaudGeneratorInc;
wire BaudTick = BaudGeneratorAcc[BaudGeneratorAccWidth];
当要注意的是,上面程序中BaudGeneratorInc的计算公式出错,因为在Verilog语言中中间结果只能32位,而这个公式计算的结果超过了32位。所以要把这行改为
parameter
BaudGeneratorInc = ((Baud<<(BaudGeneratorAccWidth-4))+(ClkFrequency>>5))/(ClkFrequency>>4);
程序改变,得到的波特率不变。
一周热门 更多>