本帖最后由 DHZFSYJ 于 2020-7-8 09:59 编辑
使用单通道ADC DMA采集3v电压,50次平均之后约为2.7v,没有找到测量不准确的原因。配置界面如下图:
[img]
[/img]
- /*
- * [url=home.php?mod=space&uid=247401]@brief[/url] The application entry point.
- * @retval int
- */
- int main(void)
- {
- /* USER CODE BEGIN 1 */
- /* USER CODE END 1 */
-
- /* MCU Configuration--------------------------------------------------------*/
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- HAL_Init();
- /* USER CODE BEGIN Init */
- /* USER CODE END Init */
- /* Configure the system clock */
- SystemClock_Config();
- /* USER CODE BEGIN SysInit */
- /* USER CODE END SysInit */
- /* Initialize all configured peripherals */
- MX_GPIO_Init();
- MX_DMA_Init();
- MX_ADC1_Init();
- MX_USART1_UART_Init();
- /* USER CODE BEGIN 2 */
- HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_ConvertedValue, 50);
- /* USER CODE END 2 */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
-
- if( adc_dma_ok ==1 )
- {
- adc_dma_ok = 0;
- ADC_Value = 0;
- for(i = 0; i < 50; i++)
- {
- ADC_Value += ADC_ConvertedValue;
- }
- ADC_Value = ADC_Value / 50;
- ADC_Volt = ADC_Value * 3.3f / 4096;
- //printf("ADC Value %d\r\n",ADC_Value);
- printf("vol %f\r\n", ADC_Volt);
- printf("------------------------\r\n");
- HAL_Delay(5000);
- HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_ConvertedValue, 50);
- }
- }
- /* USER CODE END 3 */
- }
中断回调函数
- void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle)
- {
- HAL_ADC_Stop(&hadc1);
- adc_dma_ok = 1;
- i++;
- }
|