你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

DMA 传输一半中断

[复制链接]
风铃草2 提问时间:2016-11-7 10:57 /
阅读主题, 点击返回1楼
收藏 2 评论44 发布时间:2016-11-7 10:57
44个回答
回答时间:2016-11-7 16:40:33
等我找个板子测试一下103下面,DMA的采集。
风铃草2 回答时间:2016-11-7 17:22:44
安 发表于 2016-11-7 16:40
等我找个板子测试一下103下面,DMA的采集。

有结果了吗
zbber 回答时间:2016-11-7 18:11:46
楼主用的哪个CPU
asssdz-382474 回答时间:2016-11-7 19:21:07
风铃草2 回答时间:2016-11-8 08:09:06
zbber 发表于 2016-11-7 18:11
楼主用的哪个CPU

STM32f072C8
风铃草2 回答时间:2016-11-8 08:13:54
安 发表于 2016-11-7 16:40
等我找个板子测试一下103下面,DMA的采集。

我用F439的DMA例程  改
就改了这么一句 DMA_ITConfig(DMA_STREAM, DMA_IT_HT, ENABLE);

void DMA_STREAM_IRQHANDLER(void)
{
  /* Test on DMA Stream Transfer Complete interrupt */
  if(DMA_GetITStatus(DMA_STREAM, DMA_IT_HTIF0))
  {
                if((DST_Buffer[0]!=0xffffffff)&&(DST_Buffer[BUFFER_SIZE-1]!=0xffffffff))
                {
                        Errno=1;
                }
                DST_Buffer[0]=0xffffffff;
                DST_Buffer[BUFFER_SIZE-1]=0xffffffff;
                if((DST_Buffer[0]!=0xffffffff)&&(DST_Buffer[BUFFER_SIZE-1]!=0xffffffff))
                {
                        Errno=2;
                }               
    /* Clear DMA Stream Transfer Complete interrupt pending bit */
    DMA_ClearITPendingBit(DMA_STREAM, DMA_IT_HTIF0);
         
    printf("\n\rwww.armjishu.com STM32 DMAÊý¾Ý´«ÊäÍê³É\r\n");
    /* Turn LED3 on: End of Transfer */
    STM_EVAL_LEDOn(LED3);
  }
}

执行结果,还是每次中断,整个buff都更新,Errno始终等于1,实在没办法理解了

风铃草2 回答时间:2016-11-8 08:32:38
安 发表于 2016-11-7 16:40
等我找个板子测试一下103下面,DMA的采集。

今天有测试了一下,
u8 Test_Flag=0,Errno=0;
u32 DataCnt=0;
void DMA1_Channel1_IRQHandler(void)          
{           
        DataCnt = DMA_GetCurrDataCounter(DMA1_Channel1);
        Errno=0;
        if(DataCnt>250)
        {
                Errno=1;
        }       
        if(DMA_GetITStatus(DMA_IT_HT)==SET)
        {                               
                DMA_ClearITPendingBit(DMA1_IT_HT1);                                   
                if(Test_Flag)
                {
                        Test_Flag=0;
                        SDA_H;
                }
                else
                {
                        Test_Flag=1;
                        SDA_L;                       
                }
        }

}
结果发现DataCnt每次都等于250,BUFF的一半,也就是说是传输个半个BUFF,但是却发现,每次中断的时间,和全部传输完成的中断时间是一样的,而且数组里面仍然是全部更新。实际上还是全部传输中断,这到底为什么.
五哥1 回答时间:2016-11-8 11:24:22
根据楼主的情况,结合以往,绝大多数的问题都是提出问题的楼主自行解决的,因为所有发言的人都是在你提供的非常有限的信息里凭经验猜。这个猜,或许能给你一些启发,最终解决问题的还是你自己。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

wdshuang09 回答时间:2016-11-8 12:14:11
五哥1 发表于 2016-11-8 11:24
根据楼主的情况,结合以往,绝大多数的问题都是提出问题的楼主自行解决的,因为所有发言的人都是在你提供的 ...

同意这个说法
回答时间:2016-11-8 14:12:29
103测试,ADC采集1000个数据,当HT产生时CNDTR值为491,TC产生时CNDTR的值为0。
如果在HT产生时加了中断,总是看到TC的产生的中断,这样测试并不准确,DMA处理数据速度快,导致仿真中断时,数据已经处理完成,才看到TC的中断产生,建议楼主用串口调试输出,这样准确一些。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版