STM32 多通道采集(扫描和间断模式)

1.扫描转换模式

Continuous Conversion Mode(连续转换模式)

启用:ADC在完成一次转换(或一次扫描序列)后,自动开始下一次转换,无需再次调用 HAL_ADC_Start。

禁用:ADC在完成一次转换(或一次扫描序列)后停止,需手动调用 HAL_ADC_Start 触发下一次转换。

  while (1)
  {
    /* USER CODE END WHILE */

    /* 启动ADC扫描转换 */
    HAL_ADC_Start(&hadc1);

    /* 等待通道1(ADC1_IN1)转换完成 */
    if (HAL_ADC_PollForConversion(&hadc1, 50) == HAL_OK)
    {
      adc1_CH1 = HAL_ADC_GetValue(&hadc1);
    }

    /* 等待通道2(ADC1_IN2)转换完成 */
    if (HAL_ADC_PollForConversion(&hadc1, 50) == HAL_OK)
    {
      adc1_CH2 = HAL_ADC_GetValue(&hadc1);
    }
    
    /* 等待温度传感器通道转换完成 */
    if (HAL_ADC_PollForConversion(&hadc1, 50) == HAL_OK)
    {
      adc1_TempSensor = HAL_ADC_GetValue(&hadc1);
    }
    
    /* 停止ADC */
    HAL_ADC_Stop(&hadc1);

    /* 打印三个通道的ADC值 */
    sprintf(adc_str, "CH1:%d,CH2:%d,Temp:%d\n",adc1_CH1,adc1_CH2,adc1_TempSensor);
    SEGGER_RTT_printf(0,"%s",adc_str);    

    /* 延时1秒 */
    Delay_ms(500);
    /* USER CODE BEGIN 3 */
  }

2.单次模式+间断模式(不使用DMA)

【经验分享】STM32使用HAL库的ADC多通道数据采集(DMA+非DMA方式)+ 读取内部传感器温度 - STM32团队 ST意法半导体中文论坛

主函数打印数据


char adc_str[20];
float tmp_data;
uint16_t adc;
    
/* USER CODE END WHILE */
for(uint8_t i=0;i<3;i++)
{
  HAL_ADC_Start(&hadc1);
  HAL_ADC_PollForConversion(&hadc1,50);
  adc = HAL_ADC_GetValue(&hadc1);
  sprintf((char*)adc_str,"%d ",adc);
  SEGGER_RTT_printf(0, "%s", adc_str);
}

HAL_ADC_Stop(&hadc1);
sprintf((char*)adc_str,"\n");
SEGGER_RTT_printf(0, "%s", adc_str);
Delay_ms(1000);

效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值