串口接收数据-控制LED灯

目标

通过串口接收数据,对数据分析,控制8个LED灯按照设定时间闪烁。

  1. 8个LED灯可以任意设计,是否闪烁。
  2. 闪烁时间按ms计算,通过串口发送,可设置1~4,294,967,296ms,也就是4字节数据
  3. 协议自拟,有数据报文头和尾

实现

串口接收8字节数据,2字节头+4字节time+1字节LED+1字节尾

数据协议定义:

7 6 5 4 3 2 1 0
0x55 0xA5 time[31:0] ctrl[7:0] 0xF0

分析到一帧完整数据就可是提取并设置LED闪烁样式。

模块划分:

  1. 串口接收
  2. 串口数据分析
  3. LED控制
  4. 顶层连接

硬件

串口GPIO:


LEDGPIO:

软件

c 复制代码
/****************顶层********************/
uart_rx_ctrl_led(
    Clk,
    Reset_n,
    Led,
    uart_rx    
    );
    input Clk;
    input Reset_n;
    output wire[7:0]Led;
    input uart_rx;
    
/****************led控制********************/
    wire [7:0] ctrl;
    wire [31:0] time_set;
    counter_led counter_led(
    .Clk(Clk),
    .Reset_n(Reset_n),
    .Ctrl_data(ctrl),
    .Time(time_set),
    .led(Led)
    );
/****************串口接收********************/  
    wire [7:0]rx_data;
    wire rx_done;
    uart_rx uart_rx_in(
    .Clk(Clk),
    .Reset_n(Reset_n),
    .Baund_set(4),
    .uart_Rx(uart_rx),
    .Data(rx_data),
    .Rx_Done(rx_done)
    );
/****************串口处理********************/
    uart_cmd uart_cmd(
        .Clk(Clk),
        .Reset_n(Reset_n),
        .rx_data(rx_data),
        .rx_done(rx_done),
        .ctrl(ctrl),
        .time_set(time_set)
        );

注意

  1. 数据分析采用------检测缓冲区,不断去检测该缓冲区首尾,是否符合要求。
  2. 在进行时间赋值时,采用 if(tims_ms == time_set)进行清空,不好的地方就是time_ms>time_set时不会进行清空,直到计数溢出重新计到设定值,所以这地方要改成if( time_ms >= time_set )时对time_ms清空。
  3. 对于判断中有数字与变量的判断要养成把数字写在前的习惯,能避免if( time = 10)这种错误,if(10 = time)就会提示编译错误,而第一种会赋值然后条件为真直接运行里面的程序。
相关推荐
上海合宙LuatOS4 小时前
LuatOS核心库API——【i2c】I2C 操作
linux·运维·单片机·嵌入式硬件·物联网·计算机外设·硬件工程
总结所学6 小时前
Typora最新版破解教程
嵌入式硬件
上海合宙LuatOS8 小时前
LuatOS核心库API——【io】 io操作(扩展)
java·服务器·前端·网络·单片机·嵌入式硬件·物联网
sweetone9 小时前
AMYSH折叠电动滑板车轮子倒转故障快修
经验分享·单片机·嵌入式硬件
嵌入式×边缘AI:打怪升级日志9 小时前
解决硬件复位后按键响应变慢的问题 —— 嵌入式容错设计实战
单片机·嵌入式硬件
czhaii12 小时前
定时器三时段输出自动控制器
单片机·嵌入式硬件
FPGA小c鸡13 小时前
异步FIFO设计与验证完全指南:从格雷码到CDC同步的深度解析(附SystemVerilog实战代码)
fpga开发
Neil今天也要学习14 小时前
永磁同步电机控制算法--基于数据驱动的超局部无模型预测电流控制MFPC及改进
单片机·嵌入式硬件·算法
在岸上走的鱼15 小时前
ISE 14.7安装到80%(82%或者83%)卡主
嵌入式硬件·硬件工程
Python小老六16 小时前
STM32(ARM32)烧录方式详解:串口、JTAG、SWD
stm32·单片机·嵌入式硬件