我的使用环境:
硬件:STM32F767ZGT6、串口1、ADC1、16MHz晶振、216MHz主频
软件:STM32 CUBE IDE
优点:不用定时触发采样,ADC数据是不停的实时更新,ADC数据的更新频率根据采样时钟和采样周期决定,后期只需要定时取用数据即可。
串口1用printf 的打印功能,需自行完成。或者用仿真查看数据变化也行。
一、基础知识
ADC的时钟是APB2,与时钟树的配置有关,同时规格书中ADC的时钟最大频率又跟电源电压有关,3.3V下最大时钟频率为36MHz。所以预分频后的频率肯定是在这个规定最大时钟频率之内的。
二、STM32Cube IDE 具体配置
串口配置:使能后更改合适波特率。
ADC和DMA 配置
- 预分频之后的时钟应该是在ADC时钟范围之内的,用APB2频率除以分频数。
- DMA要开启扫描模式、连续转换模式、DMA连续请求
- 每个ADC通道的采样时间一定要高于分辨率要求的采样时钟周期,否则会导致初始化失败或者数据没有更新。
4、配置详细解释:
长的采样时间可以减少 ADC 读数的噪声,从而提高精度。在更长的采样时间内,模拟信号的值可以平稳地积累,使得读数更加准确。虽然长的采样时间可以提高 ADC 的精度,但是会影响采样频率。因此,在不同的应用场景中,需要选择合适的采样时间,以达到较高的精度和采样频率的平衡。
5、ADC Injected Conversion Mode
它允许在特定序列中执行多次ADC转换,每次转换有单独的触发。注入转换通常用于高级任务,例如过采样或偏移校正,并且在ADC的触发输入或软件命令触发的常规转换之外执行。
在注入转换模式下,ADC执行一系列转换,每次转换由单独的触发输入触发。注入转换的ADC结果寄存器与常规转换的结果寄存器分开,结束转换中断可以为每种类型的转换单独生成。这允许CPU监视ADC的状态,并确定注入转换何时完成。
是否使用注入转换模式取决于ADC应用程序的具体要求,在使用注入转换模式之前了解注入转换模式的功能和限制是非常重要的。
6、DMA设置
三、验证程序
生成程序后,main.c中开始,使用下面的函数打开DMA传输,每当ADC完成一次数据采样,DMA就会将ADC数据更新至 *pData指定的数组。
HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length)
在任意时刻取用数组中的数据。