关于FSMC和DMA的问题,急急急

2019-07-20 12:00发布

想数组中的数据通过DMA传到fsmc,fsmc会自动将数据发送给外部SRAM,但是实测发现fsmc没有发出数据,只有fsmc时与外部SRAM通信是对的,所以问一下DMA与FSMC外部存储的通信有哪些注意的地方,求一个DMA与fsmc+sram的代码,我用的是F407ZET6的板子
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
xp1179926265
2019-07-20 15:20
void MYDMA_Config(DMA_Stream_TypeDef *DMA_Streamx,u8 chx,u32 par,u32 mar,u16 ndtr)
{
        DMA_TypeDef *DMAx;
        u8 streamx;
  DMAx=DMA2;
        RCC->AHB1ENR|=1<<22;//DMA2ê±&#214;óê1&#196;ü

        while(DMA_Streamx->CR&0X01);//μè′yDMA&#191;é&#197;&#228;&#214;&#195;
        streamx=(((u32)DMA_Streamx-(u32)DMAx)-0X10)/0X18;                //μ&#195;μ&#189;streamí¨μào&#197;
        if(streamx>=6)DMAx->HIFCR|=0X3D<<(6*(streamx-6)+16);        //&#199;&#229;&#191;&#213;&#214;&#174;&#199;°&#184;&#195;streamé&#207;μ&#196;&#203;ùóD&#214;D&#182;&#207;±ê&#214;&#190;
        else if(streamx>=4)DMAx->HIFCR|=0X3D<<6*(streamx-4);    //&#199;&#229;&#191;&#213;&#214;&#174;&#199;°&#184;&#195;streamé&#207;μ&#196;&#203;ùóD&#214;D&#182;&#207;±ê&#214;&#190;
        else if(streamx>=2)DMAx->LIFCR|=0X3D<<(6*(streamx-2)+16);//&#199;&#229;&#191;&#213;&#214;&#174;&#199;°&#184;&#195;streamé&#207;μ&#196;&#203;ùóD&#214;D&#182;&#207;±ê&#214;&#190;
        else DMAx->LIFCR|=0X3D<<6*streamx;                                                //&#199;&#229;&#191;&#213;&#214;&#174;&#199;°&#184;&#195;streamé&#207;μ&#196;&#203;ùóD&#214;D&#182;&#207;±ê&#214;&#190;
       
        DMA_Streamx->AR=par;                //DMAíaéèμ&#216;&#214;·
        DMA_Streamx->M0AR=mar;                //DMA ′&#230;′¢&#198;÷0μ&#216;&#214;·
        DMA_Streamx->NDTR=ndtr;                //DMA ′&#230;′¢&#198;÷0μ&#216;&#214;·
        DMA_Streamx->CR=0;                        //&#207;èè&#171;2&#191;&#184;′&#206;&#187;CR&#188;&#196;′&#230;&#198;÷&#214;μ
       
        DMA_Streamx->CR|=2<<6;                //′&#230;′¢&#198;÷μ&#189;íaéè&#196;£ê&#189;
        DMA_Streamx->CR&=~(0<<8);                //·&#199;&#209;-&#187;·&#196;£ê&#189;(&#188;′ê1ó&#195;&#198;&#213;í¨&#196;£ê&#189;)
        DMA_Streamx->CR|=1<<9;                //íaéè·&#199;&#212;&#246;á&#191;&#196;£ê&#189;
        DMA_Streamx->CR|=1<<10;                //′&#230;′¢&#198;÷&#212;&#246;á&#191;&#196;£ê&#189;
        DMA_Streamx->CR&=~(0<<11);                //íaéèêy&#190;Y3¤&#182;è:8&#206;&#187;
        DMA_Streamx->CR&=~(0<<13);                //′&#230;′¢&#198;÷êy&#190;Y3¤&#182;è:8&#206;&#187;
        DMA_Streamx->CR|=1<<17;                //&#214;Dμèó&#197;&#207;è&#188;&#182;
        DMA_Streamx->CR&=~(0<<21);                //íaéèí&#187;·¢μ¥′&#206;′&#171;ê&#228;
        DMA_Streamx->CR&=~(0<<23);                //′&#230;′¢&#198;÷í&#187;·¢μ¥′&#206;′&#171;ê&#228;
        DMA_Streamx->CR|=(u32)chx<<25;//í¨μà&#209;&#161;&#212;&#241;
}
//&#191;a&#198;&#244;ò&#187;′&#206;DMA′&#171;ê&#228;
//DMA_StreamxMAêy&#190;Yá÷,DMA1_Stream0~7/DMA2_Stream0~7
//ndtr:êy&#190;Y′&#171;ê&#228;á&#191;  
void MYDMA_Enable(DMA_Stream_TypeDef *DMA_Streamx,u16 ndtr)
{
        DMA_Streamx->CR&=~(1<<0);         //1&#216;±&#213;DMA′&#171;ê&#228;
        while(DMA_Streamx->CR&0X1);        //è·±£DMA&#191;éò&#212;±&#187;éè&#214;&#195;  
        DMA_Streamx->NDTR=ndtr;                //DMA ′&#230;′¢&#198;÷0μ&#216;&#214;·
        DMA_Streamx->CR|=1<<0;                //&#191;a&#198;&#244;DMA′&#171;ê&#228;
}          

一周热门 更多>