ADC实验
一、实验目的
1. ADC原理学习;
2. STM32软件开发环境搭建与操作;
3. STM32 ADC功能与代码实现;
4. STM32串口功能与代码实现;
二、实验内容
采集外部模拟电压输入,并通过串口输出打印
三、实验原理及说明
模数转换器即A/D转换器,或简称ADC,通常是指一个将模拟信号转变为数字信号的电子元件。通常的模数转换器是将一个输入电压信号转换为一个输出的数字信号。
STM32带有12位ADC是一种逐次逼近型模拟数字转换器,简易模型如下图。它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。

模数转换器主要特性可配置12位、10位、8位或6位分辨率
l 在转换结束、注入转换结束以及发生模拟看门狗或溢出事件时产生中断
l 单次和连续转换模式
l 用于自动将通道 0 转换为通道“n”的扫描模式
l 数据对齐以保持内置数据一致性
l 可独立设置各通道采样时间
l 外部触发器选项,可为规则转换和注入转换配置极性
l 不连续采样模式
l 双重/三重模式(具有 2 个或更多 ADC 的器件提供)
l 双重/三重 ADC 模式下可配置的 DMA 数据存储
l 双重/三重交替模式下可配置的转换间延迟
l ADC 转换类型(参见数据手册)
l ADC 电源要求:全速运行时为 2.4 V 到 3.6 V,慢速运行时为 1.8 V
l ADC 输入范围: VREF- ≤ VIN ≤ VREF+
l 规则通道转换期间可产生 DMA 请求
STM32 ADC模块框图如下,可以观察采集流程以及途中的子模块:

该实例演示单次、不连续转换模式,采集ADC1_IN1(PA1)引脚的电压,可将PA1接到3V3或者GND,然后将转换结果用串口输出。
四、实验设备
一套STM32实验设备、头歌实践教学平台。
五、实验步骤
1.1 双击打开软件 stm32cubemx。

1.2 开始创建工程,打开软件后选择 access to mcu selector。

1.3 搜索芯片STM32F103C8T6,并选择芯片型号 STM32F103C8T6 ,并点击“start project”创建工程。

1.4 展开“system core”标签,找到“SYS"选项,在右边选择如图所示配置调试模式。

1.5 切换到”RCC“标签,按如图所示配置。

1.6 切换到“Connectivity”标签,在实验过程中需要使用串口打印信息,所以需要配置串口功能,此处选择USART1,配置为异步通信,其他参数(奇偶校验,波特率等)使用默认即可,按照如图所示配置“USART1”。

1.7 切换到“Analog”标签,选择ADC1,使能通道IN1。

1.8 设置系统时钟为72M。

1.9 输入工程名字,例如PRO

1.10 切换到”code generator“标签,按如图所示生成代码。

1.11 打开STM32CubeIDE,打开之前生成的工程。
点击”File--> open project from file system......”。

1.12 按下右边的标签“MX",即可显示项目文件。

1.13 打开项目文件Core->Src->main.c ,添加部分代码,采集ADC1_IN1(PA1)的电压信息,将结果发送串口,如图所示:

任务代码
将红框内代码复制到main函数里面,需要补充一行代码
已知stm32ADC1是12位分辨率,addvalue已经返回最近一次ADC1规则组的转换结果,请将结果转换更换成电压值,单位为mv

1.14 编译项目,并将生成的hex文件下载到开发板,并运行。
测试说明
将ADC1_IN1(PA1)接到3V3,串口会打印ADC1_IN1=3300mV;
将ADC1_IN1(PA1)接到GND,串口会打印ADC1_IN1=0mV;