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

STM32F407的DMA问题求教

[复制链接]
ataudio 提问时间:2015-3-10 13:49 /
悬赏15ST金币未解决
本帖最后由 ataudio 于 2015-3-11 15:29 编辑


请教一个DMA的问题:我使用外部中断触发置标志位,while里根据标志位开启ADC+DMA,并且关灯,而DMA中断里点灯。
经过示波器查看,发现点灯比中断时延13us,而我设置的DMA采集缓存是150us的数据点数。难道13us,DMA就采样完成了了,进入DMA中断里?这和DMA产生中断的理念不符啊。。。——凌乱了。。。求解惑此现象。

外部中断每秒一次。

补充说明:我的DMA使用是正常的,但产品对延时要求高,需要测出DMA采样的延时,包括ADC上电稳定的时间差和漂移时间。这方面的测试样例网上很少。

void DMA2_Stream0_IRQHandler(void)
{
    if(DMA_GetFlagStatus(DMA2_Stream0, DMA_FLAG_TCIF0)==SET)
    {
        GPIOD->BSRRL = GPIO_Pin_14;
        //清除全部中断标志。如果关闭ADC和DMA,还是否需要清标志位
        DMA_ClearFlag(DMA2_Stream0, DMA_FLAG_TCIF0);
        
        DMA_Cmd(DMA2_Stream0, DISABLE);

        // Disable ADC3 ,ADC断电,等待中断触发再上电。
        ADC_Cmd(ADC3, DISABLE);  
    }
}


while (1)
    {
        //GPIOD->BSRRL = GPIO_Pin_14;
        GPIOD->BSRRH = GPIO_Pin_14;        
        //GPIOD->BSRRL = GPIO_Pin_14;
        GPIOD->BSRRH = GPIO_Pin_14;
        
        /******Pa4外部中断************/  
        if(EXTI_Pa5Flag)
        {
            ADC_Cmd(ADC3, ENABLE);

            ADC3_CH11_DMA_Config();

            ADC_SoftwareStartConv(ADC3);

             EXTI_Pa5Flag = 0;
        }


//DMA的配置
DMA_InitStructure.DMA_Channel = DMA_Channel_2;  
    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC3_DR_ADDRESS;
    DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADC3ConvertedValue;
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
    DMA_InitStructure.DMA_BufferSize = ADC3_RAM_SIZE;
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
    DMA_InitStructure.DMA_Priority = DMA_Priority_High;
    DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;         
    DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
    DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
    DMA_Init(DMA2_Stream0, &DMA_InitStructure);





收藏 1 评论20 发布时间:2015-3-10 13:49

举报

20个回答
拼命三郎 回答时间:2015-3-10 20:39:09
顶顶顶顶顶顶顶顶顶大大大.jpg
笨笨-392907 回答时间:2015-3-11 00:14:53
顶不动,一起来顶
wambob 回答时间:2015-3-11 08:42:12
帮顶下吧,建议参考下别人的例程
_ilikerome_ 回答时间:2015-3-11 09:35:55
DMA俺还没有学到
_ilikerome_ 回答时间:2015-3-11 09:36:45
还有,LZ可以把悬赏的分搞高一点,重赏之下必有勇夫。
回答时间:2015-3-11 14:33:33
GPIO的频率配置是多高?DMA要等AD数据采集达到设置缓冲区范围以后,才会触发。
mark0668 回答时间:2015-3-11 15:29:32
你ADC 是什么触发的?
ataudio 回答时间:2015-3-11 15:32:58
安 发表于 2015-3-11 14:33
GPIO的频率配置是多高?DMA要等AD数据采集达到设置缓冲区范围以后,才会触发。 ...

GPIO 50M。
所以我奇怪,DMA触发为什么出现在了第13us,而我需要采集的数据长度要150us的???明显没采到全部数据。而我后面将数据输出来了的,看到是完整的波形。。
ataudio 回答时间:2015-3-11 15:34:07
wambob 发表于 2015-3-11 08:42
帮顶下吧,建议参考下别人的例程

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