正点原子uart数据包收发实验例程修改---uart通信verilog实现2

前言:

正点原子uart数据包收发实验例程修改---uart通信verilog实现1中详细介绍了如何修改接收模块,以便于接收到更多的数据信息。但在实际应用中不只有接收信息操作,也有发送信息操作的需求。本文主要介绍如何修改packet_code发送模块中的查询按键状态,使得按下按键能够发送多种信息。

步骤1:对按键进行消抖处理。正点原子的教程中有详细介绍。

步骤2:在packet_code模块中进行修改

        修改1:添加按键按下次数计数器模块。

    reg  [7:0] arm_startr = 8'd0;
    wire [7:0] arm_startw;
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) arm_startr <= 8'd0;
        else if (neg_key_filter)  begin
        //有效的一次按键被按下
        if (arm_startr <8'd4) begin
            arm_startr <= arm_startr + 8'd1;
            end else begin
            arm_startr <= 8'd0;
            end end
            else arm_startr <= arm_startr;
        end
        assign arm_startw = arm_startr;

        修改2:找该always所在处根据自己的需求进行修改,以下为参考。

//打包发送给上位机的数据包
                always @(posedge clk or negedge rst_n) begin
                    if (!rst_n)
                        uart_packet_data <= {32'd0,PACKET_HEAD};
                    else if (parse_done)begin
                        if (packet_len == 8'd3) begin
                            if (parse_result == PARSE_OK) begin          //发送解析正确数据包
                                uart_packet_data[15:8]  <= parse_cmd;
                                uart_packet_data[23:16] <= PACKET_HEAD + parse_cmd; //计算校验和
                            end
                            else begin
                                uart_packet_data[15:8]  <= parse_result; //发送解析错误数据包
                                uart_packet_data[23:16] <= PACKET_HEAD + parse_result;
                            end
                        end
                        else begin
							//-----------------------修改处---------------------
                            uart_packet_data[15:8]  <= parse_cmd;
                            uart_packet_data[23:16] <= 8'h01;           //发送查询结果数据包
                            if (arm_startw == 8'd1)begin
                                uart_packet_data[31:24] <= {4'b0,1'b0,3'd2};//修改处1---数据
                                uart_packet_data[39:32] <= PACKET_HEAD + parse_cmd + 8'h01 + {4'b0,1'b0,3'd2};//修改处1----校验
                                end else if (arm_startw == 8'd2)begin
                                uart_packet_data[31:24] <= {4'b0,1'b0,3'd2};
                                uart_packet_data[39:32] <= PACKET_HEAD + parse_cmd + 8'h01 + {4'b0,1'b0,3'd2};
                                end else if (arm_startw == 8'd3)begin
                                uart_packet_data[31:24] <= {4'b0,1'b0,3'd3};
                                uart_packet_data[39:32] <= PACKET_HEAD + parse_cmd + 8'h01 + {4'b0,1'b0,3'd3};
                            end
                            else begin
                                uart_packet_data[31:24] <= {4'b0,3'b0,1'b1};
                                uart_packet_data[39:32] <= PACKET_HEAD + parse_cmd + 8'h01 + {4'b0,3'b0,1'b1};
                            end
							//-----------------------修改处---------------------
                        end
                    end
                        end

结尾:

其实发送模块不应该只是这么修改的,修改的地方还有很多,但因为我最近比较忙,没能进行相关测试,因此不在这过多的介绍。如果有需要的可以私聊,分享与交流自己的想法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值