当前位置: 首页 > article >正文

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

STM32 ADC — 单通道采样

文章目录

  • STM32 ADC --- 单通道采样
    • cubeMX配置
    • 代码修改:
    • 应用

  • 使用cubeMX生成HAL工程

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

cubeMX配置

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

代码修改:

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

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采样了,这里的采样方式为轮询等待模式。

应用

在这里插入图片描述


http://www.kler.cn/a/396963.html

相关文章:

  • 【优选算法 — 滑动窗口】水果成篮 找到字符串中所有字母异位词
  • HarmonyOS 开发环境搭建
  • [Python学习日记-67] 封装
  • 容器安装gitlab
  • 图像处理技术椒盐噪声
  • 华为云前台展示公网访问需要购买EIP,EIP流量走向
  • 社交媒体的隐私新标准:Facebook的数据保护策略
  • NDNF-RNASeq
  • Prometheus 和 Grafana 以进行服务器监控
  • 【微软报告:多模态基础模型】(1)从专家到通用助手
  • 【论文复现】智慧医疗:纹理特征VS卷积特征
  • SQL笔试题笔记(1)
  • 深度学习工具和框架详细指南:PyTorch、TensorFlow、Keras
  • 深入解析生成对抗网络(GAN)
  • Vue模块化开发的理解
  • layui 表格点击编辑感觉很好用,实现方法如下
  • ZeroSSL HTTPS SSL证书ACMESSL申请3个月证书
  • unity3d————Resources卸载资源
  • 如何构建安全可靠的 HarmonyOS 应用
  • 【软件工程】一篇入门UML建模图(类图)
  • C++11标准模板(STL)- 常用数学函数 - 宏常量 - 求值得到float类型的安静NaN(NAN)
  • 硬件---4电感---基本概念与特性
  • Aria2-CVE-2023-39141漏洞分析
  • 使用 Caffeine 缓存并在业务方法上通过注解实现每3到5秒更新缓存
  • Python学习笔记(2)正则表达式
  • 《Java核心技术 卷I》用户界面AWT事件继承层次