STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库)

这篇具有很好参考价值的文章主要介绍了STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STM32 CubeMX ADC采集(HAL库)



ADC介绍

12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部
信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右
对齐方式存储在16位数据寄存器中。
模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。
ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。

ADC主要特征

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


STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库),STM32 CubeMX,stm32,嵌入式硬件,单片机

Vref+的电压(2.4~3.6)就是ADC参考电压2.4V(相当于秤砣)

最小识别电压值:2.4/4096≈0.6mv(不考虑误差)

STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库),STM32 CubeMX,stm32,嵌入式硬件,单片机

一、STM32 CubeMX设置

开启连续扫描使能,1.5采样周期
STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库),STM32 CubeMX,stm32,嵌入式硬件,单片机
我们设置 PCLK2=72M,经过 ADC 预分频器能分频到最大的时钟只能是 12M,采样周期设置为 1.5 个周期,算出最短的转换时间为 1.17us,
STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库),STM32 CubeMX,stm32,嵌入式硬件,单片机

二、代码部分

HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout);
  HAL_ADCEx_Calibration_Start(&hadc1);    //AD校准
  HAL_ADC_Start_IT(&hadc1); //开启ADC中断转换
  ADC_Value =HAL_ADC_GetValue(&hadc1);

STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库),STM32 CubeMX,stm32,嵌入式硬件,单片机
STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库),STM32 CubeMX,stm32,嵌入式硬件,单片机

三,单通道轮询采样速度

测试方法:
{(adc转换时间+io反转时间)-io反转时间} =adc转换速度

STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库),STM32 CubeMX,stm32,嵌入式硬件,单片机

STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库),STM32 CubeMX,stm32,嵌入式硬件,单片机

IO口直接反转
STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库),STM32 CubeMX,stm32,嵌入式硬件,单片机
STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库),STM32 CubeMX,stm32,嵌入式硬件,单片机
测得实际转换时间:3us-0.3us=2.7.us

理论值:上面我们设置ADC时钟12Mhz,采样一次最短时间位1.17us
注释:

可编程的通道采样时间:TCONV = 采样时间+ 12.5个周期
**例如**:
当ADCCLK=14MHz,采样时间为1.5周期
 TCONV = 1.5 + 12.5 = 14周期 = **1μs**
 我们设置 PCLK2=72M,经过 ADC 预分频器能分频到最大的时钟只能是 12M,采样周期设置为 1.5 个周期,算出最短的转换时间为 1.17us,

四、内部温度传感器

STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库),STM32 CubeMX,stm32,嵌入式硬件,单片机
STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库),STM32 CubeMX,stm32,嵌入式硬件,单片机
STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库),STM32 CubeMX,stm32,嵌入式硬件,单片机

	HAL_ADC_Start(&hadc1);	//启动ADC转换
	HAL_ADC_PollForConversion(&hadc1,10);	//等待转换完成,10ms表示超时时间
 AD_Value = HAL_ADC_GetValue(&hadc1);	//读取ADC转换数据(12位数据)
 
//		HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_8);
		Vol_Value = AD_Value*(3.3/4096);	//AD值乘以分辨率即为电压值
	printf("ADC1_IN16 VOL value: %.2fV\r\n",Vol_Value);
	Temperature = (1.43 - Vol_Value)/0.0043 + 25;	//根据公式算出温度值
	printf("MCU Internal Temperature: %.2f\r\n",Temperature);

STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库),STM32 CubeMX,stm32,嵌入式硬件,单片机

多通道轮询方式

设置 CubeMX

STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库),STM32 CubeMX,stm32,嵌入式硬件,单片机
STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库),STM32 CubeMX,stm32,嵌入式硬件,单片机

修改代码部分

STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库),STM32 CubeMX,stm32,嵌入式硬件,单片机

int main(void)
{
  /* USER CODE BEGIN 1 */
int aa=0;
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ADC1_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  HAL_ADCEx_Calibration_Start(&hadc1);    //AD校准
 
//	printf("Test int:   i = %d\r\n", aa);		// printf输出int型数据
 int  ADC_value[5];
 char i=0;
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		for(i=0;i<5;i++)
		{
		   HAL_ADC_Start(&hadc1);     //启动ADC转换
		   HAL_ADC_PollForConversion(&hadc1, 50);   //等待转换完成,50为最大等待时间,单位为ms
			 ADC_value[i]=HAL_ADC_GetValue(&hadc1);
		}
    
		printf("ADC value 0 PA0: %d \r\n",ADC_value[0]);
		printf("ADC value 1 PA1: %d \r\n",ADC_value[1]);
		printf("ADC value 2 PA2: %d \r\n",ADC_value[2]);
		printf("ADC value 3 PA3: %d \r\n",ADC_value[3]);
		printf("ADC value 4 PA4: %d \r\n",ADC_value[4]);
		HAL_Delay(1000);
// AD_Value = HAL_ADC_GetValue(&hadc1);	//读取ADC转换数据(12位数据)
// 
		HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_8);
//		Vol_Value = AD_Value*(3.3/4096);	//AD值乘以分辨率即为电压值
//	aa
//	Temperature = (1.43 - Vol_Value)/0.0043 + 25;	//根据公式算出温度值
//	printf("MCU Internal Temperature: %.2f\r\n",Temperature);
 
  }
  /* USER CODE END 3 */
}

