FPGA——边沿检测,捕捉STM32信号实现SPI通信

1、SPI简介

一种高速、全双工的串行,即发送数据的时候同时也可以接收数据,传输时高位在前,低位在后;

同步的,即主机发送SCK时钟信号给从机,共用时钟,主从机收发数据也是按照此时钟。每个SCK周期内,主从机都会发送并接收1 bit;

 

一般是4根线:

SCK即主机发送的时钟信号;

MOSI即主机的输出口;

MISO即主机的输入口;

CS即主机选择哪个从机对接通讯,一般低电平,表示被主机选中;

采用主从模式,即主机控制着SCK和CS;

 

传输方式有四种,由时钟极性(CPOL)和时钟相位(CPHA)决定,两者控制着主从机何时交换数据以及何时对接收数据进行采样,最常用的是两种:

工作模式0:CPOL=0且CPHA=0,即SCK=0是空闲的,数据在SCK的上升沿被采样,数据在SCK的下降沿被改变;

工作模式3:CPOL=1且CPHA=1,即SCK=1是空闲的,数据在SCK的上升沿被采样,数据在SCK的下降沿被改变;

 

 2、STM32发送的SCK信号

发送的信号如下所示

此处没有放大,每个竖条其实是如下所示

3、边沿检测

 

实现FPGA对SCK信号的捕捉,经典的边沿检测代码,网上一搜一大把,借用一下正点原子的学习代码做个试验。

module touch_led (input sys_clk,input sys_rst_n,input touch_key,output reg led);

reg touch_key_d0;
reg touch_key_d1;

wire touch_en;

assign touch_en = (~touch_key_d1) & touch_key_d0;

always @ (posedge sys_clk or negedge sys_rst_n) begin
    if(sys_rst_n == 1'b0) begin
        touch_key_d0 <= 1'b0;
        touch_key_d1 <= 1'b0;       
    end
    else begin
        touch_key_d0 <= touch_key;
        touch_key_d1 <= touch_key_d0;
    end
    
end//对触摸按键端口接收的数据延迟两个周期

//根据上升沿使能信号切换led状态
always @ (posedge sys_clk or negedge sys_rst_n) begin
    if (sys_rst_n == 1'b0)
        led <= 1'b1;
    else if (touch_en)
        led <= ~led;
    end
 
endmodule

 

捕捉到上升沿后,fpga在测试时对应发出低电平

 

4、双机通讯

工作模式0的时候,观察时序图如下

SCK是主机发送给从机的,CS也是由主机控制的

数据在上升沿时被采样,下降沿时被切换

 MOSI 和 MISO 数据在 SCK 的奇数边沿保持不变,数据在 SCK 奇数边沿时被采样,在非采样时刻, MOSI 和 MISO 的信号才发生切换。

主机的MOSI的有效数据是在第一个上升沿之前就已经输出

主机的MISO的有效数据是在第一个上升沿时,从机发送过来的有效数据

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FPGA(现场可编程门阵列)和STM32是两种不同的芯片。FPGA是一种可编程逻辑器件,它可以按照用户需求重新配置其逻辑电路,适用于复杂的数字电路设计。而STM32是一种微控制器,它包含了一个处理器核心以及丰富的外设,适用于嵌入式系统设计。 SPI(串行外设接口)是一种常用的串行通信协议,可以用于连接多个设备,实现设备之间的数据传输。FPGASTM32都支持SPI通信,可以通过相应的硬件接口和软件配置实现。 在使用FPGA实现SPI通信时,我们可以通过编写Verilog或VHDL代码来定义FPGA中的SPI接口,配置FPGA的引脚和时钟,并实现发送和接收数据的逻辑。FPGA可以使用其可编程逻辑电路来处理SPI通信协议的各个部分,例如时序、数据格式和校验等。通过适当的配置和连接,我们可以将FPGA与其他SPI设备(如传感器、存储器或其他嵌入式设备)进行通信。 而在STM32实现SPI通信,我们可以使用STM32的内置SPI外设来实现。首先,我们需要配置SPI外设的相关寄存器,包括时钟速率、数据格式和模式等。然后,使用STM32的GPIO外设来配置相关引脚,使其与SPI外设连接。最后,通过编写适当的软件代码,实现SPI数据的发送和接收。这些代码可以使用STM32的相关库函数或直接操作寄存器来实现。通过配置和连接,我们可以将STM32与其他SPI设备进行通信实现数据的传输和交互。 无论是通过FPGA还是STM32实现SPI通信,我们都需要仔细了解SPI协议的要求和特性,充分利用相应的硬件资源和软件工具,以确保通信的准确性和可靠性。同时,还要根据具体的应用需求和系统设计,选择合适的芯片和外设,进行相应的配置和编程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值