OpenEdv-开源电子网

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

DMA

[复制链接]

12

主题

25

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2017-3-25
在线时间
35 小时
发表于 2017-6-19 14:56:08 | 显示全部楼层 |阅读模式
14金钱
我有个关于DMA的疑问。最近试了一个2路AD采集,用了ADC1和ADC2,采样周期都为3个ADCCLK,ADCCLK为36MHz,这样每一路需要用时15/36=0.41us。然后我用的DMA把采到的数据传到变量HAL_ADC_Start_DMA(&hadc1,(uint32_t *)&data1,M1*N1);
HAL_ADC_Start_DMA(&hadc2,(uint32_t *)&data2,M2*N2);
然后在DMA的中断里把采集到的值直接DA输出,程序段如下:
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{       
        if(hadc==&hadc1)
        {       
                HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, data1[0][0]);       
        }       
        if(hadc==&hadc2)
        {
                HAL_DAC_SetValue(&hdac, DAC_CHANNEL_2, DAC_ALIGN_12B_R, data2[0][0]);
               
        }
}

data1和data2都是只有一个变量的二维数组uint16_t[1][1]。用示波器看发现只有DAC_CHANNEL_1有输出,DAC_CHANNEL_2是输出了一个高电平3.2V(可以不用纠结这个),如图1。然后我把开启DMA的语句交换了一下,就变成了DAC通道2有输出,DAC1没有,图2。我觉得可能是每个通道的采样周期设置的太小导致的一些问题,所以我试着把采样周期调整到480cycles,这样每个通道的采样时间为492/36=13.6us,然后发现DAC通道1和2都有输出,图3。但是为什么会出现这样的现象呢,是因为ADC1和ADC2是同一个DMA2的不同流,由于设置采样周期太短时出现冲突了?求大神解答


图1

图1

图2

图2

图3

图3
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-6-19 21:00:40 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-17 20:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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