附件为STM32F0系列ADC的多通道采集,DMA中断方式,注释非常详细,分享给大家,部分代码如下
- /**
- * @brief 配置ADC1的工作模式
- * @param 无
- * @retval 无
- */
- static void ADC1_Mode_Init(void)
- {
- ADC_InitTypeDef ADC_InitStructure;
- /*设置ADC分频因子为4 ,ADC最大时间不能超过14M*/
- RCC_ADCCLKConfig(RCC_ADCCLK_PCLK_Div4);
- /* ADC1 Periph clock enable */
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
- /* ADC1 DeInit */
- ADC_DeInit(ADC1);
-
- /*初始化ADC结构体,此句必须加,不加的话多路ADC数据会交换*/
- ADC_StructInit(&ADC_InitStructure);
- /*配置ADC分辨率为12位*/
- ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
- /*开启连续转换*/
- ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
- /*禁止触发检测,使用软件触发*/
- ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
- /*ADC采集数据右对齐*/
- ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
- /*向上扫描*/
- ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
- /*ADC初始化*/
- ADC_Init(ADC1, &ADC_InitStructure);
-
- /*配置采样通道及时间*/
- ADC_ChannelConfig(ADC1, ADC_Channel_0 | ADC_Channel_1, ADC_SampleTime_239_5Cycles);
- /* ADC 校准 */
- ADC_GetCalibrationFactor(ADC1);
- /* 循环模式下的 ADC DMA 请求 */
- ADC_DMARequestModeConfig(ADC1, ADC_DMAMode_Circular);
- /* 使能 ADC_DMA */
- ADC_DMACmd(ADC1, ENABLE);
- /* 使能 ADC1 */
- ADC_Cmd(ADC1, ENABLE);
- /* 等待 ADCEN 标志 */
- while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADEN));
- /* ADC1 常规软件启动转换 */
- ADC_StartOfConversion(ADC1);
-
- }
复制代码
|
* @brief Configures the ADC clock (ADCCLK).
* @note This function is obsolete.
* For proper ADC clock selection, refer to ADC_ClockModeConfig() in the ADC driver
* @param RCC_ADCCLK: defines the ADC clock source. This clock is derived
* from the HSI14 or APB clock (PCLK).
* This parameter can be one of the following values:
* @arg RCC_ADCCLK_HSI14: ADC clock = HSI14 (14MHz)
* @arg RCC_ADCCLK_PCLK_Div2: ADC clock = PCLK/2
* @arg RCC_ADCCLK_PCLK_Div4: ADC clock = PCLK/4
* @retval None
*/
void RCC_ADCCLKConfig(uint32_t RCC_ADCCLK)
此函数已废弃,正确ADC时钟选择,请用函数ADC_ClockModeConfig()
void ADC1_Mode_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;
/*设置ADC分频因子为4 ,ADC最大时间不能超过14M*/
RCC_ADCCLKConfig(RCC_HCLK_Div4);
RCC_ADCCLKConfig(RCC_ADCCLK_PCLK_Div4);
源码为红字,正确的应该为蓝字,当然影响不大,但起码会影响串口速率.
另采集数据全0,还没看那里的问题..
滤波显然会影响速度的吧?
滤波之后还能有多少bit?
你现在是内基准还是外基准?
内部adc毕竟还是和外部adc有差距,一个单adc芯片都能顶上还几个stm32了 呵呵。
能帮到你就好
能给你提供有用信息就行
我用串口打印了,我用的是dma中断,在主循环检测dma中断是否完成
多谢版主支持