基于Robei EDA--实现串口数据包接收

news2025/1/20 11:00:37

一、定义串口传输协议帧

控制字的数据大小为一字节,定义帧头为(0xFE 0xDF)帧尾为(0xEF)

模块框图

内模块:串口接收,output:8位data

串口命令:对单字节数据接收进行缓存,5字节数据判断数据帧是否有效,提取正确的控制字

根据控制字解析,控制8位led的亮灭

二、串口命令转换模块设计(uart_cmd)
 

reg[7:0] data_str [4:0];//5个位宽为8的元素
//reg [7:0] count [3:0] 4个位宽为8元素的一维数组
reg rx_done_r;
//移位数据缓存
always@(posedge clk)
if(rx_done)		begin
		data_str[4] <= rx_data;
		data_str[3] <= data_str[4];  
		data_str[2] <= data_str[3];
		data_str[1] <= data_str[2];
		data_str[0] <= data_str[1];
end


always@(posedge clk )
  rx_done_r <= rx_done;

//数据包解析,提取指令
always@(posedge clk or negedge reset)
if(!reset)begin
  en <= 0;
  ctrl <= 0;
end
else if(rx_done_r)begin
  if(data_str[0]==8'hFE&&data_str[1]==8'hDF&&data_str[4]==8'hEF)begin
		en <= data_str[2];
		ctrl <= data_str[3];
end
end
//仿真文件
initial clk = 1;
always#10 clk = ~clk;
initial begin
reset = 0;
rx_data = 8'h0;
rx_done = 0;
#21;
reset = 1;
rx_done = 1;
#20;
rx_done = 0;
rx_data = 8'hFE;
#5208
rx_done = 1;
#20;
rx_done = 0;

rx_data = 8'hDF;
#5208
rx_done = 1;
#20;
rx_done = 0;

rx_data = 8'h01;
#5208
rx_done = 1;
#20;
rx_done = 0;

rx_data = 8'haa;
#5208
rx_done = 1;
#20;
rx_done = 0;

rx_data = 8'hef;
#5208
rx_done = 1;
#20;
rx_done = 0;

#5208
$finish;
end

三、串口指令控制led

initial clk = 1;
always#10 clk =~clk;
initial begin
reset = 0;
en = 8'h00;
ctrl = 8'h00;
#21;
reset = 1;
#120;
en = 8'h01;
#200
ctrl = 8'hff;
#200
$finish;
end

四、串口接收(uart_rx)

五、顶层模块

 //初始化系统时钟、全局复位和输入信号
 initial begin
 clk = 1'b1;
 reset <= 1'b0;
 rx <= 1'b1;
 #20;
 reset <= 1'b1;
#1000_000_00;
$finish;
 end
 
 //模拟发送8次数据,分别为0~7
 initial begin
 #200
 rx_bit(8'hfe); //任务的调用,任务名+括号中要传递进任务的参数
 rx_bit(8'hdf);
 rx_bit(8'h1);
 rx_bit(8'hff);
 rx_bit(8'hef);
 end
 
 //clk:每10ns电平翻转一次,产生一个50MHz的时钟信号
 always #10 clk = ~clk;
 
 //定义一个名为rx_bit的任务,每次发送的数据有10位
 //data的值分别为0~7由j的值传递进来
 //任务以task开头,后面紧跟着的是任务名,调用时使用
 task rx_bit(
 //传递到任务中的参数,调用任务的时候从外部传进来一个8位的值
 input [7:0] data
 );
 integer i; //定义一个常量
 //用for循环产生一帧数据,for括号中最后执行的内容只能写i=i+1
 //不可以写成C语言i=i++的形式
 for(i=0; i<10; i=i+1) begin
 case(i)
 0: rx <= 1'b0;
 1: rx <= data[0];
 2: rx <= data[1];
 3: rx <= data[2];
 4: rx <= data[3];
 5: rx <= data[4];
 6: rx <= data[5];
 7: rx <= data[6];
 8: rx <= data[7];
 9: rx <= 1'b1;
 endcase
 #(5208*20); //每发送1位数据延时5208个时钟周期
 end
 endtask //任务以endtask结束

写在最后:波特率9600bps

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1455211.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

问界M7卖爆了,只因这三点做得好!

文 | AUTO芯球 作者 | 雷歌 理想真是懵了个大圈&#xff01; 2月第一周的新能源汽车销量榜单已经出来&#xff1a;理想7200台的销量&#xff0c;被华为问界9000辆的销量远远甩在身后。 要知道&#xff0c;1月第四周&#xff0c;理想还以8500辆领先问界的8300辆。 更绝的是&…

算法学习——LeetCode力扣二叉树篇4

算法学习——LeetCode力扣二叉树篇4 222. 完全二叉树的节点个数 222. 完全二叉树的节点个数 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xf…

深入浅出熟悉OpenAI最新大作Sora文生视频大模型

蠢蠢欲动&#xff0c;惴惴不安&#xff0c;朋友们我又来了&#xff0c;这个春节真的过的是像过山车&#xff0c;Gemini1.5 PRO还没过劲&#xff0c;OpenAI又放大招&#xff0c;人类真的要认输了吗&#xff0c;让我忍不住想要再探究竟&#xff0c;到底是什么让文生视频发生了质的…

C语言—字符数组(3)

可能不是那么的完整&#xff0c;先凑合看吧&#xff0c;如果我学会如何修改以后&#xff0c;我慢慢回来修改的 1.编写程序实现对两个字符串的连接功能&#xff1b; 法一:不使用strcat函数,写程序直接实现&#xff0c;记得添加结束符&#xff0c;不然程序访问数组时候将变得不…

算法基础——单调栈,单调队列

目录 1.单调栈 例题&#xff1a;【模板】单调栈 例题:求和 2.单调队列 例题&#xff1a;滑动窗口 1.单调栈 例题&#xff1a;【模板】单调栈 可以想象出一个柱状图&#xff0c;值越大&#xff0c;这个柱子越高 以此题的样例为例&#xff1a; 第一个数为7&#xff0c;想…

.ma1x0勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

尊敬的读者&#xff1a; 数据安全问题备受关注。而勒索病毒是其中一种最为恶劣的威胁之一。其中&#xff0c;.ma1x0勒索病毒备受人们担忧&#xff0c;因其可将用户的数据文件加密&#xff0c;并要求支付赎金以解密文件。本文将介绍.ma1x0勒索病毒的特征、预防方法以及如何恢复…

GIS分析和摄影测量进行屋顶太阳能潜力评估

目前,不可再生的能源资源有限,而减少全球变暖的想法使可再生能源的利用成为当务之急。其中,太阳能作为最清洁、最丰富的可再生能源备受关注。此外,成本的日益降低也使太阳能成为一种极具吸引力的能源。然而,为了从太阳能中获得最大利益,必须考虑各种标准,并选择合适的区…

SG3225EAN规格书

SG3225EAN 晶体振荡器利用先进的锁相环技术和AT切割晶体单元&#xff0c;提供了宽频率范围和高性能LV-PECL输出&#xff0c;73.5 MHz至700 MHz的宽频率范围&#xff0c;能够保证高稳定性和宽频率调整的能力&#xff0c;适应于多样化的应用需求。2.5V和3.3V两种供电电压&#xf…

Spring 用法学习总结(四)之 JdbcTemplate 连接数据库

&#x1f409;目录 9 JdbcTemplate 9 JdbcTemplate Spring 框架对 JDBC 进行了封装&#xff0c;使用 JdbcTemplate 方便实现对数据库操作 相关包&#xff1a; 百度网盘链接https://pan.baidu.com/s/1Gw1l6VKc-p4gdqDyD626cg?pwd6666 创建properties配置文件 &#x1f4a5;注意…

Stackoverflow(1)-根据RequestBody的内容来区分使用哪个资源

如果使用Spring&#xff0c;可以通过RequestBody将请求体的json转换为Java对象&#xff0c;但如果URI相同&#xff0c;而请求体的内容不同&#xff0c;应该怎么办&#xff1f;问题来源(stackoverflow)&#xff1a;Spring RequestBody without using a pojo?稍微研究了一下&…

vue-router 实现路由懒加载

在现代的Web开发中&#xff0c;前端技术的发展日新月异。在构建大规模单页应用&#xff08;Single Page Application&#xff09;时&#xff0c;路由管理是一个非常重要的环节。随着用户对网页速度和性能的要求越来越高&#xff0c;有效的路由管理能够显著提升用户体验。本篇博…

torch.utils.data

整体架构 平时使用 pytorch 加载数据时大概是这样的&#xff1a; import numpy as np from torch.utils.data import Dataset, DataLoaderclass ExampleDataset(Dataset):def __init__(self):self.data [1, 2, 3, 4, 5]def __getitem__(self, idx):return self.data[idx]def…

GitKraken Create Repository and Clone不可点击

问题 GitKraken Create Repository and Clone不可点击 详细问题 笔者第一次使用GitKraken&#xff0c;在创建仓库时&#xff0c;填写完成仓库初始化后。发现Create Repository and Clone不可点击。 解决方案 选择Where to clone to位置 产生原因 在创建仓库时&#xff0…

IO 作业 24/2/18

1> 使用fgets统计给定文件的行数 #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, const char *argv[]) {//定义文件指针FILE *fpNULL;//打开文件&#xff08;只读&#xff09;if((fpfopen("./test.txt",&quo…

机器人内部传感器-位置传感器-电位器式位置传感器

位置传感器 位置感觉是机器人最基本的感觉要求&#xff0c;可以通过多种传感器来实现。位置传感器包括位置和角度检测传感器。常用的机器人位置传感器有电位器式、光电式、电感式、电容式、霍尔元件式、磁栅式及机械式位置传感器等。机器人各关节和连杆的运动定位精度要求、重…

suse15 sp3-sp5离线安装中安装FIO

没有网络的情况下&#xff0c;离线安装相对比较困难一点&#xff0c;所有需要提前下载相应的RPM安装包 FIO 安装包链接如下&#xff1a; Install package benchmark / fio 正常安装的时候&#xff0c;会出现问题 如下&#xff1a; google下 https://opensuse.pkgs.org/15.5/…

WorkPlus Meet助力企业建立安全可靠的私有化视频会议平台

企业需要保护敏感信息和保证会议质量的同时&#xff0c;提高会议的效率和协作水平。作为一款私有化视频会议软件系统&#xff0c;WorkPlus Meet以其卓越的性能和高度私密的特性&#xff0c;助力企业打造安全可靠的私有化视频会议平台。 为何选择WorkPlus Meet作为私有化视频会议…

软件实例分享,酒店酒水寄存管理系统软件教程

软件实例分享&#xff0c;酒店酒水寄存管理系统软件教程 一、前言 以下软件教程以 佳易王酒水寄存管理系统软件V16.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、寄存的商品名称可以预先设置 2、寄存人可以使用手.机号识别 3、会员充值…

flowpilot Pxiel 6 redmi K30 Pro

Installation flowdriveai/flowpilot Wiki GitHub Flowpilot can be installed on: Android phone Non-rooted running Android 10Android 11Android 12Rooted running Android 13 requires rootDesktop pc with Ubuntu > 20.04. 安装Termux https://f-droid.org/repo…

Sentinel从入门到“精通”,从源码层面学习Sentinel

B站视频讲解 文章目录 一、安装1、原生使用2、dashboard整合2-1、非starter整合2-1-1、公共2-1-2、Filter2-1-3、AOP2-2、starter 整合 3、总结 二、常见的策略1、限流1-1、基于QPS 限流1-2、基于线程数限流 2、降级2-1、慢调用比例2-2、异常数&#xff08;限流异常不算&#x…