IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32基础11--模数转换(ADC) -> 正文阅读

[嵌入式]STM32基础11--模数转换(ADC)

目录

前言

ADC框图

ADC测量的硬件电路

功能需求

STM32CubeMx配置ADC

功能代码实现


前言


? ? ? ? 在做51单片机项目时,如果需要对外围电路进行电压测量时,往往会在51单片机上面外挂一个ADC转换芯片(例如ADC0809)。但在STM32F407中,不再需要这么干了,因为在STM32的内部就已经集成了ADC电路。

? ? ? ? STM32中有3个最高分辨率为12 位 ADC 是逐次趋近型模数转换器。它具有多达 19 个复用通道,可测量来自 16 个外部?源、两个内部源和 VBAT 通道的信号。这些通道的 A/D 转换可在单次、连续、扫描或不连续?采样模式下进行。ADC 的结果存储在一个左对齐或右对齐的 16 位数据寄存器中。

? ? ? ?注:虽然有3个ADC,它们的引脚复用的。也就是它们有的IN脚有些是两个ADC或者3个ADC同时拥有的。下图查找ADC可以看到,并没有3*16 = 48个ADC输入引脚。

?

ADC框图

????????框图中1部分是模式转换外部控制;

????????框图中2部分是模拟输入通道;

????????框图中3部分是模式转换;

????????框图中4部分是与ADC转换相关的中断。

ADC测量的硬件电路

? ? ? ? ADC最高的测量电压为3.3V,不要ADC模拟输入端,不要接入超过3.3V的电压。否则可能会烧坏STM32芯片。

? ? ? ? PA5(ADC1或者ADC2的模拟通道5)连接到TPAD,上面的电压大概只有3V。

?

?

?

功能需求

? ? ? ? 1)使用ADC1的模拟通道5,轮询的方式测量TPAD上的电压;

? ? ? ? 2)测量的电压值通过串口发送到PC端

STM32CubeMx配置ADC

选择ADC与模拟通道

?

ADC参数设置

?

?

功能代码实现

?STM32CubeMx生成初始化代码

/* ADC1 init function */
void MX_ADC1_Init(void)
{

  /* USER CODE BEGIN ADC1_Init 0 */

  /* USER CODE END ADC1_Init 0 */

  ADC_ChannelConfTypeDef sConfig = {0};

  /* USER CODE BEGIN ADC1_Init 1 */

  /* USER CODE END ADC1_Init 1 */

  /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
  */
  hadc1.Instance = ADC1;
  hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
  hadc1.Init.Resolution = ADC_RESOLUTION_12B;
  hadc1.Init.ScanConvMode = DISABLE;
  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)
  {
    Error_Handler();
  }

  /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  */
  sConfig.Channel = ADC_CHANNEL_5;
  sConfig.Rank = 1;
  sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN ADC1_Init 2 */

  /* USER CODE END ADC1_Init 2 */

}

?

?自定义变量

?

??ADC测量代码

        //led_key_ctl();
       HAL_ADC_Start(&hadc1);  
       HAL_ADC_PollForConversion(&hadc1, 200);

       
       if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))

      {

          /*##-3- Get the converted value of regular channel  ######################*/

         AD_Value = HAL_ADC_GetValue(&hadc1);
         printf("AD_Value = %d \r\n",AD_Value);
         sprintf(str,"TAPD Voltag : %f \r\n",(float)((AD_Value*3.3)/4096));
         HAL_UART_Transmit(&huart1,(uint8_t *)str,strlen((const char *)str),100);

      }
    
      HAL_Delay(1000);

? ? ? ? 注:

? ? ? ? 1)该代码中有使用了printf函数,默认STM32是不可以通过printf发送数据到PC端的,需要将printf重定向才可以。如果想实现该功能可以参考 下面这篇文章的最后一部分,实现printf的重定向STM32基础9--串口通信(UART)icon-default.png?t=M3K6https://blog.csdn.net/qq_34343637/article/details/124529478

?????????2)本文例子中没有使用到中断,如果ADC检测完后触发中断,可以重写中断中的回调函数。

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 11:35:52  更:2022-05-05 11:37:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:55:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码