打印
[活动专区]

【AT-START-F407测评】FPU&DSP

[复制链接]
1234|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Ben666|  楼主 | 2021-2-18 16:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AT32F407带存储器保护单元(MPU),内建单周期乘法和硬件除法
不同与一些51单片机或MSP430,在使用乘除法器时需要对相关寄存器进行操作,CoretexM内核的处理器时真实的把硬件乘法器关联到MUL中.
AT32F407还内建浮点运算(FPU),具有DSP指令集

开启FPU仅需要在魔术棒中配置

__FPU_PRESENT和__FPU_USED库文件已设置好,如果进行修改就会导致硬件错误HardFault_Handler
若要使用DSP则需要添加Libraries\CMSIS\Lib\ARM目录下的arm_cortexM4lf_math.lib
该目录下的文件有两个
1.arm_cortexM4bf_math.lib(浮点Cortex-M4大端模式)
2.arm_cortexM4lf_math.lib(浮点Cortex-M4小端模式)      407的内核CortexM4F采用小端模式,所以选择:arm_cortexM4lf_math.lib(浮点Cortex-M4小端模式)。

加入宏定义
#define ARM_MATH_CM4
#define ARM_MATH_MATRIX_CHECK
#define ARM_MATH_ROUNDING

在main.c中#include "arm_math.h"


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(离散余弦变换)和配套的初始化函数。



          TMR_SetCounter(TMR6,0);
                TMR_Cmd(TMR6, ENABLE);
               
                for (i = 0; i<10000; i++)

                {

                                date = cosf(angle);
                                date = sinf(angle);
                                angle += 0.001f;//????

                }
                TMR_Cmd(TMR6, DISABLE);
                time = TMR_GetCounter(TMR6);

                printf("·ÇDSP:%d us \r\n ", time);


                TMR_SetCounter(TMR6,0);
                TMR_Cmd(TMR6, ENABLE);

                for (i = 0; i<10000; i++)
                {
                                date = arm_cos_f32(angle);
                                date = arm_cos_f32(angle);
                                angle += 0.001f;

                }
                TMR_Cmd(TMR6, DISABLE);
                time = TMR_GetCounter(TMR6);
               
                printf("DSP:%d us \r\n", time);

可以看出使用DSP库的函数会比mach(#include "math.h" )的sin和cos函数快一倍左右
单使用mach函数占用内存:

单使用dsp函数占用内存:


使用特权

评论回复
沙发
单片小菜| | 2021-2-18 18:26 | 只看该作者
期待楼主有更好的作品出现。

使用特权

评论回复
板凳
小明的同学| | 2021-3-1 21:00 | 只看该作者
开启功能强大。

使用特权

评论回复
地板
huangcunxiake| | 2021-3-3 13:24 | 只看该作者
回头试试。

使用特权

评论回复
5
里面有晴雨| | 2021-3-3 15:08 | 只看该作者
这个功能从来没有试验过。

使用特权

评论回复
6
名字是啥样| | 2021-3-4 12:18 | 只看该作者
保护单元(MPU),内建单周期乘法和硬件除法,太棒了

使用特权

评论回复
7
zhouyong77| | 2021-3-5 08:16 | 只看该作者
FPU和ST比较咋样?

使用特权

评论回复
8
hbxhang68| | 2021-3-18 20:46 | 只看该作者
感谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

11

帖子

0

粉丝