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

STM32F405 ADC采样

[复制链接]
newphj 提问时间:2017-1-9 16:22 /
STM32F405RGT6_64PIN的芯片,PA0-PA7用做ADC1 DMA采样引脚,引脚全部接VCC的时候,只有PA4,PA5得到的数据是4095.。剩下的引脚都只有3000左右。使用STM32Cube生成工程也是这样。不知道是那里问题。STM32F407,用STM32Cube生成ADC1采样工程都是正确的。是我那里没有设置好吗。

代码:
       #define ADC1_DR_ADDRESS     ((uint32_t)0x4001204C)
       uint16_t uhADCxConvertedValue[CHANNELNUM] = {0};

        ADC_InitTypeDef       ADC_InitStructure;
        ADC_CommonInitTypeDef ADC_CommonInitStructure;
        DMA_InitTypeDef       DMA_InitStructure;
        GPIO_InitTypeDef      GPIO_InitStructure;
        /* Enable ADCx, DMA and GPIO clocks ****************************************/
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);  
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
        /* DMA2 Stream0 channel2 configuration **************************************/
        DMA_InitStructure.DMA_Channel = DMA_Channel_0;  
        DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_ADDRESS;
        DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&uhADCxConvertedValue[0];
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
        DMA_InitStructure.DMA_BufferSize = CHANNELNUM;
        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);
        /* Configure ADC3 Channel7 pin as analog input ******************************/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_InitStructure.GPIO_Speed= GPIO_Medium_Speed;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        /* ADC Common Init **********************************************************/
        ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
        ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div8;
        ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_1;
        ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_10Cycles;
        ADC_CommonInit(&ADC_CommonInitStructure);
        /* ADC3 Init ****************************************************************/
        ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
        ADC_InitStructure.ADC_ScanConvMode = ENABLE;
        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 = 8;
        ADC_Init(ADC1, &ADC_InitStructure);
        /* ADC3 regular channel7 configuration **************************************/
        ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_56Cycles);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_56Cycles);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_56Cycles);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 4, ADC_SampleTime_56Cycles);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 5, ADC_SampleTime_56Cycles);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 6, ADC_SampleTime_56Cycles);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 7, ADC_SampleTime_56Cycles);
        ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 8, ADC_SampleTime_56Cycles);
        /* Enable DMA request after last transfer (Single-ADC mode) */
        ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);
        /* Enable ADC3 DMA */
        ADC_DMACmd(ADC1, ENABLE);
        /* Enable ADC3 */
        ADC_Cmd(ADC1,ENABLE);
        /* Start ADC Software Conversion */
        ADC_SoftwareStartConv(ADC1);

收藏 2 评论7 发布时间:2017-1-9 16:22

举报

7个回答
jackten 回答时间:2017-1-9 17:50:50
谢谢分享               
五哥1 回答时间:2017-1-9 18:30:57
你不能把这两个CUBE生成的程序做个对比,不就找出来了吗?

评分

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

查看全部评分

wenyangzeng 回答时间:2017-1-9 20:21:21
配置DMA时应该先关闭DMA才能够正确配置:
DMA_DeInit(DMA2_Stream0);

评分

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

查看全部评分

xmshao 回答时间:2017-1-9 21:54:07
也不妨检查下硬件,尤其各个电源管脚的连接情况。

评分

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

查看全部评分

newphj 回答时间:2017-1-19 16:11:14
ADC输入接3V3得到4096数据,超过就不行了。
xmshao 回答时间:2017-1-19 17:29:28
newphj 发表于 2017-1-19 16:11
ADC输入接3V3得到4096数据,超过就不行了。

  那当然,过量程了。
alisa123 回答时间:2018-12-16 23:38:05
    请问楼主,最后知道什么原因了吗? 为什么只有PA4 和PA5有数据,其他的没有呢?
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版