项目上要用到STM32L071 ,很简单的采集4个通道的ADC值。网上找了一下什么IT模式,DMA模式.....太多了,太麻烦。我们的应用很简单,就是每隔1秒采集一下ADC IN0,ADC IN1, 内部参考电压, 内部温度传感器4个通道。
首先是ADC初始化,用到了Vrefint,和内部温度传感器。
- /* ADC init function */
- void MX_ADC_Init(void)
- {
- ADC_ChannelConfTypeDef sConfig;
- /**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
- */
- hadc.Instance = ADC1;
- hadc.Init.OversamplingMode = DISABLE;
- hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
- hadc.Init.Resolution = ADC_RESOLUTION_12B;
- hadc.Init.SamplingTime = ADC_SAMPLETIME_160CYCLES_5;
- hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD;
- hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
- hadc.Init.ContinuousConvMode = DISABLE;
- hadc.Init.DiscontinuousConvMode = ENABLE;
- hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
- hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;
- hadc.Init.DMAContinuousRequests = DISABLE;
- hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
- hadc.Init.Overrun = ADC_OVR_DATA_PRESERVED;
- hadc.Init.LowPowerAutoWait = DISABLE;
- hadc.Init.LowPowerFrequencyMode = DISABLE;
- hadc.Init.LowPowerAutoPowerOff = DISABLE;
- if (HAL_ADC_Init(&hadc) != HAL_OK)
- {
- _Error_Handler(__FILE__, __LINE__);
- }
- /* 校正ADC */
- if(HAL_ADCEx_Calibration_Start(&hadc, ADC_SINGLE_ENDED) != HAL_OK)
- {
- _Error_Handler(__FILE__, __LINE__);
- }
-
- /**Configure for the selected ADC regular channel 0 to be converted.*/
- sConfig.Channel = ADC_CHANNEL_0;
- sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
- if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
- {
- _Error_Handler(__FILE__, __LINE__);
- }
- /**Configure for the selected ADC regular channel 1 to be converted.*/
- sConfig.Channel = ADC_CHANNEL_1;
- if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
- {
- _Error_Handler(__FILE__, __LINE__);
- }
-
- /**Configure for the selected ADC regular channel 17 to be converted.*/
- sConfig.Channel = ADC_CHANNEL_VREFINT;
- if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
- {
- _Error_Handler(__FILE__, __LINE__);
- }
-
- /**Configure for the selected ADC regular channel 18 to be converted.*/
- sConfig.Channel = ADC_CHANNEL_TEMPSENSOR;
- if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
- {
- _Error_Handler(__FILE__, __LINE__);
- }
-
- HAL_ADCEx_EnableVREFINT();
- HAL_ADCEx_EnableVREFINTTempSensor();
- }
复制代码
ADC采样函数
|
ST 给的很多历程太复杂,其实大家的应用都很简单。
楼主这个怎么报错呀