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

STM32CubeIDE(ADC)

学习链接:【HAL库详解】STM32 ADC HAL库使用_哔哩哔哩_bilibili

目录

一、概念

1、ADC介绍

2、ADC主要特征

二、ADC模式

1、查询模式

1.1 单通道采集软件配置

1.2 查询模式步奏

1.3 单通道采集主要代码

2、多通道采集

2.1 软件配置

2.2 主要代码

一、概念

1、ADC介绍

12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部
信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。 ADC的结果可以左对齐或右
对齐方式存储在16位数据寄存器中。

2、ADC主要特征

12位分辨率
● 转换结束、注入转换结束和发生模拟看门狗事件时产生中断
● 单次和连续转换模式
● 从通道0到通道n的自动扫描模式
● 自校准
● 带内嵌数据一致性的数据对齐
● 采样间隔可以按通道分别编程
● 规则转换和注入转换均有外部触发选项
● 间断模式
● 双重模式(带2个或以上ADC的器件)
● ADC转换时间:
─ STM32F103xx增强型产品:时钟为56MHz时为1μs(时钟为72MHz为1.17μs)
● ADC供电要求: 2.4V到3.6V
● ADC输入范围: VREF- ≤ VIN ≤ VREF+
● 规则通道转换期间有DMA请求产生。

二、ADC模式

1、查询模式

1.1 单通道采集软件配置

1.1.1 只需选择接口就行

1.1.2 打开串口用于打印数据

1.2 查询模式步奏

1.3 单通道采集主要代码

#include <stdio.h>
#include <string.h>

//ADC采集值获取
int16_t get_adc_value(void)
{
	HAL_ADC_Start(&hadc1);
	HAL_ADC_PollForConversion(&hadc1, 100);//阻塞判断是否转换完成
	if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1),HAL_ADC_STATE_REG_EOC))
	{
		return HAL_ADC_GetValue(&hadc1);
	}
	return -1;
}


//main函数主循环代码如下
/* USER CODE BEGIN WHILE */
 int16_t value=0;
 char buff[30];
 while (1)
 {
  value=get_adc_value();
  if(value==-1)
  {
	  HAL_UART_Transmit(&huart2, (uint8_t*)"GetADCValue Faild !! \r\n", 25, 50);
  }
  else
  {
	  sprintf(buff, "value:%d \r\n",value);
	  HAL_UART_Transmit(&huart2, (uint8_t*)buff, strlen(buff), 50);
  }
  HAL_Delay(1000);
   /* USER CODE END WHILE */

   /* USER CODE BEGIN 3 */
 }

2、多通道采集

2.1 软件配置

2.2 主要代码

  while (1)
  {
	  get_adc_value(DMARes);

	  sprintf(buff, "value:%d,%d,%d \r\n",DMARes[0],DMARes[1],DMARes[2]);
	  HAL_UART_Transmit(&huart2, (uint8_t*)buff, strlen(buff), 50);
	  HAL_Delay(500);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }



void get_adc_value(int* DMARes)
{
	HAL_ADC_Start(&hadc1);

	HAL_ADC_PollForConversion(&hadc1, 100);//阻塞判断是否转换完成
	DMARes[0]= HAL_ADC_GetValue(&hadc1);

	HAL_ADC_PollForConversion(&hadc1, 100);//阻塞判断是否转换完成
	DMARes[1]= HAL_ADC_GetValue(&hadc1);

	HAL_ADC_PollForConversion(&hadc1, 100);//阻塞判断是否转换完成
	DMARes[2]= HAL_ADC_GetValue(&hadc1);

	HAL_ADC_Stop(&hadc1);
}


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

相关文章:

  • uni-app表格带分页,后端处理过每页显示多少条
  • 创建型设计模式与面向接口编程
  • 使用 Vision 插件让 GitHub Copilot 识图问答
  • css中的变量使用
  • 四:HTTP的诞生:它解决了哪些网络通信难题?
  • 基于RK3568J多网口电力可信物联网关解决方案
  • C++面试,说明const和#define的特点和区别
  • 基于单片机的智能饮水机控制系统(论文+源码)
  • JAVA进阶之路JVM-2:类加载机制,类的生命周期,类加载过程,类加载时机,类加载器,双亲委派模型,对象创建过程
  • LuatOS-SOC接口文档(air780E)--rtc - 实时时钟
  • uniapp微信小程序中阻止事件冒泡
  • 如何根据接口文档,轻松快速的模拟接口服务?
  • Java小游戏 王者荣耀
  • 安卓横竖屏切换后,应用只展示半屏问题 AndroidAutoSize
  • 图像重定向Image Retarget
  • Gradle 翻译说明
  • Elsevier的latex模板
  • C#开发的OpenRA游戏之属性SelectionDecorations(11)
  • 蓝桥杯每日一题2023.11.27
  • 力扣:239. 滑动窗口最大值
  • 随时随地,打开浏览器即可体验的在线PS编辑器
  • CVPR 2023 精选论文学习笔记:UniSim A Neural Closed-Loop Sensor Simulator
  • 【读论文】【泛读】S-NERF: NEURAL RADIANCE FIELDS FOR STREET VIEWS
  • 聊聊Go语言的注释
  • 充电桩一些标准和协议介绍
  • asp.net core构造函数注入