当前位置:首页 > 新闻资讯 > FPGA之家动态 >

自学FPGA——UART串口控制LED灯

时间:2024-08-07      来源:网络搜集 关于我们 0

串口接收参数:

波特率:115200(可选)

1位起始位

8位数据位

1位停止位

无校验位

采样方式:取每一位的中间6个点的值,超过4个正确则采样否则不采样。

实现功能通过上位机串口助手发送多个数据到开发板(ACX720),开发板检测是否有效,有效则取中间数据位控制LED灯,无效则不理会。

参考小梅哥FPGA。

数据帧定义

控制方式:

有效字节中前面32位作为LED亮灭时间,后面8位作为LED的亮灭方式

例如:

检测到有效帧:55 A5 02 FA F0 80 AA F0

LED亮灭时间:02 FA F0 80 =>十进制:50M

LED亮灭方式:AA=>二进制:1010 1010

表现出来的结果:LED亮1s灭1s循环4次(开发板时钟50MHz)

一般是根据你想控制的方式来计数出数据字节然后再发送。

改进:

1.加入一个结果显示控制开关SW0,功能:打开SW0后LED才会被控制。关闭SW0LED无反应。

2.加入一个接收到有效数据的提示信号LED1,功能:在SW0关闭时,接收到有效数据后LED1亮,提示接收到了有效数据,当SW0打开后,LED1灭,实现类似于新消息提示的功能。

部分代码展示:

testbench仿真验证:

板级验证:

关闭
观看更多
更多
退出全屏

视频加载失败,请刷新页面再试

刷新

仍未解决的小问题:

SW0关闭时,LED虽然不会继续被控制,但是会保持上一个状态不变

SW0关闭时,在接收到有些亮灭控制信号时例如FF,LED会立即亮,但不受数据控制.

思考原因应该是LED的初始化状态没有想全面.

总结:

做这个实验遇到的问题:

1.位计数器在时间计数器达到最大值的两个时钟都会计数,造成位计数器中奇数个数都只有一个时钟周期。解决方法:时间计数器延时1ns赋值,避开第一个时钟上升沿。

2.不加使能信号的情况下,时间计数器会在上电后立即开始计数,导致接收到有效数据后,计数器早已经超过了原有所设定的最大值,导致永远不会清零。解决方法:计数器清零条件由”等于设定的最大值“改为“大于等于最大值”。

3.语法错误、多加漏加”:;,“,信号名字写错,等一系列小卡拉米错误。解决方法:给自己吃个大嘴霸子。

最后想说,这个实验从开始学习到实现最终功能总共用时2天,其中debug的时间占了1天半,学的不是FPGA,学的是debug ,一直盯着电脑屏幕颈椎快断了T.T


注明:本内容来源网络,不用于商业使用,禁止转载,如有侵权,请来信到邮箱:429562386ⓐqq.com 或联系本站客服处理,感谢配合!

用户登陆

    未注册用户登录后会自动为您创建账号

提交留言