视觉℡[url=http://www.ickey.cc/user-group-ts-topic-userid-18685.html][color=#E53333][size=32px][b]☞ [/b][/size][/color][color=#E53333][size=32px][/size][/color][color=#E53333][size=32px][b]更多资料点击我 [/b][/size][/color][color=#E53333][size=32px][b]☜[/b][/size][/color][/url] [url=http://www.ztdzxh.kuphp.net/]电子协会论坛-www.dzxh.tk[/url]
获得 30 次赞
帮助过83人
1.STM32 使用哪一种USB通讯方式比较好?2.USB HID CDC 有什么区别?3.libusb在win7 win8 win10 没有数字签名,怎么解决
先上代码:module flash( output flash_dataout//flash数据输出 output led0 output led1 output wire [7:0] DB8 input flash_clk//flash时钟 input flash_cs input flash_datain ); reg [7:0] clk_num;//时钟计数 reg [7:0] reg_cmd;//命令寄存器 reg red_id= 1'b0;//读取命令标志位 reg data_out= 1'b1; reg led0_n = 1'b1; reg led1_n = 1'b1; parameter ID_data=64'h0102030405060708; assign flash_dataout = red_id ? data_out : flash_datain ; assign led0 = led0_n ? 1'b1 : 1'b0; assign led1 = led1_n ? 1'b1 : 1'b0; assign DB8 = clk_num; //cs上升沿需要初始化所有数据 标志着新的一条命令到来 //clk上升沿 读取数据 always @(posedge flash_cs or posedge flash_clk) //clk上升沿沿触发 begin if( flash_cs ) begin //cs 低电平状态 不知道为什么会进这个if语句内 clk_num <= 8'h00; //清除时钟计数 reg_cmd <= 8'h00; //清空命令寄存器 red_id <= 1'b0; //读取ID命令标志位 end else begin if(clk_num < 8) begin//前8个时钟是 命令 reg_cmd[7-clk_num] = flash_datain ;//循环将8位命令拼接 end else if(clk_num == 8) begin//接收完前8位命令 开始判断 led1_n <= ~led1_n; if(reg_cmd == 8'h4b) begin //判断是不是读取芯片ID red_id <= 1'b1; //读取ID命令标志位 end end clk_num <= clk_num + 8'h01;//时钟的下降沿计数 用来查询是否命令结束 led0_n <= ~led0_n; end end 程序的目的:为了模拟25Q64存储器部分功能,STM32向FPGA读取一个ID号,(时序与真实的25Q64一样)逻辑分析仪采集到的数据:0 -> flash_cs (stm32输出的片选) 1 -> flash_clk (stm32输出的时钟) 2 -> flash_datain(stm32输出的数据输出) 3->flash_dataout (FPGA输出的数据输出) 4-8 接的是 DB8的低4位 为了观察 clk_num 的数据问题:每到 flash_datain 高电平的时候 clk_num就清空了 (也就是进入 if( flash_cs ) begin 这里面了),已经修改过引脚测试了,不是电路的问题,软件的问题,
想使用FPGA代替25Q64存储器部分功能,只使用ID读取这一部分,以下是他的时序图 ,通过STM32向FPGA读取这个ID使用仿真,一切正常,读取的命令 数据都正常 时序也正常,但是使用STM32读取就不行了,(确认过程序可以读取真实的25q64存储器ID)刚上个星期接触FPGA,写的程序不咋样,但是编译可以通过,希望大神可以赐教 module flash( output flash_dataout//flash数据输出 output led0 output led1 input flash_clk//flash时钟 input flash_cs input flash_datain ); //reg cs_bit;//CS低电平标志位 也就是数据读写标志位 reg [7:0] clk_num;//时钟计数 reg [7:0] reg_cmd;//命令寄存器 reg red_id= 1'b0;//读取命令标志位 reg data_out= 1'b1; reg led0_n = 1'b1; reg led1_n = 1'b1; parameter ID_data=64'h0102030405060708; assign flash_dataout = red_id ? data_out : flash_datain ; assign led0 = led0_n ? 1'b1 : 1'b0; assign led1 = led1_n ? 1'b1 : 1'b0; //cs上升沿需要初始化所有数据 标志着新的一条命令到来 //clk上升沿 读取数据 always @(posedge flash_cs or posedge flash_clk) //clk上升沿沿触发 begin if( flash_cs == 1'b1 ) begin //cs 高电平状态 clk_num <= 1'b0; //清除时钟计数 reg_cmd <= 8'h00; //清空命令寄存器 red_id <= 1'b0; //读取ID命令标志位 end else begin if(clk_num < 8) begin//前8个时钟是 命令 reg_cmd = reg_cmd |(flash_datain << (7-clk_num));//循环将8位命令拼接 //DB8 <= reg_cmd; end if(clk_num == 8) begin//接收完前8位命令 开始判断 led0_n <= ~led0_n; if(reg_cmd == 8'h4b) begin //判断是不是读取芯片ID led1_n <= ~led1_n;// red_id <= 1'b1; //读取ID命令标志位 end end clk_num <= clk_num + 1'b1;//时钟的下降沿计数 用来查询是否命令结束 end end always @( negedge flash_clk) //clk下降沿触发 begin if( red_id == 1'b1 ) begin//如果读取的是ID if( clk_num > 40 ) begin //后面的全部是数据 //DB9 <= clk_num; data_out <= ID_data[(104-clk_num)];//循环输出64位ID号 end end end endmodule
FPGA 做SPI从机,不使用晶振能否工作例如:单片机做主机,FPGA 做从机单片机向FPGA发送一个字节的数据,FPGA返回一个字节的数据(发什么 返回什么)如果不使用晶振,这样的功能能否实现。
利用STM32做虚拟串口,问题:1.电脑上设置串口的波特率会不会影响USB串口传输的速率。2.如何使用STM32实现 CH340 PL2303类似的功能,串口输出的波特率可以在电脑上设置,停止位,数据位,校验位等 都可以设置。3.CH340 PL2303设置的波特率 停止位 数据位 校验位等信息,是否通过USB传送到CH340 PL2303芯片内?