提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
`
STM32F407具有三个ADC,一共有18个通道,一个连接温度传感器,一个连接内部verfine。本文实现了三个ADC共6个通道的采样。
提示:以下是本篇文章正文内容,下面案例可供参考
一、stm32F407的ADC
stm32F407的ADC:
(1)具有12bit,10bit,8bit,6bit的分辨率,选择低分辨率的情况下,可以提高采样率。
(2)采样范围为:Vref-<=Vin<=Vref+,Vref-l=Vssa接地,1.8V<=Vref+<=Vdda。一般为0~3.3V.
(3)stm32F407具有三个ADC,每个ADC采样率最高可达2.4MHZ,三个ADC联合采样可以实现7.2MHZ的采样率。每个ADC可实现多通道采样。
(4)ADC配有单次转换模式和持续转换模式,可以配合DMA实现快速存储。
二、ADC实现步骤(以下在cubeIDE上实现)
1.配置ADC
第一步
图中PCLK2为72MHZ
第二步:选择Analog,打开所需要的ADC(这里我使用了ADC1,ADC2,ADC3),并在mode中勾选所需要的采样通道口。我选择了6个通道,每个ADC负责两个通道,在pinout view 界面显示如下:
第三步:
选择mode为独立模式,如果需要多个ADC联合使用,请选择combined。
Data Alignment为对齐方向,选择右对齐。
Scan Conversion Mode是否开启扫描模式(多通道开启)。
Continuous Conversion Mode为是否开启循环采样模式(关闭就是单次采样) 。
DMA Continuous Request为是否持续发送DMA请求。(如果不需要DMA则关闭)
Number Of Conversion选择为你开启的通道数(我开启了该ADC的两个通道)。
第四步:选择需要的采样率。
在选择12bit分辨率的情况下,执行一次采样所需总时间为TCONV =12cycle+sampletime。其它分辨率,12换成对应的bit数。我选择对PCLK2八分频,采用12bit分辨率,采样时间设置为15cycle,那么总时间为12+15=27cycle,采样率即为72MHZ/8/27=333KHZ.
第五步:DMA添加
点击上面的DMA Settings,点击ADD,Mode选择Circular,实现循环写入存储器。ADC采样为12位,选择半字即可。如果想使用fifo,可勾选下面的User Fifo。
第六步:配置完成了,更新配置就行了。
2.代码部分
更新配置后会有如下初始化代码:
MX_DMA_Init();
MX_ADC1_Init();
MX_ADC2_Init();
MX_ADC3_Init();
先声明三个数组用于存储三个ADC转换通过DMA存储的值。
//声明为多行两列,每列对应一个通道
uint16_t Value_VI1[10][2],Value_VI2[10][2],Value_VI3[10][2];
完成ADC配置有还需要打开ADC采样
//打开ADC,采样时间为15cycle,转换时间为12cycle(12bit),采样一次总时间为15+12=27cycle,时钟为72MHZ/8(divide)=9MHZ,采样率:9MHZ/27=333KHZ
HAL_ADC_Start(&hadc3);
HAL_ADC_Start(&hadc2);
HAL_ADC_Start(&hadc1);
HAL_ADC_Start_DMA(&hadc2, Value_VI2, 20);
HAL_ADC_Start_DMA(&hadc3, Value_VI3, 20);
HAL_ADC_Start_DMA(&hadc1, Value_VI1, 20);
总结
本文章介绍了stm32F407的ADC配置与使用,需要注意一点,在不用DMA存储的情况下,由于ADC转换的结果会存储到一个16bit叫ADC_DR的寄存器,所以要及时把ADC转化的数据存储起来,不然数据会被下一个结果覆盖。