我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/

    

本文介绍X-CTR100控制器 DSP库的使用,对STM32F4的DSP库有个基本的了解,并针对三角函数有无DSP指令进行性能测试。

原理

STM32F4采用Cortex-M4内核,相比Cortex-M3系列除了内置硬件FPU单元,在数字信号处理方面还增加了DSP指令集,支持诸如单周期乘加指令(MAC),优化的单指令多数据指令(SIMD),饱和算数等多种数字信号处理指令集。相比Cortex-M3,Cortex-M4在数字信号处理能力方面得到了大大的提升。Cortex-M4执行所有的DSP指令集都可以在单周期内完成,而Cortex-M3需要多个指令和多个周期才能完成同样的功能。

ST官方提供了一整套的DSP库方便我们开发使用,在ST提供的标准库:stm32f4_dsp_stdperiph_lib.zip里面就有。

目录STM32F4xx_DSP_StdPeriph_Lib_V1.4.0→Libraries→CMSIS→DSP_Lib下可以找到DSP库文件和测试实例。

Sourse中是所有DSP库文件源代码,Examples文件夹下是一些测试实例。

    

DSP库主要包含以下几个分库:

BasicMathFunctions

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

CommonTables

arm_common_tables.c文件提供位翻转或相关参数表。

ComplexMathFunctions

复杂数学功能,如向量处理,求模运算的。

ControllerFunctions

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

FastMathFunctions

快速数学功能函数。提供了一种快速的近似正弦,余弦和平方根等相比CMSIS计算库要快的数学函数。

FilteringFunctions

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

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

StatisticsFunctions

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

SupportFunctions

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

TransformFunctions

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

ST提供了.lib格式的文件,方便使用这些库。这些.lib文件就是由Source文件夹下的源码编译生成的,如果想看某个函数的源码,可以在Source文件夹下面查找。.lib格式文件路径:STM32F4xx_DSP_StdPeriph_Lib_V1.4.0→Libraries→CMSIS→Lib→ARM,总共有8个.lib文件,和M4F相关的有两个:

arm_cortexM4bf_math.lib(浮点Cortex-M4大端模式)

arm_cortexM4lf_math.lib(浮点Cortex-M4小端模式)

STM32F4的内核CortexM4F采用小端模式,所以选择:arm_cortexM4lf_math.lib(浮点Cortex-M4小端模式)。

例程

本例程 通过计算两种方法计算三角函数,测量计算时间,间接进行性能对比。

硬件说明

硬件资源:

  • 串口UART1

硬件连接:

使用MicroUSB数据线连接X-CTR100 COM接口。

软件说明

将DSP Lib库加入到工程,相关头文件已在X工程模板中加入。

    

使用DSP库的所有功能,还需要添加以下几个全局宏定义:

1、__FPU_USED

2、__FPU_PRESENT

3、ARM_MATH_CM4

4、__CC_ARM

5、ARM_MATH_MATRIX_CHECK

6、ARM_MATH_ROUNDING

在main.c文件中包含如下头文件。

#include
"math.h"
//标准数学函数库

#include
"arm_math.h"
//使用DSP的数学函数库

测试代码如下,分别使用DSP库三角函数和标准三角函数进行计算,测量计算时间,时间越少性能越好。

int main(void)

{

    uint32_t i, tmp;

    float angle;

    float sinx, cosx;

 

    /* X-CTR100初始化 */

    AX_Init(115200);

    printf("***X-CTR100 DSP指令集性能测试例程***\r\n\r\n");

 

    //模块初始化及配置

    AX_TIMER_TIM6_Init(1);

 

    while (1)

    {

        //不使用DSP优化的sin,cos函数

        AX_TIMER_TIM6_SetCounter(0);

        for (i = 0; i<20000; i++)

        {

            cosx = cosf(angle);

            sinx = sinf(angle);

            angle += 0.001f;//角度自增

        }

        tmp = AX_TIMER_TIM6_GetCountert();

        printf("无DSP 运行时间:%d us | ", tmp);

 

        //有使用DSP优化的sin,cos函数

        AX_TIMER_TIM6_SetCounter(0);

        for (i = 0; i<20000; i++)

        {

            cosx = arm_cos_f32(angle);

            sinx = arm_cos_f32(angle);

            angle += 0.001f;//角度自增

        }

        tmp = AX_TIMER_TIM6_GetCountert();

        printf("有DSP 运行时间:%d us \r\n", tmp);

 

        AX_Delayms(1000);

        AX_LEDG_Toggle();

    }

}

