发 帖  
原厂入驻New
申请华秋企业认证 多层板首单免费打样!
30s提交资料,10分钟通过审核(免费赔付+顺丰包邮)>>立即报名
[问答] 为什么ALIENTEK MINISTM32实验15 DMA实验中程序一直停在这个循环里?
224 DMA 循环
分享
我想问一下,在alientek MINISTM32 实验15 DMA实验中,程序为什么都一直停在这个循环里面
while(1)
      {
    IF(DMA1->ISR&(1<<13))//等待通道4传输完成
    {
     DMA1->IFCR|=1<<13;//清除通道4传输完成标志
     break;
          }
    pro=DMA1_Channel4->CNDTR;//得到当前还剩余多少个数据
    pro=1-pro/5200;//得到百分比   
    pro*=100;      //扩大100倍
    LCD_ShowNum(60,170,pro,3,16);
    LCD_ShowNum(60,190,jishu,4,16);
    jishu++;  //这里是自己加的
      }      
DMA1->ISR&(1<<13)好像都不会传输完成?
0
2019-7-31 01:04:16   评论 分享淘帖 邀请回答

相关问题

7个回答
论坛搜索下.应该是因为DMA初始化的时候,有个延时没加的缘故.
老版本的代码存在这个问题的.
你可以贴你的DMA初始化代码出来看下.
2019-7-31 07:43:12 评论

举报

void MYDMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
{
u32 DR_Base;  //做缓冲用,不知道为什么.非要不可
RCC->AHBENR|=1<<0;//开启DMA1时钟
DR_Base=cpar;
DMA_CHx->CPAR=DR_Base;  //DMA1 外设地址 
DMA_CHx->CMAR=(u32)cmar; //DMA1,存储器地址
DMA1_MEM_LEN=cndtr;      //保存DMA传输数据量
DMA_CHx->CNDTR=cndtr;    //DMA1,传输数据量
DMA_CHx->CCR=0X00000000;//复位
DMA_CHx->CCR|=1<<4;  //从存储器读
DMA_CHx->CCR|=0<<5;  //普通模式
DMA_CHx->CCR|=0<<6;  //外设地址非增量模式
DMA_CHx->CCR|=1<<7;  //存储器增量模式
DMA_CHx->CCR|=0<<8;  //外设数据宽度为8位
DMA_CHx->CCR|=0<<10; //存储器数据宽度8位
DMA_CHx->CCR|=1<<12; //中等优先级
DMA_CHx->CCR|=0<<14; //非存储器到存储器模式  
2019-7-31 07:57:44 评论

举报

我在每句话后面都加了一个10MS的延时程序就可以了,能说一下没加延时导致什么错误码?
有新版本的程序下载吗?
2019-7-31 08:06:27 评论

举报

只需要在这里:
RCC->AHBENR|=1<<0;//开启DMA1时钟 
delay_ms(10); 
DMA_CHx->CPAR=cpar;   //DMA1 外设地址  
加入延时即可。
2019-7-31 08:21:16 评论

举报

在后面一句话加也可以
RCC->AHBENR|=1<<0;//开启DMA1时钟
DR_Base=cpar;
delay_us(5);
DMA_CHx->CPAR=DR_Base;  //DMA1 外设地址 
DMA_CHx->CMAR=(u32)cmar; //DMA1,存储器地址
但在DMA_CHx->CPAR=DR_Base;后面加延时就不行了
RCC->AHBENR|=1<<0;//开启DMA1时钟
DR_Base=cpar;
DMA_CHx->CPAR=DR_Base;  //DMA1 外设地址 
delay_us(5);
DMA_CHx->CMAR=(u32)cmar; //DMA1,存储器地址
能解释一下吗?谢谢。
2019-7-31 08:38:36 评论

举报

你真的搜索到论坛解答此部分的帖子了么?
如果搜索到了,你这个问题就清楚了的。
2019-7-31 08:52:25 评论

举报

2019-7-31 09:03:02 评论

举报

只有小组成员才能发言,加入小组>>

41个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /6 下一条

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