gpt4 book ai didi

gcc - STM32 ADC 连续转换模式不会自动启动转换

转载 作者:行者123 更新时间:2023-12-02 10:41:45 25 4
gpt4 key购买 nike

我正在尝试在简单的连续转换模式下通过 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 */

}

如果我编译此代码并将其上传到微 Controller 中,则analogVal 不会通过UART 传输超过一次。但如果我将 HAL_ADC_Start 函数放在 while 循环中,则 HAL_ADC_PollForConversion 在每个 while 循环中返回的值都将为 HAL_OK,并且会有一个 AnalogVal 报告。

我的问题是,如果我启用了 ContinuousConvMode,为什么每次都要要求 ADC 启动?

最佳答案

我确信 EOcflags设置是问题所在。 hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; 应更改为 hadc1.Init.EOCSelection = EOC_SEQ_CONV;

您当前的选项 ADC_EOC_SINGLE_CONV 的作用类似于启用单次转换,但您需要 EOC_SEQ_CONV 也称为顺序转换。

这与已经讨论过的问题几乎相同here .

关于gcc - STM32 ADC 连续转换模式不会自动启动转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42790936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com