跳至内容
深圳市捷比信实业有限公司 · 产品选型与采购咨询联系业务人员
精密电阻捷比信 · 专业器件主题站

关于STM32浮点运算单元FPU的应用示例

有些人使用STM32芯片进行一些DSP处理,并且在FPU单元的调试和验证过程中可能会遇到一些小问题和小混乱。这是STM32F4芯片的特定应用示例的简单共享。我希望能为同事提供一些帮助。或提醒。在这里,我通过调用DSP库中与FFT相关的函数来实现1024点FFT运算。样本数据和运算结果均为浮点数。在上图中,区域A的代码用于样本数据准备,区域B的代码完成FFT操作。让我们看一下基本配置以及不启用硬件浮点单元和启用硬件浮点单元执行B区域中的代码之间的时间差。该程序需要调用一些数学函数,并且这些数学函数通常集成在相应的数学函数库中。我们使用ARM的DSP数学库,这是专门为AMR核心芯片和指令系统组织的代码,它比IDE随附的常规数学库更加优化和高效。目前,DSP数学库包括基本数学函数,复杂数学函数,过滤器函数,矩阵函数等。详细内容可以在ARM网站上方便地阅读。 [您可以单击左下角的原始链接]在开发时,这些文件在哪里?在每个编译环境的安装目录中都可以找到它。看一看它们在ARMkeilMDK环境中的位置。上面我们看到的是DSP库源文件所在的目录。存储在另一个目录中的库文件是根据不同的内核,不同的存储格式以及是否支持硬件浮点单元而编译的。在进行开发时,我们可以直接将适当的库文件添加到项目中,而不必一一搜索要添加的源文件。下图显示了可以在ARMMDK环境中使用的库文件。 [对于不同的IDE,库文件名的后缀略有不同]这是对M4内核中使用的DSP数学函数库的简要说明,有关详细信息,请参见下表。从上表可以看出,有四个库可用于基于CortexM4内核芯片的DSP操作,但是只能选择基于M4内核的STM32芯片中的两个,即xxxM4l_math.lib或xxxM4lf_math。 lib,因为STM32芯片的存储设计是低端的。简而言之,所谓的小尾数模式意味着将多字节数据存储在内存中时,将根据与低位字节对应的低位地址进行存储,反之亦然。大端模式。在上面的屏幕截图中,我还截取了可用于M0内核的DSP数学库的屏幕截图。为什么只有两个?这是因为M0内核没有FPU硬件单元,并且没有启用FPU的可选情况。现在使用STM32F429开发板,在开始时基于屏幕截图代码进行测试,并在不使用FPU和使用FPU的情况下使用计时器来测量以下执行代码所花费的时间,并计算二。 [注意:STM32F429芯片本身具有硬件FPU]必要的配置和文件包括并添加,如下表所示:根据上述条件,执行FFT操作码,以及不使用FPU和使用FPU的时间比。 FPU为16。在类似条件下,基于IAR环境测试相同的功能代码段,不使用FPU与使用FPU的时间比例为11。关于此时间比例,除了是否使用微库外,优化级别,浮点精度等,这也与您选择的测试代码有很大关系,因为某些代码只能由CPU执行,并且无法打开FPU硬件单元。它对这部分时间没有影响。不难理解,在测试代码中只能由CPU运行的代码越多,上述比率就越小。一般来说,我们不必担心此值的大小。很高兴知道有这个硬件浮点单元,它不仅可以减轻CPU的负担,而且可以提高计算速度。此外,在进行与DSP相关的应用程序时,请注意添加的DSP库,不仅要与所使用的芯片相匹配,而且还要与IDE中的配置相匹配。或者以上面的测试代码为例。目的是启用FPU,但是添加的DSP库基于不使用FPU硬件的数学库。会发生什么?应该已经添加了Arm_cortexM4lf_math.h,但是我错了。如果您根据从头开始构建ARMMDK项目