实现效果

测试结果如下图,有DSP情况下计算速度提升约1倍左右。

    

总结

通过本文学习,可以了解STM32F4DSP指令集及ST提供DSP库的使用。项目中如果需要频繁的数学运算,并有性能要求,建议使用DSP相关计算函数。

参考

正点原子——ALIENTEK探索者STM32F407开发板相关资料

玩转X-CTR100 l STM32F4 l DSP指令集性能测试的更多相关文章

  1. 玩转X-CTR100 l STM32F4 l ADC 模拟数字转换

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 AD转换接 ...

  2. 玩转X-CTR100 l STM32F4 l MPU6050加速度陀螺仪传感器

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 板载加速度 ...

  3. 玩转X-CTR100 l STM32F4 l X-CTR100与树莓派搭建机器人平台

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器与树莓派Linux系统 ...

  4. 玩转X-CTR100 l STM32F4 l UCOS-III移植

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 概述 前后台系统 简单的小型系统设计一般是基于前后台 ...

  5. 玩转X-CTR100 l STM32F4 l 舵机控制

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器的舵机控制,X-CTR ...

  6. 玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器控制步进电机 ...

  7. 玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器基础板载资源 ...

  8. 玩转X-CTR100 l STM32F4 l PS2无线手柄

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] SONY的PS2无线手柄是索尼游戏机的遥控手柄,控制 ...

  9. 玩转X-CTR100 l STM32F4 l FPU单精度浮点性能测试

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器如何开启ST ...

随机推荐

  1. 使用validateXxx()方法进行输入校验 --Struts2框架

    1.本例是在使用validate()方法进行输入校验 --Struts2框架的基础上接着做的,上一篇使用validate()方法进行输入校验时会对当前Action中的所有方法有效,由于Struts2框 ...

  2. CentOS6.8下实现配置配额

    CentOS6.8下实现配置配额 Linux系统是支持多用户的,即允许多个用户同时使用linux系统,普通用户在/home/目录下均有自己的家目录,在默认状态下,各个用户可以在自己的家目录下任意创建文 ...

  3. JS onclick事件获取空间value

    1. HTML onclick = btnAction(this.value) 2. JS btnAction(v){ alert(v) }

  4. TeamViewer一直显示“未就绪,请检查您的连接”什么原因?

    一.错误 错误:未就绪,请检查您的连接 二.问题原因 1.网络连接有问题 很多用户在点击启动TeamViewer的时候,在下方看到显示未连接状态.这种情况可能是软件自身问题,重启一下或重新下载安装包安 ...

  5. BIT-区间修改单点查询

    正好刷题时碰到了这个之前遇到过的问题,类似的还有区间修改区间查询,以后学了会补上. 我们知道BIT只支持单点修改区间查询,如果现在问题变成每次让一个区间的数同时变化,然后询问的是某一个点得值的时候该怎 ...

  6. PostgreSQL CPU占用100%性能分析及慢sql优化

    查看连接数变化 CPU利用率到达100%,首先怀疑,是不是业务高峰活跃连接陡增,而数据库预留的资源不足造成的结果.我们需要查看下,问题发生时,活跃的连接数是否比平时多很多.对于RDS for PG,数 ...

  7. Oracle 11.2.0.4.0 Dataguard部署和日常维护(3)-Datauard监控篇

    1.  v$database    查看当前数据库的角色和保护模式 primary库查看 column NAME format a10 column PROTECTION_MODE format a2 ...

  8. Mysql优化要点

    优化MySQL Mysql优化要点 慢查询 Explain mysql慢查询 注意事项 SELECT语句务必指明字段名称 SELECT *增加很多不必要的消耗(cpu.io.内存.网络带宽):增加了使 ...

  9. python3+pyshark读取wireshark数据包并追踪telnet数据流

    一.程序说明 本程序有两个要点,第一个要点是读取wireshark数据包(当然也可以从网卡直接捕获改个函数就行),这个使用pyshark实现.pyshark是tshark的一个python封装,至于t ...

  10. IntelliJ Idea 快捷键列表

    最重要:1Ctrl+Alt+Shift+T:查找类2重构3提取父类 Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shift ...