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

一、定义串口传输协议帧

控制字的数据大小为一字节,定义帧头为(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)		begindata_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];
endalways@(posedge clk )rx_done_r <= rx_done;//数据包解析,提取指令
always@(posedge clk or negedge reset)
if(!reset)beginen <= 0;ctrl <= 0;
end
else if(rx_done_r)beginif(data_str[0]==8'hFE&&data_str[1]==8'hDF&&data_str[4]==8'hEF)beginen <= 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 beginclk = 1'b1;reset <= 1'b0;rx <= 1'b1;#20;reset <= 1'b1;
#1000_000_00;
$finish;end//模拟发送8次数据,分别为0~7initial begin#200rx_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) begincase(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个时钟周期endendtask //任务以endtask结束

写在最后:波特率9600bps

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

吉他学习:C大调第一把位音阶,四四拍曲目练习 小星星,练习的目的

第十三课 C大调第一把位音阶https://m.lizhiweike.com/lecture2/29364198 第十四课 四四拍曲目练习 小星星https://m.lizhiweike.com/lecture2/29364131 C大调第一把位音阶非常重要,可以多练习&#x

搭建网站的步骤和顺序?搭建一个网站的基本流程是什么?

搭建网站的步骤和顺序&#xff1f;搭建一个网站的基本流程是什么&#xff1f; 一.领取一个免费域名和SSL证书&#xff0c;和CDN 1.打开网站链接&#xff1a;https://www.rainyun.com/z22_ 2.在网站主页上&#xff0c;您会看到一个"登陆/注册"的选项。 3.点击"…

【教程】Kotlin语言学习笔记(一)——认识Kotlin(持续更新)

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【Kotlin语言学习】系列文章 第一章 《认识Kotlin》 文章目录 【Kotlin语言学习】系列文章一、Kotlin介绍二、学习路径 一、…

Stable Diffusion教程——stable diffusion基础原理详解与安装秋叶整合包进行出图测试

前言 在2022年&#xff0c;人工智能创作内容&#xff08;AIGC&#xff09;成为了AI领域的热门话题之一。在ChatGPT问世之前&#xff0c;AI绘画以其独特的创意和便捷的创作工具迅速走红&#xff0c;引起了广泛关注。随着一系列以Stable Diffusion、Midjourney、NovelAI等为代表…

LeetCode、208. 实现 Trie (前缀树)【中等,自定义数据结构】

文章目录 前言LeetCode、208. 实现 Trie (前缀树)【中等&#xff0c;自定义数据结构】题目链接与分类思路 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领…

【c++】构造函数(上)

Hello everybody!今天我们来聊一聊构造函数的用法和一些基本性质。内容比较多&#xff0c;我打算分两篇文章讲完&#xff01; 希望大家在看完我的文章后能够有所收获&#xff01; 1.构造函数的定义 构造函数是特殊的成员函数&#xff0c;需要注意的是&#xff0c;构造函数虽然…

[Python] 文件

这篇是Python基础语法的一个结尾了&#xff0c;还是可莉跟着大家一起学习哦~ 可莉将这篇博客收录在&#xff1a;《Python》 可莉推荐的优质博主主页&#xff1a;Keven ’ s blog 目录 一、文件是什么 二、常用的文件操作函数 1、打开文件 2、关闭文件 3、读取文件 read( ) …

蓝桥杯嵌入式第11届真题(完成) STM32G431

蓝桥杯嵌入式第11届真题(完成) STM32G431 题目 代码 程序和之前的大同小异&#xff0c;不过多解释 main.c /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief :…

复旦大学最新研究:如何让大模型敢回答“我不知道”?

引言&#xff1a;AI助手的真实性挑战 在人工智能&#xff08;AI&#xff09;的发展进程中&#xff0c;基于大型语言模型&#xff08;LLMs&#xff09;的AI助手已经在多个任务中展现出惊人的性能&#xff0c;例如对话、解决数学问题、编写代码以及使用工具。这些模型拥有丰富的…

【windows】win10/win11 更改window文件夹下的中文用户名 C:\Users\用户名\

win10/win11 家庭版中文用户名改英文用户名方法(包括User下的用户文件夹) 问题描述&#xff1a;在最开始新电脑设置用户名称的时候&#xff0c;为了方便&#xff0c;就把用户名设置成自己的中文名字了。但是在后面越来越多的情况下发现并不好用。因为很多文件是存在C:\Users\名…

LeetCode、338. 比特位计数【简单,位运算】

文章目录 前言LeetCode、338. 比特位计数【中等&#xff0c;位运算】题目链接与分类思路位运算移位处理前缀思想实现 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java…

浅析Linux追踪技术之ftrace:Event Tracing

文章目录 概述使用Event Tracing使用set_event接口使用enable接口 Event配置Event formatEvent Filtering过滤规则设置过滤器 Event TriggerTrigger语法 Trace marker相关参考 概述 Event Tracing&#xff08;事件追踪&#xff09;利用在内核代码中加入的各种Tracepoint&#…