STM32HAL库学习之路(六):轻松玩转adc

目录

一、简述

二、示例操作

(one)DAC轮询方式

1、选取ADC1的IN0​

 2、使能ADC1通道1的连续转换模式

3、此时芯片处会自动使能引脚

4、实际代码编写

具体adc函数编写

(TWO)DAC之DAM方式

1、cubx配置

初始化adc通道0和通道1

三.示例代码


一、简述

先介绍最简单的片上 ADC ,通常是 12 位,精度则为 3.3/4096 v
读取 ADC 的方式有很多:
1 、轮询
2 、中断
3 DMA
因为在实际开发中仅有轮询和 DMA 存在使用场景,所以在这里我仅介绍轮询和
DMA 的方式

二、示例操作

(one)DAC轮询方式

1、选取ADC1的IN0

 2、使能ADC1通道1的连续转换模式

3、此时芯片处会自动使能引脚

4、实际代码编写

使能printf函数。

/* USER CODE BEGIN Includes */
#include <stdio.h>
/* USER CODE END Includes */
/* USER CODE BEGIN 0 */
int fputc(int ch, FILE *f){
uint8_t temp[1] = {ch};
HAL_UART_Transmit(&huart1, temp, 1, 2);//huart1??????????
return ch;
}
/* USER CODE END 0 */

具体adc函数编写

  /* USER CODE BEGIN 1 */
    uint16_t AD_Value;
  /* USER CODE END 1 */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		HAL_ADC_Start(&hadc1);//启动adc转换
		HAL_ADC_PollForConversion(&hadc1, 50);//等待转换完成,第二个参数表示超时时间,单位ms
		if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))//
			{
	    AD_Value = HAL_ADC_GetValue(&hadc1);//读取ADC转换数据,数据为12位
		printf("ADC_Value:%.1f mv",AD_Value*3300.0/4096);//输出adc的值
			}
			 HAL_Delay(1000);//延迟一秒(不建议在实际应用中使用)
  }
  /* USER CODE END 3 */

要知道,adc转换后的数据是一个12位的二进制数,我们需要把这个二进制数代表的模拟量(电压)用数字表示出来。比如这次我们测量的电压范围是0~3.3V,转换后的二进制数是x,因为12位ADC在转换时将电压的范围大小(也就是3.3)分为4096(2^12)份,所以转换后的二进制数x代表的真实电压的计算方法就是:
y=3.3* x / 4096

(TWO)DAC之DAM方式

1、cubx配置

初始化adc通道0和通道1

 

(1) 使能扫描转换模式 (Scan Conversion Mode), 使能连续转换模式 (Continuous
Conversion Mode)
 (2) : ADC 规则组选择转换通道数为 2(Number Of Conversion)
 (3) : 配置 Rank 的输入通道。

    添加DMA 设置,设置为连续传输模式,数据长度为字。

三.示例代码

	uint32_t ADC_Value[100];
	uint8_t i;
	uint32_t ad1,ad2;
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		HAL_Delay(1000);
		for(i = 0,ad1 =0,ad2=0; i < 100;)
		{
		ad1 += ADC_Value[i++];
		ad2 += ADC_Value[i++];
		}
		ad1 /= 50;
		ad2 /= 50;
		printf("\r\n********ADC-DMA-Example********\r\n");
		printf("info:AD1_value=%1.3fV\r\n", ad1*3.3f/4096);
		printf("info:AD2_value=%1.3fV\r\n", ad2*3.3f/4096);
  }
  /* USER CODE END 3 */

 其余代码配置与DAC轮询方式一致

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

靳小锅er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值