STM32F7 SPI DMA接收 收不到数据

2019-07-20 07:49发布

各位大神最近在用STM32F7调试SPI,STM32F7作为从机接收,想把接收到的数据DMA到SDRAM里,但是用DMA的时候一直接收不到数据,DMA中断也进不去,但是用 HAL_SPI_Receive(&SPI2_Handler,(vu8*)(Bank5_SDRAM_ADDR + j),1024,1000);这个函数就能接收到数据,不知怎么回事,查了好多资料都没能解决,求帮助。。。[mw_shl_code=applescript,true]#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "spi.h"
#include "sdram.h"
#include "dma.h"

u8 Buffer[1000];
u8 testsram[250000] __attribute__((at(0XC0000000)));//测试用数组

//SDRAM内存测试            
void fsmc_sdram_test(u16 x,u16 y)
{  
        u32 i=0;            
        u32 temp=0;          
        u32 sval=0;        //在地址0读到的数据                                            
//          LCD_ShowString(x,y,180,y+16,16,"Ex Memory Test:    0KB ");
        //每隔16K字节,写入一个数据,总共写入2048个数据,刚好是32M字节
        for(i=0;i<32*1024*1024;i+=2)
        {
                *(vu16*)(Bank5_SDRAM_ADDR+i)=0x55aa;
                temp++;
        }
        //依次读出之前写入的数据,进行校验                  
//         for(i=0;i<32*1024*1024;i+=16*1024)
//        {       
//                  temp=*(vu32*)(Bank5_SDRAM_ADDR+i);
//                if(i==0)sval=temp;
//                 else if(temp<=sval)break;//后面读出的数据一定要比第一次读到的数据大.                             
//                LCD_ShowxNum(x+15*8,y,(u16)(temp-sval+1)*16,5,16,0);        //显示内存容量  
//                printf("SDRAM Capacity:%dKB ",(u16)(temp-sval+1)*16);//打印SDRAM容量
//         }                                         
}       

int main(void)
{
        u8 key;                 

        u32 i=0,j=0;             
        u32 ts=0;
    Cache_Enable();                 //打开L1-Cache
    HAL_Init();                                        //初始化HAL库
    Stm32_Clock_Init(432,25,2,9);   //设置时钟,216Mhz
    delay_init(216);                //延时初始化
        uart_init(115200);                        //串口初始化
    LED_Init();                     //初始化LED
    KEY_Init();                     //初始化按键
    SDRAM_Init();                   //初始化SDRAM
          SPI2_Init();
        MYDMA_Config(DMA1_Stream3,DMA_CHANNEL_0);

//    for(ts=0;ts<250000;ts++)
//        {
//                testsram[ts]=ts;//预存测试数据         
//          }
       
        for(i=0;i<32*1024*1024;i+=1)
        {
                *(vu8*)(Bank5_SDRAM_ADDR+i)=0;

        }
    while(1)
    {
//                        SPI_WR_BUSY(SPI2);
//       while((SPI2->SR & 1<<7)==1);                       
//             HAL_SPI_Receive(&SPI2_Handler,(vu8*)(Bank5_SDRAM_ADDR + j),1024,1000);
//                         i+=1000;
                          delay_ms(1);
//                        HAL_SPI_Receive_DMA(&SPI2_Handler,(vu8*)(Bank5_SDRAM_ADDR + j),10);
          }
}
[/mw_shl_code]

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。