我正在尝试在STM32F411RE上配置ADC,采用简单连续转换模式。我使用CubeMX基于HAL驱动程序生成代码,并且这是一些初始化ADC的生成代码:
/* ADC1 init function */
void MX_ADC1_Init(void)
{
/**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_DIV8;
hadc1.Init.Resolution = ADC_RESOLUTION_8B;
hadc1.Init.ScanConvMode = DISABLE;
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 = 1;
hadc1.Init.DMAContinuousRequests = DISABLE;
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
if (HAL_ADC_Init(&hadc1) != HAL_OK)
{
Error_Handler();
}
}
以下是主函数:
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();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_ADC1_Init();
MX_USART2_UART_Init();
/* USER CODE BEGIN 2 */
uint8_t analogVal;
uint8_t string[] = "Poll failed\n";
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
HAL_Delay(1000);
if( HAL_ADC_Start(&hadc1) == HAL_OK) HAL_UART_Transmit(&huart2,(uint8_t*)"STRT OK\n",8,100);
else HAL_UART_Transmit(&huart2,(uint8_t *)HAL_ADC_Start(&hadc1),1,100);
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(HAL_ADC_PollForConversion(&hadc1,1) == HAL_OK){
analogVal = HAL_ADC_GetValue(&hadc1);
HAL_UART_Transmit(&huart2,&analogVal,sizeof(analogVal),100);
}
else{
HAL_UART_Transmit(&huart2,string,sizeof(string)-1,100);
}
HAL_Delay(100);
}
/* USER CODE END 3 */
}
如果我将这段代码编译并上传到微控制器中,只会一次传输analogVal。但是如果我将HAL_ADC_Start函数放在while循环内部,那么每个循环周期中HAL_ADC_PollForConversion返回的值都将是HAL_OK,并且会有一个analogVal要报告。
我的问题是,如果我已经启用了ContinuousConvMode,为什么每次都要请求ADC开始?