打印
[STM32WB]

【STM32WB09测评】学习记录五-ADC调试

[复制链接]
20|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ADC是指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。简单来说就是将外部检测的电压信号通过内部ADC检测为数字信号。
这里我是用的是ADC1,引脚使用PB5引脚,cube软件配置过程如下:

基本的软件编写思路:
首先开启PB口时钟和ADC1时钟,设置PB5为模拟输入模式,否则AD不能正常读数
程序开启之前复位ADC1,同时设置ADC1分频因子和ADC的位数等相关信息。
初始化ADC1参数,配置规则通道参数:
开启软件转换:
等待转换完成,读取ADC值
其中初始化部分由CUBE软件自动生成,这里就不做过多的介绍,简单的介绍一下,在主程序中如何编写;
ADC初始化部分如下:
  /** Common config
  */
  hadc1.Instance = ADC1;
  hadc1.Init.ConversionType = ADC_CONVERSION_WITH_DS;
  hadc1.Init.SequenceLength = 1;
  hadc1.Init.SamplingMode = ADC_SAMPLING_AT_START;
  hadc1.Init.SampleRate = ADC_SAMPLE_RATE_16;
  hadc1.Init.InvertOutputMode = ADC_DATA_INVERT_NONE;
  hadc1.Init.Overrun = ADC_NEW_DATA_IS_LOST;
  hadc1.Init.ContinuousConvMode = DISABLE;
  hadc1.Init.DownSamplerConfig.DataWidth = ADC_DS_DATA_WIDTH_12_BIT;
  hadc1.Init.DownSamplerConfig.DataRatio = ADC_DS_RATIO_1;
  if (HAL_ADC_Init(&hadc1) != HAL_OK)
  {
    Error_Handler();
  }

  /** Configure Regular Channel
  */
  ConfigChannel.Channel = ADC_CHANNEL_VINP3;
  ConfigChannel.Rank = ADC_RANK_1;
  ConfigChannel.VoltRange = ADC_VIN_RANGE_1V2;
  ConfigChannel.CalibrationPoint.Number = ADC_CALIB_NONE;
  ConfigChannel.CalibrationPoint.Gain = 0x00;
  ConfigChannel.CalibrationPoint.Offset = 0x00;
  if (HAL_ADC_ConfigChannel(&hadc1, &ConfigChannel) != HAL_OK)
  {
    Error_Handler();
  }

主程序代码如下:
    if (HAL_ADC_PollForConversion(&hadc1, 10) != HAL_OK)
    {
      Error_Handler();
    }
                uiADCVALUE = HAL_ADC_GetValue(&hadc1);
                uiADCVOLTAGE = __HAL_ADC_CALC_DIFF_DATA_TO_VOLTAGE(3300, uiADCVALUE, ADC_RESOLUTION_12B);
//                HAL_UART_Transmit(&huart2, (uint8_t *)&uhADCxConvertedData, 1, 0xFFFF);
          printf("\r\nADC CH1 uiADCVALUE: = %4d  \t\r\n", uiADCVALUE);               
                          printf("\r\nADC CH1 uiADCVOLTAGE: = %4d  \t\r\n", uiADCVOLTAGE);       
                HAL_Delay(500) ;
实物测试图片如下:


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

90

帖子

0

粉丝