OpenEdv-开源电子网

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

请高手指点一下SPI_DMA读FLASH数据程序

[复制链接]

53

主题

126

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-6-1
在线时间
37 小时
发表于 2016-5-11 13:36:42 | 显示全部楼层 |阅读模式
10金钱
下面这段程序困扰我好几天了;反反复复调试了许多遍,白天晚上都是想着这个事情;实在是不知道问题出在哪;希望高手指点一下,(或者请提供一段SPI_DMA读FLASH数据的程序)谢谢!
在没有应用DMA之前LCD的显示图像是正常的,但是加了DMA之后;图像无显示;程序始终停留在 while(DMA_GetFlagStatus(DMA1_FLAG_TC2) == RESET);
#define SIZE 3200
#define Doublesize  SIZE*2

u8 datatemp[Doublesize];

int main(void)
{
   delay_init();                    
   LCD_init();
   SPI_Flash_Init();   
         
   DMA_Configuration((u32)datatemp);         
                          
         SPI_FLASH_CS=0;               
         SPI_Flash_Read(0);

         MYDMA_Enable(DMA1_Channel2);
         while(DMA_GetFlagStatus(DMA1_FLAG_TC2) == RESET);
         DMA_ClearFlag(DMA1_FLAG_TC2);
         SPI_FLASH_CS=1;                     
         
         LCD_tuhuashow(0,0,SIZE,datatemp);                         
         
         while(1);         
}


#define DMA1_MEM_LEN 6400   

void DMA_Configuration(u32 cmar)
{
        DMA_InitTypeDef DMA_InitStructure;
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);        //ê1ÄüDMA′«êä
       
        DMA_DeInit(DMA1_Channel2);   

        DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)&SPI1->DR;//íaéè»ùμØÖ·
        DMA_InitStructure.DMA_MemoryBaseAddr=cmar;  //DMAÄú′æ»ùμØÖ·

        DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;//éèÖÃíaéèÎaà′Ô′
        DMA_InitStructure.DMA_BufferSize=DMA1_MEM_LEN;  //DMA»o′æ′óD¡

        DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;//íaéèμØÖ·2»±ä
        DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;//Äú′æμØÖ·μYÔö

        DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte; //íaéèêy¾Y¿í¶èÎa16λ
        DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;//Äú′æêy¾Y¿í¶èÎa16λ

        DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;  //1¤×÷ÔúÕy3£Ä£ê½
        DMA_InitStructure.DMA_Priority=DMA_Priority_High;//¸ßóÅÏè¼¶
       
        DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;//·ÇÄú′æμ½Äú′æ′«êä
        DMA_Init(DMA1_Channel2,&DMA_InitStructure);
}

void MYDMA_Enable(DMA_Channel_TypeDef*DMA_CHx)
{
        DMA_Cmd(DMA_CHx, DISABLE );  //1رÕUSART1 TX DMA1 ËùÖ¸ê¾μÄí¨μà      
        DMA_SetCurrDataCounter(DMA_CHx,DMA1_MEM_LEN);//DMAí¨μàμÄDMA»o′æμÄ′óD¡
        DMA_Cmd(DMA_CHx, ENABLE);  //ê1ÄüUSART1 TX DMA1 ËùÖ¸ê¾μÄí¨μà
}

void SPI_Flash_Read(u32 ReadAddr)   
{                                                                                                        
  SPI_InitTypeDef  SPI_InitStructure;
    SPIx_ReadWriteByte(W25X_ReadData);         //·¢Ëí¶áè¡Ãüáî   
    SPIx_ReadWriteByte((u8)((ReadAddr)>>16));  //·¢Ëí24bitμØÖ·   
    SPIx_ReadWriteByte((u8)((ReadAddr)>>8));   
    SPIx_ReadWriteByte((u8)ReadAddr);

          SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_RxOnly;
    SPI_Init(SPI1, &SPI_InitStructure);       
                   
}  









最佳答案

查看完整内容[请看2#楼]

参考下我们精英版的综合实验。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-5-11 13:36:43 | 显示全部楼层
参考下我们精英版的综合实验。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

53

主题

126

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-6-1
在线时间
37 小时
 楼主| 发表于 2016-5-11 13:39:02 | 显示全部楼层
还漏了一段SPI的程序
        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //éèÖÃSPIμ¥Ïò»òÕßË«ÏòμÄêy¾YÄ£ê½:SPIéèÖÃÎaË«ÏßË«Ïòè«Ë«1¤
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                //éèÖÃSPI1¤×÷Ä£ê½:éèÖÃÎaÖ÷SPI
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                //éèÖÃSPIμÄêy¾Y′óD¡:SPI·¢Ëí½óêÕ8λ֡½á11
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                //Ñ¡ÔñáË′®DDê±ÖóμÄÎèì¬:ê±ÖóDü¿Õ¸ß
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;        //êy¾Y2¶»ñóúμú¶t¸öê±ÖóÑØ
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                //NSSDÅoÅóéó2¼t£¨NSS1ü½Å£©»1êÇèí¼t£¨ê1óÃSSI룩1üàí:Äú2¿NSSDÅoÅóDSSIλ¿ØÖÆ
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;                //¶¨òå2¨ìØÂêÔ¤·ÖÆμμÄÖμ:2¨ìØÂêÔ¤·ÖÆμÖμÎa256
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;        //Ö¸¶¨êy¾Y′«êä′óMSBλ»1êÇLSBλ¿aê¼:êy¾Y′«êä′óMSBλ¿aê¼
        SPI_InitStructure.SPI_CRCPolynomial = 7;        //CRCÖμ¼ÆËãμĶàÏîê½
        SPI_Init(SPI1, &SPI_InitStructure);  //¸ù¾YSPI_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèSPIx¼Ä′æÆ÷

  SPI_I2S_DMACmd(SPI1, SPI_I2S_DMAReq_Rx, ENABLE);

        SPI_Cmd(SPI1, ENABLE); //ê1ÄüSPIíaéè
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-9 02:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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