新手入门
- 积分
- 8
- 金钱
- 8
- 注册时间
- 2019-12-10
- 在线时间
- 2 小时
|
程序如下:
void ADC1_Sensors_Init(void)
{
ADC_MultiModeTypeDef multimode;
HAL_ADC_DeInit(&ADC1_Handler);
ADC1_Handler.Instance=ADC1;
ADC1_Handler.Init.ClockPrescaler=ADC_CLOCK_ASYNC_DIV32; //4·ÖÆμ£¬ADCCLK=PER_CK/4=64/4=16MHZ
ADC1_Handler.Init.Resolution=ADC_RESOLUTION_16B; //16λÄ£ê½
ADC1_Handler.Init.ScanConvMode=ENABLE; //é¨ÃèÄ£ê½
ADC1_Handler.Init.EOCSelection=ADC_EOC_SINGLE_CONV; //1رÕEOCÖD¶Ï
ADC1_Handler.Init.LowPowerAutoWait=DISABLE; //×Ô¶ˉμí1|oÄ1رÕ
ADC1_Handler.Init.ContinuousConvMode=DISABLE; //1رÕá¬Dø×a»»
ADC1_Handler.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_CIRCULAR;
ADC1_Handler.Init.NbrOfConversion=16; //16¸ö×a»»Ôú1æÔòDòáDÖD ò2¾íêÇÖ»×a»»1æÔòDòáD1
ADC1_Handler.Init.DiscontinuousConvMode=DISABLE; //½ûÖ12»á¬Dø2éÑùÄ£ê½
ADC1_Handler.Init.NbrOfDiscConversion=0; //2»á¬Dø2éÑùí¨μàêyÎa0
//ADC1_Handler.Init.ExternalTrigConv=ADC_EXTERNALTRIG_T4_TRGO; //waibu chufa
ADC1_Handler.Init.ExternalTrigConv=ADC_SOFTWARE_START;
ADC1_Handler.Init.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONVEDGE_NONE;//
// ADC1_Handler.Init.BoostMode=ENABLE; //BOOTÄ£ê½1رÕ
//ADC1_Handler.Init.Overrun=ADC_OVR_DATA_OVERWRITTEN; //óDDÂμÄêy¾YμÄËàoóÖ±½ó¸2¸Çμô¾éêy¾Y
ADC1_Handler.Init.OversamplingMode=DISABLE; //1y2éÑù1رÕ
multimode.Mode = ADC_MODE_INDEPENDENT;
multimode.TwoSamplingDelay = ADC_TWOSAMPLINGDELAY_1CYCLE;
// multimode.TwoSamplingDelay = ADC_TWOSAMPLINGDELAY_1CYCLE;
if (HAL_ADCEx_MultiModeConfigChannel(&ADC1_Handler, &multimode) != HAL_OK)
{
// _Error_Handler(__FILE__, __LINE__);
}
// ADC1_Handler.Init.ConversionDataManagement=ADC_CONVERSIONDATA_DR; //1æÔòí¨μàμÄêy¾Y½ö½ö±£′æÔúDR¼Ä′æÆ÷àïÃæ
HAL_ADC_Init(&ADC1_Handler); //3õê¼»ˉ
}
void HAL_ADC_GPIOInit()
{
GPIO_InitTypeDef GPIO_Initure;
RCC_PeriphCLKInitTypeDef ADCClkInitStruct;
__HAL_RCC_ADC12_CLK_ENABLE(); //ê1ÄüADC1/2ê±Öó
//__HAL_RCC_ADC3_CLK_ENABLE(); //ê1ÄüADC3ê±Öó
__HAL_RCC_GPIOA_CLK_ENABLE(); //¿aÆôGPIOAê±Öó
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
ADCClkInitStruct.PeriphClockSelection=RCC_PERIPHCLK_ADC;
ADCClkInitStruct.AdcClockSelection=RCC_ADCCLKSOURCE_CLKP;
HAL_RCCEx_PeriphCLKConfig(&ADCClkInitStruct);
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7; //PA
GPIO_Initure.Mode=GPIO_MODE_ANALOG; //Ä£Äa
GPIO_Initure.Pull=GPIO_NOPULL; //2»′øéÏÏÂà-
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5; //PC
GPIO_Initure.Mode=GPIO_MODE_ANALOG; //Ä£Äa
GPIO_Initure.Pull=GPIO_NOPULL; //2»′øéÏÏÂà-
HAL_GPIO_Init(GPIOC,&GPIO_Initure);
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1; //PB
GPIO_Initure.Mode=GPIO_MODE_ANALOG; //Ä£Äa
GPIO_Initure.Pull=GPIO_NOPULL; //2»′øéÏÏÂà-
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
}
void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
{
if(hadc==(&ADC1_Handler))
{
HAL_ADC_GPIOInit();
ADC1_Chnnel_Init();
__HAL_RCC_DMA1_CLK_ENABLE();//DMA1ê±Öóê1Äü
HAL_ADCEx_Calibration_Start(&ADC1_Handler,ADC_CALIB_OFFSET,ADC_SINGLE_ENDED); //ADCD£×¼
//__HAL_LINKDMA(hadc,DMA_Handle,ADC1DMA_Handler); //½«DMAóëUSART1áaÏμÆeà′(·¢ËíDMA)
// HAL_DMA_DeInit(&ADC1DMA_Handler);
//Tx DMAÅäÖÃ
ADC1DMA_Handler.Instance=DMA1_Stream0; //êy¾Yá÷Ñ¡Ôñ
//ADC1DMA_Handler.Init.Channel =DMA_CHANNEL_0
ADC1DMA_Handler.Init.Request=DMA_REQUEST_ADC1; //
ADC1DMA_Handler.Init.Direction=DMA_PERIPH_TO_MEMORY; //′æ′¢Æ÷μ½íaéè
ADC1DMA_Handler.Init.PeriphInc=DMA_PINC_DISABLE; //íaéè·ÇÔöá¿Ä£ê½
ADC1DMA_Handler.Init.MemInc=DMA_MINC_ENABLE; //′æ′¢Æ÷Ôöá¿Ä£ê½
ADC1DMA_Handler.Init.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD; //íaéèêy¾Y3¤¶è:16λ
ADC1DMA_Handler.Init.MemDataAlignment=DMA_MDATAALIGN_HALFWORD; //′æ′¢Æ÷êy¾Y3¤¶è:16λ
ADC1DMA_Handler.Init.Mode=DMA_CIRCULAR; //íaéè
ADC1DMA_Handler.Init.Priority=DMA_PRIORITY_HIGH; //ÖDμèóÅÏè¼¶
ADC1DMA_Handler.Init.FIFOMode=DMA_FIFOMODE_DISABLE;
// ADC1DMA_Handler.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL;
//hdma_adc1.Init.Mode = DMA_CIRCULAR;
// hdma_adc1.Init.Priority = DMA_PRIORITY_HIGH;
// hdma_adc1.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
// ADC1DMA_Handler.Init.MemBurst=DMA_MBURST_SINGLE; //′æ′¢Æ÷í»·¢μ¥′Î′«êä
// ADC1DMA_Handler.Init.PeriphBurst=DMA_PBURST_SINGLE; //íaéèí»·¢μ¥′Î′«êä
ADC1DMA_Handler.XferCpltCallback = HAL_DMA_IRQHandler;
HAL_DMA_DeInit(&ADC1DMA_Handler);
HAL_DMA_Init(&ADC1DMA_Handler);
__HAL_LINKDMA(&ADC1_Handler,DMA_Handle,ADC1DMA_Handler); //?DMA?ADC????(??DMA)
HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 2, 1);
HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);
// HAL_ADC_DeInit(&ADC1_Handler);
ADC1_Handler.Init.ScanConvMode=ENABLE;
// HAL_ADC_Init(&ADC1_Handler);
}
}
每次都有个别通道值为0x81ff,有时会改变,导致采样波形失真
|
|