我板子F407VG
在网上找教程,都是怎么配置,我按着差不多配置完了,不知道怎么获取值,怎么得到结果。
下面放上我自己配置的,给大家看看有毛病不。
- <p>ADC_ChannelConfTypeDef sConfig;
- ADC_MultiModeTypeDef multimode;
-
- hadc1.Instance = ADC1;
- hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
- hadc1.Init.Resolution = ADC_RESOLUTION_12B;//精度12bit
- hadc1.Init.ScanConvMode = ENABLE;
- hadc1.Init.ContinuousConvMode = ENABLE;
- hadc1.Init.DiscontinuousConvMode = DISABLE;
- hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
- hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T3_CC1;
- hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;//数据右对齐
- hadc1.Init.NbrOfConversion = 8;//顺序转换8个通道的ADC值
- hadc1.Init.DMAContinuousRequests = ENABLE;
- hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
- if (HAL_ADC_Init(&hadc1) != HAL_OK)
- {
- _Error_Handler(__FILE__, __LINE__);
- }
-
- multimode.Mode = ADC_MODE_INDEPENDENT;
- if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
- {
- Error_Handler();
- }
- </p><p>
- </p><p>sConfig.Channel = ADC_CHANNEL_0;
- sConfig.Rank = 1;
- sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
- if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
- { _Error_Handler(__FILE__, __LINE__);}
- sConfig.Channel = ADC_CHANNEL_1;
- sConfig.Rank = 2;
- if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
- { _Error_Handler(__FILE__, __LINE__);}
- sConfig.Channel = ADC_CHANNEL_2;
- sConfig.Rank = 3;
- if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
- { _Error_Handler(__FILE__, __LINE__);}
- sConfig.Channel = ADC_CHANNEL_3;
- sConfig.Rank = 4;
- if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
- { _Error_Handler(__FILE__, __LINE__);}
- sConfig.Channel = ADC_CHANNEL_4;
- sConfig.Rank = 5;
- if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
- { _Error_Handler(__FILE__, __LINE__);}
- sConfig.Channel = ADC_CHANNEL_5;
- sConfig.Rank = 6;
- if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
- { _Error_Handler(__FILE__, __LINE__);}
- sConfig.Channel = ADC_CHANNEL_6;
- sConfig.Rank = 7;
- if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
- { _Error_Handler(__FILE__, __LINE__);}
- sConfig.Channel = ADC_CHANNEL_7;
- sConfig.Rank = 8;
- if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
- { _Error_Handler(__FILE__, __LINE__);}</p><p>
- </p><p>下面是GPIO的配置我没放。</p>
复制代码
|
评分
查看全部评分
评分
查看全部评分
哦,那个函数我看到了,也用了,但是返回来的是0。。。。
并且不知道多路的怎么获取,难道定义个数组?然后传入数组名和长度?我试了,也是0.
那个我看了,没有帮助啊,那个函数我用了,返回0.请看楼上我的描述。
ST官方例程一定没问题的,楼主应该检查一下自己的硬件了。
就是这样用啊,定义一个 Adcc_Val[ADCC_Channel_Max] 的数组,你在配置ADC的时候用了多少个RANK,这些AD值就会循环地写入这个数组,还有一个要注意的是,你在初始化配置的时候用的是TIM3 CH1的触发,你还得看看TIM3 CH1有没有工作,我建议你改成 hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
评分
查看全部评分
单通道的啊,问题是多通道就有问题了
多通道只不过设 置一个二维数组供DMA存储数据,并设定ADC需要转换通道的参数、扫描方式即可。