极客秀
搜索

STM32基于CubeMX的ADC实现

什么是ADC?

ADC是模数转换器(Analog-to-Digital
Converter)的缩写,它是一种将模拟信号转换为数字信号的设备。在嵌入式系统中,ADC常用于将传感器产生的模拟信号转换为数字信号,以便微控制器进行处理。

ADC是非常常用的器件,所以应该学会如何使用。

STM32中的ADC

STM32微控制器系列是由STMicroelectronics推出的一系列32位ARM Cortex-
M处理器的嵌入式系统。STM32系列通常配备了内置的ADC单元,使其能够轻松地进行模拟信号的数字化转换。

STM32 ADC的主要特点

  1. 多通道: STM32 ADC通常具有多个通道,允许同时转换多个模拟信号。每个通道可以连接到不同的传感器或电压源。

  2. 分辨率: 分辨率表示ADC能够将模拟信号分成多少个离散的步骤。常见的分辨率有 12位和16位 ,分辨率越高,转换精度越高。

  3. 采样速率: 采样速率是ADC每秒对模拟信号进行转换的次数。STM32 ADC通常具有可调节的采样速率,允许根据应用的要求进行优化。

  4. 触发模式: ADC可以通过软件或外部触发启动转换。这使得可以根据需要灵活地控制转换的时机。

** CubeMX初始化 **

其实STM32的ADC可以分为单通道与多通道两种。

单通道即使用一个IO来实现ADC,多通道也顾名思义,使用多个通道ADC时如何处理。

单通道ADC配置

在CubeMX中选择好对应的芯片,配置好时钟,开启串口方便调试。

选择具有ADC功能的IO,点击开启ADC。

ADC设置

设置ADC的模式,单通道的话大部分都不用改。 然后就可以生成我们的工程了。

代码配置


#include <stdio.h>int fputc(int ch, FILE *f) {    // 发送单个字符    HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);        // 返回发送的字符    return ch;}

在Uart.c中重定向我们的串口,方便使用Printf函数。


  while (1)  {    /* USER CODE END WHILE */      /* USER CODE BEGIN 3 */    HAL_ADC_Start(&hadc1);//轮询模式开启ADC    HAL_ADC_PollForConversion(&hadc1, 50);//等待ADC转换结束    int Value = HAL_ADC_GetValue(&hadc1);//获取ADC转换的结果    printf("ADC:%drn",Value);//打印ADC  }

可以看到我们实现了单通道ADC。
多通道ADC
多通道ADC,我们使用多通道间断模式

开启多个ADC通道。

这里必 须 使能扫描模式和间断模式

通道数设置为3,顺序为12,13,14.


  while (1)  {    /* USER CODE END WHILE */  
    /* USER CODE BEGIN 3 */    HAL_ADC_Start(&hadc1);//轮询模式开启ADC    HAL_ADC_PollForConversion(&hadc1, 50);//等待ADC转换结束    for(int i = 1;i<=3;i++)//总共三个通道    {      int Value = HAL_ADC_GetValue(&hadc1);//获取ADC转换的结果      printf("ADC%c:%drn",'a'+i-1,Value);//打印ADC    }  
  }

这样子ADC返回的值就是按照通道顺序而定。

可以看到,可以读到ADC的值并打印了出来

1.转载请保留原文链接谢谢!
2.本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
3.本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。
4.本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。
5.联系方式(#替换成@):pm#vimge.com

  相关内容