OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3613|回复: 3

STM32和FPGA进行通信,总是不能成功,已无力更改,求大神帮忙!!

[复制链接]

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2013-4-20
在线时间
0 小时
发表于 2013-7-18 15:09:16 | 显示全部楼层 |阅读模式
单片机部分:
#include "spi.h"
#include "sys.h"
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    /*SPI1 pins: SS,SCK and MOSI ---------------------------------*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_6;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}



uint8_t SPI_Read_Write(uint8_t data) 
{
    uint8_t i=0,receive=0,temp;
   // SS_L(); //ss low  
    for(i=0;i<8;i++)   
    {
      receive<<=1;
      temp=data&0x80;
      if(temp==0x80)
      {
        GPIO_SetBits(GPIOA,GPIO_Pin_6);
      }
      else
      {
        GPIO_ResetBits(GPIOA,GPIO_Pin_6);
      }         
        GPIO_SetBits(GPIOA,GPIO_Pin_4);          //SCK
                GPIO_SetBits(GPIOA,GPIO_Pin_4);
                GPIO_SetBits(GPIOA,GPIO_Pin_4);
        GPIO_ResetBits(GPIOA,GPIO_Pin_4);
                GPIO_ResetBits(GPIOA,GPIO_Pin_4);
                GPIO_ResetBits(GPIOA,GPIO_Pin_4);
        if(MISO==1)   //MISO
        {
                  receive|=0x01;
        }
        else
        {
                  receive&=~0x01;
        }           
      data=data<<1;
    }
    return receive;
}

void SPI_Write_Byte(uint8_t data)
{
        SPI_Read_Write(data);
}

uint8_t SPI_Read_Byte(void)
{  
        return SPI_Read_Write(0x00);
}

void SPI_Write_4Byte(uint32_t data)
{
    uint8_t data0,data1,data2,data3;
    data0=(uint8_t)data;
    data1=(uint8_t)(data>>8);
    data2=(uint8_t)(data>>16);
    data3=(uint8_t)(data>>24);
    GPIO_ResetBits(GPIOA,GPIO_Pin_3);         //SS
    SPI_Read_Write(data3);
    SPI_Read_Write(data2);
    SPI_Read_Write(data1);
    SPI_Read_Write(data0);
    GPIO_SetBits(GPIOA,GPIO_Pin_3);     
}


主函数就是一句话:SPI_Write_4Byte(6);

FPGA部分:
module spi_comm(sck,mosi,miso,ss,data_out,data_in,rst_n);
input sck,mosi,ss,rst_n;
input [31:0] data_in;
output miso;
output[31:0] data_out;
reg miso;
reg[4:0] bit_count;
reg[31:0] data_out,rxd;

always@(posedge sck)   
        begin
        if(ss==0)
                miso=data_in[31-bit_count];
        end

always@(negedge sck or posedge ss)
begin
        if(ss)
                bit_count=0;
        else
                begin
                rxd=rxd<<1;
                rxd[0]=mosi;
                if(bit_count==31)
                        data_out=rxd;
                else  data_out=32'h00000000;
                bit_count=bit_count+1;
                end
        end
endmodule


目的是当FPGA接收到6的时候数码管显示数字,但是不成功,求大神指教!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-18 17:10:11 | 显示全部楼层
FPGA是不怎么熟了,这种问题,先看问题出在哪方.愣是没看到你STM32的SPI初始化代码,你检查下初始化代码吧.另外我们有SPI例程,你可以参考下.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2013-4-20
在线时间
0 小时
 楼主| 发表于 2013-7-19 10:16:48 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
这个是模拟SPI通信,不是真的实现SPI时序的,昨天改了一些地方,已经调好了!!
回复 支持 反对

使用道具 举报

5

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
金钱
329
注册时间
2015-9-11
在线时间
46 小时
发表于 2016-7-19 16:41:16 | 显示全部楼层
楼主还在不,你这个通信的代码能否发给我参考,最近电子设计大赛要用到FPGA和STM32通信的东西.
迫于生计
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 02:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表