STM32F103C8 + Stm32CubeMX + ADC单通道采集电压

  这篇主要记录一下STM32的ADC采样功能,利用单片机的PA6引脚分别对3.3V和GND的电压进行采集,并将其电压通过串口打印出来。

一、ADC采样原理

  • 单片机是数字芯片,只认识由0和1组成的逻辑序列,但是我们现实当中有很多模拟的物理量,如温度,这些模拟量该如何被单片机系统处理呢?这就会用到AD转换,AD转换的英文就是Analog to Digital ,由模拟量转化为数字量;而DA,则为Digital to Analog,数字量转化为模拟量。那单片机是如何实现转化的呢?
  • AD转换芯片上的数据手册上都会告诉你一个信息,这个芯片是8位的、10位的,还是12位的、16位的。这就代表着单片机AD采样后所能得到的最大值。如果AD采样是8位的那对应的值就为0-255,10位对应的值为0-1023,12位对应的值就为0-4095。对于一个12位AD转换芯片而言,如果输入电压为0,那单片机读到的就是0,如果输入电压是VCC,那单片机读到的就是4095,已经知道了这两个点(0,0),(VCC,4095),根据两点就可以确定一个公式,这时候就可以求出任意电压值所对应的数字量是多少了。

二、STM32CubeMx配置

1、RCC开启外部高速时钟(略)
2、配置STLink调试口(略)
3、配置串口方便调试输出(略)
4、配置工程名、生成路径,之后生成工程(略)
(1-4步的基础配置可以参考前面的文章《STM32基础工程模板创建》
5、ADC配置

  • 我这里用的ADC的通道6,对应芯片的PA6脚
    在这里插入图片描述
  • 配置ADC参数
    在这里插入图片描述

三、keil代码编写

3、添加ADC采样代码

int main(void)
{
	uint16_t ADC_Value = 0;				//用于接收采集ADC采样值
    HAL_Init();
    SystemClock_Config();
	MX_GPIO_Init();
	MX_ADC1_Init();

    MX_USART1_UART_Init();
	HAL_ADCEx_Calibration_Start(&hadc1);    			//添加AD校准函数
	HAL_ADC_Start(&hadc1);     							//启动ADC转换
    while (1)
    {
		ADC_Value = HAL_ADC_GetValue(&hadc1);   		//获取AD值
		printf("ADC1 Reading:%d    True Voltage value:%.4f \r\n", ADC_Value, 	     ADC_Value*3.3f/4096);
		HAL_Delay(500);
    }
}

四、硬件连接

STM32          STM32
PA6 《-----------------------》3.3V
PA6 《----------------------》GND

五、运行效果

  • 将PA6引脚分别和开发板的3.3V、GND接在一起,观察电压变化。
    在这里插入图片描述
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值