实验现象

PA0接地;PA1接VCC;PA2接地;PA3浮空;PA4浮空

STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库),STM32 CubeMX,stm32,嵌入式硬件,单片机

总结

以上就是今天要讲的内容,本文仅仅简单介绍了ADC的使用,而ADC提供了大量能使我们快速便捷地处理数据的函数和方法。文章来源地址https://www.toymoban.com/news/detail-739381.html

到了这里,关于STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM-32:ADC模数转换器—ADC单通道转换/ADC多通道转换

    ADC(Analog-Digital Converter),意即模拟-数字转换器,简称模数转换器。ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁。与ADC相对应,从数字电路到模拟电路的桥梁即DAC(Digital-Analog Convertor),数模转换器。 DAC不是唯一可以

    2024年02月09日
    浏览(47)
  • STM32入门笔记08_ADC模数转换器+案例: ADC单通道&ADC多通道

    ADC(Analog-Digtal Converter) 模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量, 建立模拟电路到数字电路的桥梁 12位逐次逼近型ADC, 1us转换时间 输入电压范围: 0~3.3V, 转换结果范围: 0~4095 18个输入通道, 可测量16个外部和2个内部信号源 规则组和注入组

    2024年02月04日
    浏览(53)
  • STM32 hal库使用笔记(五)ADC—单通道/双通道DMA传输

    实现目的:利用ADC采集光敏传感器/烟雾传感器的值,并利用串口打印 实验平台:正点原子精英版 一、简介 1.DMA的介绍 参考:STM32 hal库使用笔记(四)DMA—内存到内存/内存到外设_乱码小伙的博客-CSDN博客 2.ADC简介      ADC(Analog-Digital Converter)模拟-数字转换器 ADC可以将引脚

    2024年02月03日
    浏览(60)
  • 实验(六):ADC应用:独立模式单通道采集实验

    实验目的: 1. 学习对ADC基础功能的使用; 2. 掌握KEIL5的仿真与调试。 任务: 1.   根据要求编写程序,并写出原理性注释; 2. 将检查程序运行的结果,分析一下是否正确; 3. 完成所建工程的验证调试。 贴片滑动变阻器的动触点通过连接至STM32 芯片的ADC 通道引脚。当我们使

    2024年02月15日
    浏览(54)
  • STM32自学☞AD单通道

      程序的最终运行成果: 当转动电位器时,数值和电压值发生变化 #include \\\"stm32f10x.h\\\" #include \\\"stm32f10x_adc.h\\\" #include \\\"ad.h\\\" #include \\\"stdint.h\\\" void ad_Init(void) {  /*  初始化步骤:  1.开启GPIO时钟和ADC时钟,配置ADCCLK  2.配置GPIO,模拟输入模式  3.配置多路开关  4.配置ADC转换器  5.开启

    2024年03月21日
    浏览(51)
  • STM32CubeMX配置STM32G031多通道ADC采集(HAL库开发)

    时钟配置HSI主频配置64M  勾选打开8个通道的ADC  使能连续转换模式  配置好串口,选择异步模式 配置好需要的开发环境并获取代码  修改main.c 串口重定向  串口重定向一定要勾选Use Micro LIB  获取ADC通道值 主函数   串口输出

    2024年02月15日
    浏览(56)
  • STM32CubeMx配置ADC(多通道采集+DMA读取数据)(HAL库开发)

    目录 1、函数配置过程(这是标准库配置过程): 2、STM32CubeMx配置过程  3、main函数源文件 采集5路ADC数据,并用串口printf()函数打印出来。 实验现象:  ADC转换的初始条件: 1、使能 2、触发源条件完成(这个需要自己配置)利用:HAL_ADC_Start_DMA()函数; ADC中HAL开发优势就是,

    2023年04月08日
    浏览(80)
  • HAL库配置ADC_1_单通道配置

    💦在使用ADC外设前,先查看下芯片手册,看下ADC的特点。 💦ADC的使用,一定是有参考电压的,在使用时要注意,芯片手册上关于ADC参考电压的范围。 通常正参考电压VREF+连接到VCC,负参考电压VREF-连接到GND 💦通过框图可以了解ADC的工作流程。   下面是ADC比较常用的参数说

    2024年02月04日
    浏览(43)
  • STM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL库开发)

     时钟配置HSI主频配置64M  勾选打开8个通道的ADC  使能连续转换模式  添加DMA  DMA模式选择循环模式  使能DMA连续请求 采样时间配置160.5 转换次数为8  配置好8次转换的顺序  配置好串口,选择异步模式 配置好需要的开发环境并获取代码  修改main.c 串口重定向  串口重定向

    2024年02月08日
    浏览(58)
  • 基于 VITA57.4 标准的单通道 6GSPS 12 位采样 ADC,单通道 6GSPS 16 位采样 DAC 子卡模块

    概述 FMC147 是一款单通道 6.4GSPS(或者配置成 2 通道 3.2GSPS)采样率的 12 位 AD 采集、单通道 6GSPS(或配置成 2 通道 3GSPS) 采样率 16 位 DA 输出子卡模块,该板卡为 FMC+标准,符合 VITA57.4 规范,该模块可以作为一个理想的 IO 单元耦合至 FPGA 前端,ADC 数字端通过 16lane 通道的 JE

    2023年04月16日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包