已经在板子上实现了ADC+DMA,但发现一个问题,就是ADC+DMA只工作在采样时间为810.5个adc时钟周期,程序如下: sConfig.Channel = ADC_CHANNEL_15; sConfig.Rank = 1;
sConfig.SamplingTime=ADC_SAMPLETIME_810CYCLES_5; //采样时间
HAL_ADC_ConfigChannel(&hadcx, &sConfig);
sConfig.Channel = ADC_CHANNEL_18;
sConfig.Rank = 2;
HAL_ADC_ConfigChannel(&hadcx, &sConfig);
sConfig.Channel = ADC_CHANNEL_19;
sConfig.Rank = 3;
HAL_ADC_ConfigChannel(&hadcx, &sConfig);
只要一改变采样时间,ADC+DMA就停止工作,ADC的配置如下:
ADC_ChannelConfTypeDef sConfig;
hadcx.Instance=ADC1;
hadcx.Init.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV4; //
hadcx.Init.Resolution=ADC_RESOLUTION_12B; //
hadcx.Init.ScanConvMode=ENABLE; //
hadcx.Init.EOCSelection=DISABLE; //
hadcx.Init.LowPowerAutoWait=DISABLE; //
hadcx.Init.ContinuousConvMode=ENABLE; //
hadcx.Init.NbrOfConversion=3; //1¸
hadcx.Init.DiscontinuousConvMode=DISABLE; //
hadcx.Init.NbrOfDiscConversion=0; /
hadcx.Init.ExternalTrigConv=ADC_SOFTWARE_START; /
hadcx.Init.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONVEDGE_NONE;//
hadcx.Init.BoostMode=ENABLE; //
hadcx.Init.Overrun=ADC_OVR_DATA_OVERWRITTEN; //
hadcx.Init.OversamplingMode=DISABLE; //过采样班
hadcx.Init.ConversionDataManagement=ADC_CONVERSIONDATA_DMA_CIRCULAR; //ADC在dma工作模式下循环
HAL_ADC_Init(&hadcx); //初始化ˉ
HAL_ADCEx_Calibration_Start(&hadcx,ADC_CALIB_OFFSET,ADC_SINGLE_ENDED); //ADC校准
我认为应该是ADC设置的那个时钟分频有问题,但找不出来,哪位大哥给小弟看看吧
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>