硬汉嵌入式论坛

 找回密码
 立即注册
查看: 98|回复: 1
收起左侧

[技术讨论] ADC设置为ADC_Resolution_8b正常,设置为ADC_Resolution_12b不正常

[复制链接]

24

主题

27

回帖

99

积分

初级会员

积分
99
发表于 6 天前 | 显示全部楼层 |阅读模式
ADC采集数据  


        ADC_InitTypeDef       ADC_InitStructure = {0} ;
        ADC_CommonInitTypeDef ADC_CommonInitStructure = {0} ;
        DMA_InitTypeDef       DMA_InitStructure = {0} ;
        GPIO_InitTypeDef      GPIO_InitStructure = {0} ;

        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);          
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);
       
        /* Configure ADC1 Channel6 pin as analog input ******************************/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
               
        /* DMA2 Stream0 channe0 configuration **************************************/
        DMA_InitStructure.DMA_Channel = DMA_Channel_0;  
        DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_ADDRESS;
        DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADC1ConvertedValue;
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
        DMA_InitStructure.DMA_BufferSize = 1;
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
        DMA_InitStructure.DMA_Mode = DMA_Mode_Circular ;//DMA_Mode_Normal;
        DMA_InitStructure.DMA_Priority = DMA_Priority_High;
        DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;         
        DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
        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);

       

       
        /* ADC Common Init **********************************************************/
        ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
        ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;
        ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
        ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
        ADC_CommonInit(&ADC_CommonInitStructure);
       
        /* ADC1 Init ****************************************************************/
        ADC_InitStructure.ADC_Resolution = ADC_Resolution_8b;
        ADC_InitStructure.ADC_ScanConvMode = DISABLE;
        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
        ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
        ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConvEdge_None;
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
        ADC_InitStructure.ADC_NbrOfConversion = 1;
        ADC_Init(ADC1, &ADC_InitStructure);
       
        /* ADC1 regular channe6 configuration *************************************/
        ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_28Cycles);
       
        /* Enable DMA request after last transfer (Single-ADC mode) */
        ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);
       

        ADC_DMACmd(ADC1, ENABLE);
       

        ADC_Cmd(ADC1, ENABLE);

        ADC_SoftwareStartConv(ADC1);



读取数值ADC1ConvertedValue,当设置ADC_InitStructure.ADC_Resolution = ADC_Resolution_8b;读出电压正常  
但是设置为ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b时,发现跳跃非常厉害  基本都不对  虽然设置为8bit是也是有点跳跃

以下是输出信号1V  ADC_InitStructure.ADC_Resolution = ADC_Resolution_8b测量结果如下 ,还算正常

ADC (0105)  1.035156
ADC (0103)  1.025391
ADC (0107)  0.976563
ADC (0103)  0.986328
ADC (0101)  0.996094
ADC (0104)  0.986328
ADC (0104)  0.996094
ADC (0101)  0.996094
ADC (0101)  0.996094
ADC (0107)  1.044922
ADC (0101)  1.025391
ADC (0099)  1.015625
ADC (0104)  1.005859
ADC (0104)  1.005859
ADC (0102)  1.015625
ADC (0103)  1.015625
ADC (0101)  0.976563
ADC (0105)  1.025391
ADC (0101)  0.996094
ADC (0103)  0.986328
ADC (0104)  0.986328
ADC (0107)  1.005859
ADC (0102)  1.005859
ADC (0099)  1.025391
ADC (0104)  0.996094
ADC (0106)  0.966797
ADC (0103)  0.976563
ADC (0106)  1.044922
ADC (0101)  0.986328
ADC (0102)  0.996094
ADC (0101)  1.044922
ADC (0100)  1.005859
ADC (0101)  0.986328
ADC (0104)  0.986328
ADC (0106)  1.005859
ADC (0101)  0.986328
ADC (0103)  0.996094
ADC (0102)  1.005859
ADC (0100)  0.986328


修改ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b  其他代码不动,1V电压输入  输出ADC的跳跃非常大,完全都不对

ADC (0078)  0.098877
ADC (0126)  0.054321
ADC (0164)  0.053101
ADC (0097)  0.090942
ADC (0128)  0.066528
ADC (0086)  0.069580
ADC (0143)  0.043945
ADC (0069)  0.084229
ADC (0097)  0.057373
ADC (0067)  0.067749
ADC (0095)  0.065308
ADC (0150)  0.032959
ADC (0125)  0.098267
ADC (0103)  0.079346
ADC (0122)  0.057983
ADC (0151)  0.042114
ADC (0150)  0.046387
ADC (0097)  0.062866
ADC (0133)  0.046387
ADC (0111)  0.071411
ADC (0136)  0.061035



请教下是什么问题?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 6 天前 | 显示全部楼层
DMA传输宽度改了,要用16bit宽度,然后你的变量ADC1ConvertedValue是16bit的吧,不是的话,也改下

DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-11 20:58 , Processed in 0.038211 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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