请教大侠:
小弟现在使用G070的12位ADC进行12个通道采集
现在方案是
每次进行通道配置,启动采集一个通道,然后循环12个通道
下面是CUBE中的配置

下面是自动生成的代码
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
hadc1.Init.Resolu
tion = ADC_RESOLUTION_12B;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.ScanConvMode = ADC_SCAN_SEQ_FIXED;
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
hadc1.Init.LowPowerAutoWait = DISABLE;
hadc1.Init.LowPowerAutoPowerOff = DISABLE;
hadc1.Init.ContinuousConvMode = DISABLE;
hadc1.Init.NbrOfConversion = 12;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.DMAContinuousRequests = DISABLE;
hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_79CYCLES_5;
hadc1.Init.OversamplingMode = DISABLE;
hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH;
if (HAL_ADC_Init( hadc1) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_0;
sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
if (HAL_ADC_ConfigChannel( hadc1, sConfig) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_1;
if (HAL_ADC_ConfigChannel( hadc1, sConfig) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_2;
if (HAL_ADC_ConfigChannel( hadc1, sConfig) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_3;
if (HAL_ADC_ConfigChannel( hadc1, sConfig) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_4;
if (HAL_ADC_ConfigChannel( hadc1, sConfig) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_5;
if (HAL_ADC_ConfigChannel( hadc1, sConfig) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_6;
if (HAL_ADC_ConfigChannel( hadc1, sConfig) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_7;
if (HAL_ADC_ConfigChannel( hadc1, sConfig) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_8;
if (HAL_ADC_ConfigChannel( hadc1, sConfig) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_9;
if (HAL_ADC_ConfigChannel( hadc1, sConfig) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_10;
if (HAL_ADC_ConfigChannel( hadc1, sConfig) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_11;
if (HAL_ADC_ConfigChannel( hadc1, sConfig) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN ADC1_Init 2 */
/* Run ADC calibration */
if (HAL_ADCEx_Calibration_Start( hadc1) != HAL_OK)
{
Error_Handler();
}
/* USER CODE END ADC1_Init 2 */
}
连续扫描12个通道,我用的是下面的代码
/******************************************************************************
* @功能简介 : 单次采样12个通道一个函数
* @参 数 : 无
* @返 回 值 : 无
*******************************************************************************/
void ADC_SCAN_SAMPLE(void)
{
uint8_t i;
uint8_t chn=0;
uint16_t adc_result = 0x0000;
uint8_t adc_print[24];
/* 启动转换 */
HAL_ADC_Start( hadc1);
do
{
/* 等待转换完成 */
if (HAL_ADC_PollForConversion( hadc1, ADC_TIMEOUT) != HAL_TIMEOUT)
{
/* 获取通道转换数据 */
ADC_Val_Buf[chn] = HAL_ADC_GetValue( hadc1);
}
chn++;
}while(chn==12);
RS485_Transmit(startB,3);
for(i=0;i<12;i++)
{
adc_print[i*2] = (uint8_t)(ADC_Val_Buf
>>8);
adc_print[i*2+1] = (uint8_t)(ADC_Val_Buf);
}
RS485_Transmit(adc_print,24);
}
实际采集时,除了通道0有数据,其他通道返回全是0,请教下这是哪里配置问题吗?
我需要对通道0到通道11进行采集,求教!!!