stm32简易示波器(标准库)

2.定时器的配置:

3.DMA配置:

注:
1.由于在设置PWM时将TIM_Pulse默认设置为1000,因此在初始化定时器2时,TIM_Period的值不能小于该值,可自行修改。TIM_Pulse的值并不会影响采样频率。
2.采样频率= 定时器2溢出频率=SYSCLK/预分频值/溢出值。因此如果将TIM_Pulse设为1,TIM_Period设为2,TIM_Prescaler设为1,理论上采样频率最高可达36Mhz。

二.数据的处理

数据的处理主要是要求出信 的频率和幅值等相关参数。幅值可以通过找出之前存储1024个点的数组中最大最小值,回归处理过后算出差值。难点主要在于频率的求取。一个信 中可能包含多种频率成分,而我显示的是幅值最大的频率分量(当然其他频率也可获得)。这里便用到了STM32提供的DSP库中的FFT(快速傅里叶变换),DSP库在最后的源码中有。

需要采样1024个点的原因:FFT算法要求样本数为2的n次方,而DSP库中提供了64,256和1024样本数对应的库函数,因此选用1024最大样本数可以使频率分辨率最小,更加精确。(定义频率分辨率f0=fs/N,其中fs等于采样率,N为采样点数)

需注意:FFT后的输出不是实际的信 频率,需要经过转换。f(k)=k*(fs/N),其中
f(k)是实际频率,k是实际信 的最大幅度频率所对应的数。(详见下面代码,分享的源代码中公式有误,未重新上传)

详细资料可借鉴:
如何使用DSP库进行FFT
如何将FFT的输出转为信 的实际频率

获取频率的函数:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年6月17日
下一篇 2022年6月17日

相关推荐