有没有大大知道DMA2半传送是什么啊??

2019-07-20 17:53发布

本帖最后由 爬上阁楼的鱼 于 2016-10-7 10:15 编辑

如题    本来好不容易调好了TIM1捕获加DMA采摄像头  可是出去洗个澡吃个饭回来就挂了   总是半传送中断而没有传输完成中断   有大大遇到过吗??    跪求指点 啊

STM32F4xx_DSP_StdPeriph_Lib_V1.7.1.001.zip (19.8 MB, 下载次数: 121) 2016-10-7 10:08 上传 点击文件名下载附件
STM32F4xx_DSP_StdPeriph_Lib_V1.7.1.002.zip (19.8 MB, 下载次数: 119) 2016-10-7 10:09 上传 点击文件名下载附件
STM32F4xx_DSP_StdPeriph_Lib_V1.7.1.003.zip (14.44 MB, 下载次数: 156) 2016-10-7 10:09 上传 点击文件名下载附件


程序分布在各个.c里   
现在基本上一半多一点传输完成   一半半传送不明白是什么   其次咱不懂如何把临时的那些编译文件删了   体积略大   工程是用IAR打开的   

芯片STM32F407VET6     摄像头是逐飞的总钻风   似乎就差那么一点点问题无法把数据读完整    跪求大家帮帮忙啊
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
爬上阁楼的鱼
1楼-- · 2019-07-20 23:20
莫名其妙的解决了   把dma一次传输一行改成一次一副图像就好了
原来的方法每次一行,dma中断后再关闭dma再等待dma可配置再配好的时间好像太长了,所以总有错过没采集到的地方于是就出现了半传输中断(貌似),只要把一次传输的数据改为一帧的分辨率就可以一次传输一整张画面   然后dma中断后直接用就好啦
爬上阁楼的鱼
2楼-- · 2019-07-21 02:50
本帖最后由 爬上阁楼的鱼 于 2016-10-7 10:03 编辑

各位+ @正点原子
初始化没有打开半传送   只是仿真的时候看到标志位置一了  而且照样进了中断  所以我就在中断里检测了一下那个标志并清零了
这是我的中断函数
  if((DMA2->LISR&0x800)==0x800)
  {
    DMA2->LIFCR|=1<<11;                     //清除传输完成中断
    now_row++;
    if(now_row<ROW)   
    {
      //while((USART1->SR&0X40)==0);
      //USART_SendData(USART1,0xa0);
      DMA2_Stream1->CR&=~(1<<0);            //关闭DMA传输  
      while(DMA2_Stream1->CR&0X1);         //确保DMA可以被设置   
      DMA2_Stream1->M0AR=(u32)&image[now_row][0];
      DMA2_Stream1->NDTR=188;               //传输长度为jpeg_buf_size*4字节
      DMA2_Stream1->CR|=1<<0;               //重新传输
    }
    if(now_row >= ROW)        
    {
      //__disable_irq();
      mt9v032_finish_flag = 1;
      GPIOC->BSRRH|=1<<13;                  //初始化在MT9V032_Init();   
      display_188_60();
      while((USART1->SR&0X40)==0);
      USART_SendData(USART1,image[20][29]);   
      //__enable_irq();     
    }
  }
  if((DMA2->LISR&0x200)==0x200)
  {
    DMA2->LIFCR|=1<<9;
   
    while((USART1->SR&0X40)==0);
    USART_SendData(USART1,0xee);
  }
  if((DMA2->LISR&0x400)==0x400)
  {
    DMA2->LIFCR|=1<<10;
    DMA2_Stream1->CR|=1<<0;                   //重新传输
    while((USART1->SR&0X40)==0);
    USART_SendData(USART1,0xea);   
  }



最后串口一直在收0xea
爬上阁楼的鱼
3楼-- · 2019-07-21 08:11
现在大概是一半传输完成   一半半传输  主频提高到192M或者降低到16M都是一半半传送中断,一半传送完成中断  )
爬上阁楼的鱼
4楼-- · 2019-07-21 12:39
现在场行中断全部配合一下60行还是有6次传输半传输中断
求各位大大  and  @正点原子  大大
就是不太清除半传输中断到底是什么  
faiz
5楼-- · 2019-07-21 15:26
 精彩回答 2  元偷偷看……

一周热门 更多>