503|0

1237

帖子

66

TA的资源

纯净的硅(中级)

楼主
 

【STM32H7S78-DK】测评+DSP测试 [复制链接]

本帖最后由 dql2016 于 2024-10-10 21:22 编辑

STM32H7S78采用的是M7内核,支持双精度浮点DSP指令,性能强劲。通常可以在STM32CubeMX配置界面通过如下方法加入DSP库:

 

但实际测试下来,通过此方法STM32H7S78无法将DSP库添加到工程,因此只能采用手动下载DSP库并添加到STM32CubeIDE工程。

ARM公司提供的数字信号库CMSIS-DSP可以在github上下载,也可以在ST提供的STM32Cube软件包里面找到。由于CMSIS-5.6.0以后版本不再提供编译好的静态库,这里为了方便下载CMSIS-5.6.0版本,解压后主要关注下面3个文件夹:

Lib文件夹中包含的底层库包括IAR、KEIL、GCC三个编译器平台,字母l代表小端地址格式,b代表大端地址格式(所有STM32皆为小端地址格式处理器);字母f代表使用浮点处理单元(FPU)

对于M7内核提供如下3种:

arm_cortexM7lfdp_math.lib (Cortex-M7, Little endian, Double Precision Floating Point Unit)
arm_cortexM7lfsp_math.lib (Cortex-M7, Little endian, Single Precision Floating Point Unit)
arm_cortexM7l_math.lib (Cortex-M7, Little endian)
这里我们使用第1种。
DSP库Source目录包含了各种数学运算库的源码,如果使用添加源码的方式,能够更好的使用编译器的优化功能,这也是5.6.0不再提供静态库的原因,armcc v6无法对静态lib优化。

1)BasicMathFunctions

基本数学函数:提供浮点数的各种基本运算函数,如向量加减乘除等运算。

2)CommonTables

数字信号处理常用参数表。

3)ComplexMathFunctions

复数计算数学函数。

4)ControllerFunctions

控制算法函数。包括正弦余弦,PID电机控制,矢量Clarke变换,矢量Clarke逆变换等。

5)FastMathFunctions

常见快速算法的数学函数。

6)FilteringFunctions

滤波函数功能,主要为FIR和LMS(最小均方根)等滤波函数。

7)MatrixFunctions

矩阵处理函数。包括矩阵加法、矩阵初始化、矩阵反、矩阵乘法、矩阵规模、矩阵减法、矩阵转置等函数。

8)StatisticsFunctions

统计功能函数。如求平均值、最大值、最小值、计算均方根RMS、计算方差/标准差等。

9)SupportFunctions

支持功能函数,如数据拷贝,Q格式和浮点格式相互转换,Q任意格式相互转换。

10)TransformFunctions

变换功能。包括复数FFT(CFFT)/复数FFT逆运算(CIFFT)、实数FFT(RFFT)/实数FFT逆运算(RIFFT)、和DCT(离散余弦变换)和配套的初始化函数。

 

在工作空间目录下添加DSP文件夹:

将上面的Include、Lib、Source三个文件夹复制到DSP文件夹中,如下图:

 

然后在STM32CubeIDE指定库路径和头文件路径。

首先添加静态库:

 

然后添加静态库路径:

 

添加头文件引用路径:

 

添加宏定义:

 

使能硬件浮点运算单元FPU:

 

添加头文件:

#include "arm_math.h"

添加浮点运算测试代码:

//DSP库求均方根测试
static void DSP_RMS(void)
{
    float32_t pSrc[10] = {0.7060f, 0.0318f, 0.2769f, 0.0462f, 0.0971f, 0.8235f, 0.6948f, 0.3171f,0.9502f, 0.0344f};
    float32_t pResult;
    uint32_t pIndex;

    q31_t pSrc1[10];
    q31_t pResult1;

    q15_t pSrc2[10];
    q15_t pResult2;

    printf("******** stm32h7s78-dk eeworld dsp test ***********\r\n");

    arm_rms_f32(pSrc, 10, &pResult);
    printf("arm_rms_f32 : pResult = %f\r\n", pResult);

    /*****************************************************************/
    for(pIndex = 0; pIndex < 10; pIndex++)
    {
         pSrc1[pIndex] = rand();
    }
    arm_rms_q31(pSrc1, 10, &pResult1);
    printf("arm_rms_q31 : pResult = %d\r\n", pResult1);

    /*****************************************************************/
    for(pIndex = 0; pIndex < 10; pIndex++)
    {
         pSrc2[pIndex] = rand()%32768;
    }
    arm_rms_q15(pSrc2, 10, &pResult2);
    printf("arm_rms_q15 : pResult = %d\r\n", pResult2);
    printf("******************************************************************\r\n");
}

 

调用

计算结果符合预期,可见DSP库被正确的加入到了工程中

附件:

stm32cubeide_workspace_dsp_test.7z (20.59 MB, 下载次数: 0)
此帖出自stm32/stm8论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表