zoukankan      html  css  js  c++  java
  • 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值装入了这个数组中,再把它们读出来即可。

  • 相关阅读:
    用mysql dump 导入与导出的方法
    HPQC HP Quality Center windows 服务
    apache 提示You don't have permission to access /test.php on this server.怎样解决
    【转】系统去掉 Android 4.4.2 的StatusBar和NavigationBar
    【转】Android:No implementation found for native
    【转】对H264进行RTP封包原理
    【转】android SystemUI 流程分析
    【转】Android 4.0 Launcher2源码分析——启动过程分析
    【转】修改Android解锁界面
    【转】Tomcat 9.0安装配置
  • 原文地址:https://www.cnblogs.com/zjx123/p/11990955.html
Copyright © 2011-2022 走看看