STM32 ADC --- 任意单通道采样

STM32 ADC --- 单通道采样

文章目录

需求:有多个通道需要进行ADC采样,实现每次采样只采样一个通道,且可以随时采样不同通道的功能

cubeMX配置

这里我们想通过10通道和11通道分别进行ADC采样。需要注意的是:当ADC规则转换中配置的转换数大于1时,cubeMX会自动将扫描转换模式使能 。但这里我们实际需要扫描转换模式为关闭,这里可以等下在代码中修改。还有个需要注意的地方是结束转换的选择:单个通道完成转换时即触发EOC标志位

代码修改:

为了方便后续继续使用cubeMX生成代码不影响改动,我们采用重新初始化ADC的方式来实现需求:

c 复制代码
void adc1_init(void) {
  /* 配置ADC引脚 */
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  
  /* 重新初始化ADC1 */
  HAL_ADC_DeInit(&hadc1);
  hadc1.Instance = ADC1;
  hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
  hadc1.Init.Resolution = ADC_RESOLUTION_12B;
  hadc1.Init.ScanConvMode = DISABLE; //ENABLE;
  hadc1.Init.ContinuousConvMode = DISABLE;
  hadc1.Init.DiscontinuousConvMode = DISABLE;
  hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  hadc1.Init.NbrOfConversion = 1;
  hadc1.Init.DMAContinuousRequests = DISABLE;
  hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  if (HAL_ADC_Init(&hadc1) != HAL_OK){};
  
}

uint16_t adc_sample(ADC_HandleTypeDef *hadc, uint32_t adc_channel) {
  ADC_ChannelConfTypeDef sConfig = {0};
  sConfig.Channel = adc_channel;
  sConfig.Rank = 1;
  sConfig.SamplingTime = ADC_SAMPLETIME_56CYCLES;
  HAL_ADC_ConfigChannel(hadc, &sConfig);
  
  HAL_ADC_Start(hadc);
  HAL_ADC_PollForConversion(hadc, 100); //等待转换完成
  uint16_t value = HAL_ADC_GetValue(hadc);
  return value;
}

通过adc1_init()函数将ADC1重新初始化

  • 将扫描转换模式修改为DISABLE
  • 将转换通道数设置为1
  • 后续还有其它引脚通道需要转换时在配置ADC引脚处添加相关的初始化即可

后续便可以通过adc_sample()函数根据通道号进行ADC采样了,这里的采样方式为轮询等待模式。

应用

相关推荐
LCG元8 小时前
固件加密保护:STM32F2 Flash读写保护,AES软件加密实现
stm32·嵌入式硬件·mongodb
F137298015579 小时前
220V降5V,30MA封装SOP-8,WD5201应用于小家电消费类线性稳压器
stm32·单片机·嵌入式硬件·51单片机
泡泡糖的中文规格书10 小时前
STM32G030F6P6中文规格书开放获取(完整中英对照/ARM Cortex-M0+ MCU)
stm32·单片机·嵌入式硬件·pcb设计·硬件设计·中文数据手册
学嵌入式的小杨同学17 小时前
STM32 进阶封神之路(十一):串口通信底层原理全解析 ——UART/USART 区别 + 电平标准 + 协议规范(面试重点)
stm32·单片机·嵌入式硬件·mcu·硬件架构·硬件工程·智能硬件
济61718 小时前
STM32 I2C 总线通信实战|从原理到 OLED 屏数据收发(超详细)---STM32 HAL库专栏
stm32·嵌入式·stm32hal库编程
Hello_Embed18 小时前
LVGL 入门(四):大小坐标与盒子模型
前端·笔记·stm32·单片机·嵌入式
風清掦18 小时前
【江科大STM32学习笔记-08】DMA直接存储器存取
笔记·stm32·单片机·嵌入式硬件·学习
17(无规则自律)18 小时前
嵌入式 Linux 启动:设备树的加载、传递和解析全流程分析
linux·stm32·嵌入式硬件·unix
爱倒腾的老唐18 小时前
05、STM32 开发基础知识
stm32·单片机·嵌入式硬件
香水5只用六神18 小时前
【RTOS快速入门】05_动态_静态创建任务(2)
c语言·stm32·单片机·嵌入式硬件·freertos·rtos·嵌入式软件