最近在用STM32F405RG做工程,ADC的初始化如下: /* ADC Common Init **********************************************************/ ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent; ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4; ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_1; ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; ADC_CommonInit(&ADC_CommonInitStructure); /* ADC1 Init ****************************************************************/ ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfConversion = 1; ADC_Init(ADC1, &ADC_InitStructure); ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE); /* ADC1 regular channe configuration *************************************/ /* test configuration *************************************/ ADC_VBATCmd (ENABLE); ADC_RegularChannelConfig(ADC1, ADC_Channel_18, 1, ADC_SampleTime_15Cycles); ADC_DMACmd(ADC1, ENABLE); ADC_Cmd(ADC1, ENABLE); 焦点在ADC_RegularChannelConfig(ADC1, ADC_Channel_18, 1, ADC_SampleTime_15Cycles);的ADC_SampleTime_15Cycles上。 电路板中VBAT引脚是直接接的VCC,也就是3.3V,示波器测量电源没有问题,纹波还相当小,只有10mV。 Reference Manual上如下描述: 我用的片子是F405,那么从理论上来说,采样回来的数据应该是1.65V,数值上也就是2048才对。 当设置为采样时间为15个ADC_clk时,连续用DMA采样4096个点如下图所示(其中APB2速度为84M,ADC_clk为21M): 而当设置为采样时间为3个ADC_clk时,连续用DMA采样4096个点如下图所示: 可以看到此时幅值明显不对,测量内部温度值时也碰到了一样的情况,将采样时间设置为3个ADC_clk则幅值明显下落。 不知道是什么原因,有没有大神可以解释一下? |
STM32F407 定时器触发DMA 求助大神
【MCU实战经验】基于STM32F407的音频播放器设计
盘古UE-STM32F407工控板原理图
【STM32F429心得\疑问】+STM32F4之FSMC和FMC
STM32F429读取IO口传输的数据速率
STM32F407ZGT6 手摸芯片背部重启
STM32F4 SPI 动作时,软件片选信号被拉高,IO口程序逻辑失控
STM32F401RE NUCLEO求助,串口一直不能进中断
读取STM32F407内部温度传感器值错误
STM32F429多路内部ADC独立采集的办法