OpenEdv-开源电子网

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

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

[复制链接]

91

主题

186

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2016-3-22
在线时间
122 小时
发表于 2017-9-12 16:15:43 | 显示全部楼层 |阅读模式
10金钱
想数组中的数据通过DMA传到fsmc,fsmc会自动将数据发送给外部SRAM,但是实测发现fsmc没有发出数据,只有fsmc时与外部SRAM通信是对的,所以问一下DMA与FSMC外部存储的通信有哪些注意的地方,求一个DMA与fsmc+sram的代码,我用的是F407ZET6的板子

最佳答案

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

解决了,我没有用中断,以为传输完成中断标志位不用清零
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

91

主题

186

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2016-3-22
在线时间
122 小时
 楼主| 发表于 2017-9-12 16:15:44 | 显示全部楼层
解决了,我没有用中断,以为传输完成中断标志位不用清零
回复

使用道具 举报

91

主题

186

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2016-3-22
在线时间
122 小时
 楼主| 发表于 2017-9-12 16:16:24 | 显示全部楼层
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;
}          
回复

使用道具 举报

91

主题

186

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2016-3-22
在线时间
122 小时
 楼主| 发表于 2017-9-12 16:17:47 | 显示全部楼层
MYDMA_Config(DMA2_Stream0,0,(u32)(shuju),(u32)(0x60000000),2112);//DMA·&#189;ê&#189;&#207;òFSMCía2&#191;′&#230;′¢′&#171;ê&#228;êy&#190;Y
MYDMA_Enable(DMA2_Stream0,2112);

上面是DMA的配置,用的是存储器到存储器模式,用的是DMA2的0数据流0通道
回复

使用道具 举报

91

主题

186

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2016-3-22
在线时间
122 小时
 楼主| 发表于 2017-9-12 16:51:33 | 显示全部楼层
发现DMA只传输了一次或者说之成功传输了第一次,但是在while循环里只传输一次是什么问题,有没有人遇到过
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2017-9-13 00:02:46 | 显示全部楼层
参考我们开发板综合实验代码
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-18 13:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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