• STM32对HAL库的ADC(多通道DMA)


    多通道的adc就是检测多个通道的电压值,用dma来检测。

    cubemx中设置如下。

     

     Number of conversion 的个数就是该adc中要使用的通道数。在下面的rank中设置通道的采样时间和通道名字。

     使能adc的中断。

     在DMA设置中设置模式为循环模式,不然不设置的话只能用一次DMA。数据宽度为一个字节,不然后面开启dma的adc时要用两倍。

    看程序。

    先上代码。

    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();
    
      /* USER CODE BEGIN Init */
    
      /* USER CODE END Init */
    
      /* Configure the system clock */
      SystemClock_Config();
    
      /* USER CODE BEGIN SysInit */
    
      /* USER CODE END SysInit */
    
      /* Initialize all configured peripherals */
      MX_GPIO_Init();
      MX_DMA_Init();
      MX_ADC1_Init();
      MX_USART1_UART_Init();
      /* USER CODE BEGIN 2 */
     uint32_t AD_DMA[2];
     float a, b;
     HAL_ADCEx_Calibration_Start(&hadc1);
      /* USER CODE END 2 */
    
      /* Infinite loop */
      /* USER CODE BEGIN WHILE */
      while (1)
      {
            HAL_ADC_Start_DMA(&hadc1, AD_DMA, 2);
            a = (float)AD_DMA[0];
            b = (float)AD_DMA[1];
        /* USER CODE END WHILE */
    
        /* USER CODE BEGIN 3 */
            printf("PA2电压为 %.2fV
    ", (a * 3.3) / 4096); // a除以4096 * 3.3 会更好理解
            printf("PA3电压为 %.2fV
    ", (b * 3.3) / 4096);
            printf("
    ");
            HAL_Delay(1000);
      }
    View Code

    因为HAL库中,DMA开启ADC是通过这个函数定义的,HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length)。看参数,即先定义一个装载从DMA读取的ad值,多少通道就设几个,不然读完所用通道之后还有多的地方装载数据,会造成数据混乱不正确不匹配。

     uint32_t AD_DMA[2];

    接着要进行一个adc校准。

     HAL_ADCEx_Calibration_Start(&hadc1);

    函数作用为进行adc的自校准,消除每个电容上的误差,用在adc_start之前。

    接着我们开启dma的adc模式。

      HAL_ADC_Start_DMA(&hadc1, AD_DMA, 2);
    

      最后一个参数意思是装载的字节长度,一般是多少通道就设多少,在cubemx设置了word,如果是half word,则为两倍。

    最后就是利用dma把adc值装入了这个数组中,再把它们读出来即可。

  • 相关阅读:
    大屏设计-大数据综合展示可视化平台
    大数据可视化大屏设计经验,教给你!
    数据可视化表格-设计经验分享!
    大数据可视化大屏图表设计经验,教给你
    数据可视化美学形式与功能需要齐头并进
    大屏可视化解决方案
    node-sass 安装失败 win32-x64-57_binding.node
    node版本如何升级
    ES6课程---8、模板字符串
    ES6课程---7、箭头函数
  • 原文地址:https://www.cnblogs.com/zjx123/p/11990955.html
Copyright © 2020-2023  润新知