FPGA|CPLD|ASIC论坛
直播中

李云

5年用户 26经验值
擅长:可编程逻辑 测量仪表
私信 关注
[问答]

用uart串口发送16位数据总是不对,调了一天了,不知道问题在哪。

设置的16位数据是01000010 01000010,2个8位的10进制都是66,对应ascii是B,用串口调试工具显示接受了2个字符,但是只显示一个B
然后又用labwindows试验,收到的数据显示是66和-2,实在不知道哪里有问题
我把16位数据一起发送了,是按照uart协议发的,大佬们能看下吗


always@(posedge clk or negedge rst)
begin
  if(!rst)
     begin
             num<=0;
                  tx_r<=1'b1;
          end
  else if(tx_en) begin
          if(clk_bps) begin
                            num<=num+1;
                                 case(num)
                                    4'd0:tx_r<=1'b0;
                                         4'd1:tx_r<=tx_data[0];
                                         4'd2:tx_r<=tx_data[1];
                                         4'd3:tx_r<=tx_data[2];
                                         4'd4:tx_r<=tx_data[3];
                                         4'd5:tx_r<=tx_data[4];
                                         4'd6:tx_r<=tx_data[5];
                                         4'd7:tx_r<=tx_data[6];
                                         4'd8:tx_r<=tx_data[7];
                                         4'd9:tx_r<=1'b1;
                                         4'd14:tx_r<=1'b0;
                                         4'd15:tx_r<=tx_data[8];
                                         4'd16:tx_r<=tx_data[9];
                                         4'd17:tx_r<=tx_data[10];
                                         4'd18:tx_r<=tx_data[11];
                                         4'd19:tx_r<=tx_data[12];
                                         4'd20:tx_r<=tx_data[13];
                                         4'd21:tx_r<=tx_data[14];
                                         4'd22:tx_r<=tx_data[15];
                                         4'd23:tx_r<=1'b1;
                                         default:tx_r<=1'b1;
                                 endcase
                        end
        else if(num==24)
            num<=0;
        end
end

回帖(5)

钱峰

2019-6-14 17:10:28

最佳答案

4bit位宽最大能表示的数是15
1 举报
  • 李云: 厉害了,我这确实太傻了

庞贤明

2019-6-14 17:58:37
uart的协议数据位不是8位吗?
举报

钱峰

2019-6-14 23:21:37
4'd16到4‘d23这种表达方式是错的。4表示位宽,4bit数最大是15
举报

li电子

2019-6-15 09:52:04
接收方要设置好接收的速度,格式,校验位
举报

李晋凯

2019-6-15 20:35:20
串口调试的uart读取返回数据默认应该只读八位吧,发过去16个实际读的只有8个吧,你可以写两个串口让两块板子通信一下试试
举报

更多回帖

发帖
×
20
完善资料,
赚取积分