c - stm32同时adc读取

标签 c embedded stm32 adc simultaneous

我一直在使用包含 CUBE MX 的 STM32 IDE。

使用 HAL 代码,我可以在三个引脚上读取每个引脚使用单独的 ADC 别针。 我同时启动了所有 ADC,然后轮询是否完成。 我的想法是正确的,这些 ADC 读取实际上应该是同时进行的(即 他们都在非常相似的时间读入)?

下面的代码片段。 顺便说一句,使用 NUCLEO-STM32 F446RE。

  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 */
    }

最佳答案

您的代码不会同时读取它,因为您没有同时启动 ADC。

您需要对所有这些使用相同的外部触发器,或者在双倍或三倍模式下使用 ADC。

关于c - stm32同时adc读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58694124/

相关文章:

c - 对于wcscmp()和wcscoll()来说是宽字符比较。什么是差异?

C(嵌入式): Giving source file unique ID's

linux - 为什么 Qt 无法在我的新硬件上初始化显示

c++ - 如何仅使用 Linux 终端刷入 stm32?

c - 使用 "syscall"而不是直接调用函数的原因是什么?

c - 指针声明中的错误数据类型

C - 使用 sscanf 读取算术运算符

sqlite - 为什么 SQLite 提供代码的合并?

c - 为 FSMC LCD 编写非阻塞代码

c - 从不兼容的指针类型传递参数 3( 'HAL_I2C_Master_Transmit')的类型 [-Win兼容指针类型]