stm32cubemx ADC+TIM+DMA超频采样

ADC+TIM+DMA采集交流(三)

少年,你渴望力量吗?

前言

本文主要讲解ADC超频工作。

所需工具:

    开发板:STM32F103RCT6 STM32CubeMX IDE: Keil-MDK

相关文章:

原理简介

F1中文参考手册上写道ADC的始终不得超过14M,实际使用中是可以超过的,产商在写手册时都会有一定的保留值,稍微超过一点没问题,不只是ADC的时钟,系统总时钟72M也是可以超频到80多兆,甚至是100多兆。

当然不推荐超频过多,保留值是出于使用稳定性,安全性的考虑。超频超越的过多或者是超频工作太久,单片机都是有可能出现罢工的。

开启超频

下面是时钟树的配置。

没有什么不一样的地方。因为cubemx是不允许我们超频的,如果超频就会报错,比如下面修改ADC Prescaler的分频强行改成18M。

冒红了吧,超频需要在keil里面通过编程更改。我们改回12M时钟。生成工程。

在main.c文件下找到SystemClock_Config函数,再在函数末尾处找到

PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;

这里的DIV6对应的正是cubemx时钟树里面的ADC Prescaler,这里目前是6分频,我们把他改成2分频,ADC的时钟就是36M了。

PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV2;

现在ADC理论上的采样率上限为 36 M 1.5 + 12.5 ≈ 2.57 M frac{36M}{1.5+12.5}approx2.57M 1.5+12.536M≈2.57M 时钟开太高对单片机不好,平时4分频超到18M就行了,不必超到36M,我可不想让他英年早逝。

注意SystemClock_Config不在begin和end之间,会在cubemx生成工程时被更改。

实测

ADC采样率1.5M,信号发生器产生150khz的正弦信号,单片机采集后打印到VOFA上。可以看到一个周期确实是10个点。

后记

本文章收录于:

本文为系列文章中的冰山一角,欢迎进入小站查看。

配套程序:

经验分享 程序员 微信小程序 职场和发展