串口发送多bit优化:在测试文件里修改传输长度和传输的数据 send_byte|是单字节串口发送state|控制多bit整体右移8bit来更新传给send_byte串口模块的值top|给state模块发送想传输字节的Data数值和长度length
在windows上面部署C编译环境 最最最 简单的方法! 在windows上面部署C编译环境 最最最 简单的方法!1. 下载vscode2. 在vscode上面的插件中心,下载WSL3. 点左下角4. 连接上之后,打开终端5. 编译成功
用状态机的形式调用串口发送多bit数据 其中的端口以及变量的含义是:端口含义信号发送部分send_byte通过send_byte模块实现,该模块用于将数据通过串行方式发送。数据计数器Data_cnt用于记录发送的数据个数。当计数器达到最大值时,需要清0。数据缓存Data1用于存储待发送的数据。当发送完成后,需要将数据移位发送控制send_go用于控制数据的发送过程。当接收到发送请求时,根据计数器值和发送完成状态决定是否继续发送。发送完成标志tx_done用于记录发送是否完成。数据发送状态data根据发送控制状态决定发送的数据。
用串口来发送信号发生器的数据 梅哥的视频P14集,后半部分讲,能不能通过在大模块中操作一个控制信号send_go,进而影响子模块(就是串口模块,以下称串口模块)种的send_en信号,进而来操控串口发送数据的节奏呢?↓↓↓想要在大模块中操纵send_go信号,那就需要在大模块中给send_go信号赋值。而send_go信号的变化凭借的是:信号发生器希望在哪一个时刻发送数据,这完全取决于信号发生器的设置。当然,由于我还没学到写信号发生器的模块,所以假设不随信号发生器的喜好,随我的喜好。我选择每隔10ms通过串口发送8bit数据。
串口发送数据 大模块涵盖下面的端口 ↓子模块涵盖下面的端口 ↓input [2:0] time_set , //基础计数器的设置这是之前串口发送8bit的模块,这个模块在这次的项目中称作子模块。子模块中有两个输出,5个输入。在之前的项目中,子模块的三个输入↓是在tb文件里面写成了激励信号所以现在的大模块,把要send_en、data写好。又因为需要一个10ms计时器,所以需要再写一个cnt_10ms。总共三个模块要在大模块里写完:send_en、data、cnt_10ms。
串口发送8bit数据 首先,晶振带动时钟,时钟开始以20ns的节奏循环往复地跳动;在时钟的指挥下,rst_n复位信号也开始在一定的时间后拉高。一旦rst_n拉高,cnt、cnt2、send_en、tx_done就要开始分别执行各自的工作了。cnt初始值为0;cnt2初始值也为0,cnt2为零对应的程序是要发送start信号。
隔10ms让led亮8种状态1010_1010 想要让一个led灯每隔10ms就重新按照 1010_1010 流一遍。其中 1 代表高电平,0 代表低电平。右边是低位,左边是高位。也就是先灭,再亮,再灭,再亮…直到亮完最后一位。这个过程包含在10ms内,10ms一到,重新发数据,然后先灭,再亮,再灭,再亮…直到亮完最后一位…一直重复。
让一个灯刚开始以0.1s的频率亮灭;再以0.2s的频率亮灭。亮灭的模式是1001,还是1100,全都由自己指定。 之前项目里面都是有一开始指定的参数决定亮灭之间的间隔,现在把间隔时间作为一个输入端口,来增加自由度,之后调试可以改变灯的亮灭频率。到最后一个marker以2ms为频率传输的一个完整周期已经完成。在两毫秒的频率传输信号的周期里,第三个到第四个marker之间传输的为1 0。第一个marker到第三个marker是完整的一个信号传输周期。从第三个marker到第四个marker之间仍是在 以一毫秒为变化频率 的信号传输周期内。, 测试的时候可以给时间端口赋值,相当于从其他设备传过来的时间。
让灯在相应的时刻,跟随输入的8位2进制数闪烁 我在0.25s,0.5s,0.75s…我想让led在0.25s时刻亮,0.5s时刻亮,0.75s时刻灭,1s时刻亮…仿真的时候,我觉得0.25s对应的12_500_000次太多,仿真跑得慢,因此我改小了 参数的值,变成125,但是因此我仿真之后,cnt 和 cnt2 都跑出了高阻态。我一开始12500_000,没有高阻态,现在我改小了,相当于从0.25s变成了2.5us。我们都知道如果一块板子上的晶振是50M,那么就意味着,系统时钟1s最多可以震动50M次,那么我可以算出0.25s,晶振震动的频率。
让一个灯有参差的亮灭起来 给计数器不同的时间节点,加上执行语句。比如1s的时候led干什么;2s时刻的时候,led又要干什么。这个实验和之前那个相比,现在是在一个灯上变化量灭时间。因为 initial 语句是顺序执行的,那么我下一次的时钟会在200ns之后变化。,指指路,闲聊FPGA,什么都可以,我很无聊,现在日常就是。这样看起来更清楚,也不会出错。,希望有人可以和我说话。
4个灯按照不同频率发光 所以我把output的led,设置为了wire。原本我想的是设置成reg,后来vivado提示。最后我想到了,我把reg类型的led[0],填在了例化过来的led端。这是不对的,应该把顶层的端口和底层的用wire连起来。做的实验是小梅哥的一个实验:使4个LED灯以不同的频率去闪烁。在顶层模块只能连线。也就是不要有赋值的变量,不要在顶层赋值。顶层我实例化了4个相同的模块:一个LED亮的模块。
重定义看这篇 https://blog.csdn.net/feikudai8460/article/details/108401756 c++多重定义:multiple definition of 问题解决_多重定义怎么解决-CSDN博客
vscode编译说没有keys.o:“被.elf文件需要的keys.o文件没有找到” .o文件是从.c文件来的。.c文件叫什么名字,.o文件就叫什么名字。我的左边目录的.c文件叫ledskeys.c,但是Makefile文件里的.c叫”keys.c“,所以是我Makefile.c文件名字写错了。改成”ledskeys.c”就好了。
“program build/STM32F103.elf verify reset exit“ 2:“program build/STM32F103.elf verify reset exit"这是一个命令,跟着task文件来的。是task.json文件里的。写错了elf文件名字的原因。