|
本帖最后由 feiante 于 2015-2-3 09:49 编辑 有没有人用stm32cube的HAL 库做过多路ADC的DMA采样试验,今天打算试试3路ADC的DMA采样,使用PA0,PA1,PA2这3个脚,感觉有问题,只能PA0采样到,PA1,PA2不能采样,除了3V就是4095.官方自带的例程只有1个通道的。原来F0的是成功的,使用了2路。谁做过F4的并成功的,参考一下配置 |
新建文件夹.rar
下载5.3 MB, 下载次数: 89, 下载积分: ST金币 -1
这个是工程文件
微信公众号
手机版
“。。。。。。。”是什么意思呢?不懂
#define AdcChannelNum 3
#define AdcDmaLengh (AdcFilterNum * AdcChannelNum)
uint32_t ADC_ConvertedValue[AdcFilterNum][AdcChannelNum];
/* ADC1 init function */
static void MX_ADC1_Init(void)
{
ADC_ChannelConfTypeDef sConfig;
ADC_InjectionConfTypeDef sConfigInjected;
/**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
*/
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.ScanConvMode = ENABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 3;
hadc1.Init.DMAContinuousRequests = ENABLE;
hadc1.Init.EOCSelection = ADC_EOC_SEQ_CONV;
if (HAL_ADC_Init(&hadc1) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
/**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
*/
sConfig.Channel = ADC_CHANNEL_10;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_480CYCLES;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
/**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
*/
sConfig.Channel = ADC_CHANNEL_15;
sConfig.Rank = 2;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
/**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
*/
sConfig.Channel = ADC_CHANNEL_VREFINT;
sConfig.Rank = 3;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
}
/******************************************************************************************************
* 函 数 名: Start_AdConvert
* 功能说明: 启动AD转换
* 采用DMA连续转换模式(多通道扫描)
* 形 参:无
* 返 回 值: 无
********************************************************************************************************/
void Start_AdConvert(void)
{
HAL_ADC_Start_DMA(&hadc1, (ADC_ConvertedValue[0]), AdcDmaLengh);
}
开启转换后直接从ADC_ConvertedValue数组中取值
评分
查看全部评分
DMA方式不是直接写数组里了吗?对HAL_ADC_STAR_DMA不太理解
这相当于一个启动命令