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

F411DMA方式4通道AD的C问题

[复制链接]
me浩 提问时间:2015-7-29 10:39 /
代码如下,为什么采集回来只有两个数据而且跳变很大?求指导。
void Adc_DMA_Init(void)
{
//----------------------------初始化DMA----------------------------//
        GPIO_InitTypeDef GPIO_InitStructure;
        ADC_InitTypeDef  ADC_InitStructure;
        ADC_CommonInitTypeDef ADC_CommonInitStructure;
        DMA_InitTypeDef  DMA_InitStructure;
                           
        RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_DMA2 |
                                                        RCC_AHB1Periph_GPIOA|
                                                        RCC_AHB1Periph_GPIOC, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //使能ADC1时钟
        
        DMA_InitStructure.DMA_Channel = DMA_Channel_0;  //通道选择
        DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_Address;//(uint32_t)&ADC1->DR
        DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&AD;
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
        DMA_InitStructure.DMA_BufferSize = 4;
        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);
        DMA_Cmd(DMA2_Stream0,ENABLE);        
        
        //先初始化ADC1通道1,4 IO口
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_4;//PA1 通道1,PA4 通道4
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉
        GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化  
        //先初始化ADC1通道10,11 IO口
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;//PC0 通道10,PC1 通道11
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉
        GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化

//----------------------------初始化ADC----------------------------//               
        ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式
        ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;//两个采样阶段之间的延迟5个时钟
        ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_1; //DMA失能
        ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div8;//预分频4分频。ADCCLK=PCLK2/4=84/4=21Mhz,ADC时钟最好不要超过36Mhz
        ADC_CommonInit(&ADC_CommonInitStructure);//初始化

        ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12位模式
        ADC_InitStructure.ADC_ScanConvMode = ENABLE;//扫描模式        
        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//连续转换
        ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//禁止触发检测,使用软件触发
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐        
        ADC_InitStructure.ADC_NbrOfConversion = 4;//1个转换在规则序列中 也就是只转换规则序列1
        ADC_Init(ADC1, &ADC_InitStructure);//ADC初始化
        
        ADC_RegularChannelConfig(ADC1,ADC_Channel_10,1,ADC_SampleTime_15Cycles);
        ADC_RegularChannelConfig(ADC1,ADC_Channel_11,2,ADC_SampleTime_15Cycles);
        ADC_RegularChannelConfig(ADC1,ADC_Channel_1,3,ADC_SampleTime_15Cycles);
        ADC_RegularChannelConfig(ADC1,ADC_Channel_4,4,ADC_SampleTime_15Cycles);
        
        ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);
        ADC_DMACmd(ADC1,ENABLE);//使能ADC的DMA传输
        ADC_Cmd(ADC1, ENABLE);//开启AD转换器        
        
        ADC_SoftwareStartConv(ADC1);        //连续转换开始,ADC通过DMA方式不断的更新RAM区。
        
}

收藏 评论5 发布时间:2015-7-29 10:39

举报

5个回答
回答时间:2015-7-29 11:02:29
楼主能说一下如何处理采集的数据吗?最好有详细的数据对比和说明。
me浩 回答时间:2015-7-29 12:07:38
安 发表于 2015-7-29 11:02
楼主能说一下如何处理采集的数据吗?最好有详细的数据对比和说明。

还没采回来呢,求平均就可以了吧。或者麻烦点的冒泡法,取中间的量,再求均值。
stary666 回答时间:2015-7-29 12:16:05
很少用DMA
你好我好大家好! 回答时间:2015-7-29 13:56:03
帮顶                                 
嗅嗅匆匆 回答时间:2015-7-31 11:55:22
问下楼主F411的DMA的各通道对应的外设表在哪下载?

所属标签

相似问题

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