我一直在使用结合了CUBE MX的STM32 IDE。
使用HAL代码,我可以使用一个单独的ADC在三个引脚上读取每个引脚 销。 我同时启动了所有ADC,然后轮询完成。 我认为这些ADC读取实际上应该是同时的(即 他们都在非常相似的时间阅读)?
下面的代码片段。 使用NUCLEO-STM32 F446RE btw。
MX_ADC1_Init();
MX_ADC2_Init();
MX_ADC3_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
static int flip,sysclk=0,old_sysclk=0,adc1,adc2,adc3;//adc3_0,adc3_1,adc3_2, adc_pstat0,
int adc_pstat1, adc_pstat2, adc_pstat3;
flip ^= 1;
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0/*|GPIO_PIN_2|GPIO_PIN_6*/, flip);
HAL_ADC_Start(&hadc3);
HAL_ADC_Start(&hadc2);
HAL_ADC_Start(&hadc1);
adc_pstat1 = HAL_ADC_PollForConversion(&hadc1, 10);
adc_pstat3 = HAL_ADC_PollForConversion(&hadc3, 10); // should already be done!
adc_pstat2 = HAL_ADC_PollForConversion(&hadc2, 10); // should already be done!
adc3 = HAL_ADC_GetValue(&hadc3);
adc2 = HAL_ADC_GetValue(&hadc2);
adc1 = HAL_ADC_GetValue(&hadc1);
if (adc_pstat2 ||adc_pstat3)
asm("\t nop");
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
sysclk = HAL_GetTick();
if ( (sysclk - 1000) > old_sysclk ){
//printf("nucleo F446 0x%X adc3_0 0x%X adc3_1 0x%X adc3_2 0x%X\n",sysclk,adc3_0,adc3_1,adc3_2);
printf("|->nucleo F446 sysclk=0x%X adc1=0x%X adc2=0x%X adc3=0x%X\n",sysclk,adc1,adc2,adc3);
old_sysclk = sysclk;
}
}
/* USER CODE END 3 */
}