前言 使用STM32H750VB作为主控,使用stm32cubemx配置工程,在单通道对ADC通道进行采集,预计对通道采集1024次,然后对1024个数据进行fft。 $ {& n) M" [3 _8 J 一、配置 1. 时钟配置 在cubemx中配置,RCC中采用外部时钟,外部晶振分别为25MHz和32.768KHz。时钟树配置如下图所示:) B: }% V! G+ Y2 l ADC时钟频率为150MHz。! _! e7 _/ w8 ~$ [9 G; C : f( p7 B- ^2 [ _ 2. ADC配置+ y- B2 D# L1 }7 S 选用ADC3中的IN0,其他的不选,具体配置如下,根据下图计算采样率首先,ADC的时钟为150MHz,时钟分频8分频,然后采样时间为32.5个时钟周期,采样率约577KHz,实测采用8.5个时钟周期也可也,但是时采样率再高就不太行了。/ [* l$ Z1 S# `5 g7 M: O; s( w$ I 3. DMA配置 DMA配置如下图所示,由于是连续采样DMA配置为循环模式,同样,在ADC的配置中的转换数据管理模式也要配置为DMA Circular Mode。数据宽度选择half byte,在Debug中选上串行线就行。至此在cubemx中的配置完成。 : t; D3 D: A) Y9 ~4 g9 z 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。8 C6 E8 P! d5 k6 F( E3 O 二、工程0 s- S/ O& |9 i; T 1 . ADC测试 cubemx建立的工程已经包含了对各个部分的初始化,查看与ADC相关的函数。然后选择调用函数。首先进行对ADC的校准,如下所示。校准函数后面的两个参数可以在函数定义上面的注解中找到。 , O0 p% }6 R5 L% ?+ ? a$ R& Z
然后开启ADC采样,由于是使用DMA方式,所以调用HAL_ADC_Start_DMA函数。处理方式也一并写在下面所示的程序中。; \7 ^) K9 N* j o8 O i5 C
调试时可以发现ADC的值可以连续被转换。 2 N7 d/ V% D- b/ M' N, ` 三、FFT+ N; Q& b+ w: p: E" e! M! g( \ 1. 添加DSP库! S/ v" V1 I6 H& Y! {1 u) P CMSIS包含了数字信号处理的一系列库,在Keil中添加比较方便,如下图所示。2 I7 ], p+ d3 ~/ a5 T$ U 1 G" n8 g6 Q- N DSP库的资料可以在keil安装目录中找到,如下图所示。 2. 数据采集 采集1024组数据,声明长度为1024的float数组后,当给数组赋值,程序会进入hardfault,发现是H750VB的flash或者ram不够。后面准备研究外部flash存储数据,如果是ram的问题那就没办法了。后面就只有研究FPGA进行数据处理了。! R: m& T! Q3 W8 H! g( c " X/ e2 r* W. Q4 a& J! ?/ g 总结: P% l9 X _4 X( n v 在整个过程中,发现使用6.0及以上版本的编译器编译的速度比5.0版本的块很多诶。 |
stm32使用定时器触发dma传输,启动dma没反应的几种情况的解决方法
【Wio Lite AI视觉开发套件】+cube.ai与食物识别
【STM32H7S78-DK】汽车仪表系统
【STM32H7S78-DK】基于 rtthread 适配 lcd 驱动移植 lvgl
【STM32H7S78-DK评测】TouchGFX (QR Code)二维码生成器
【STM32H7S78-DK】rtthread 增加 psram 内存管理
【STM32H7S78-DK】开箱与rtthread工程初体验
【STM32H7S78-DK评测】-5 LVGL&DMA2D DEMO测试
【STM32H7S78-DK评测】-4 LTDC&DMA2D 基本测试
【STM32H7S78-DK评测】CoreMark移植和优化--兼记printf重定向实现方法及常见问题