STM32H7使用FPU与DSP

FPU:浮点运算单元

                Cortex-M7内核支持双精度浮点,可以大大加速浮点运算的处理速度。

开启后,小数的运算自动使用FPU进行运算。

FPU开启:

void SystemInit (void)
{
#if defined (DATA_IN_D2_SRAM)
 __IO uint32_t tmpreg;
#endif /* DATA_IN_D2_SRAM */

  /* FPU settings ------------------------------------------------------------*/
  #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
    SCB->CPACR |= ((3UL << (10*2))|(3UL << (11*2)));  /* set CP10 and CP11 Full Access */
  #endif

具体开启代码:写在初始化代码(看该条指令是否为灰色,可判断是否开启)

SCB->CPACR |= ((3UL << (10*2))|(3UL << (11*2)));  /* set CP10 and CP11 Full Access */


 

开启的两个标志位:

__FPU_PRESENT默认默认就为1

开启FPU中的__FPU_USED标志位的地方。

使用:

就正常写计算式,计算时能自动调用FPU计算小数

其它:

选择更加高的优化等级,并且全部编译,可再次提高运算速度。

实际对比:

无FPU+优化等级0:900.4ms

FPU+优化等级0:100.4ms

FPU+优化等级3:55.4ms

DSP:数字信号处理

DSP单元集成了一批专用的指令集(主要是SMID指令和快速MAC乘积累加指令),可以加速数字信号处理的执行速度。

Keil添加库后,利用DSP库里的运算函数进行运算

ST将这些库封装成.lib

不同内核的.lib的选择

相关头文件

添加对应的宏

STM32H750xx,USE_HAL_DRIVER,ARM_MATH_DSP,ARM_MATH_MATRIX_CHECK,ARM_MATH_ROUNDING

主要是后面几个:

,ARM_MATH_DSP,ARM_MATH_MATRIX_CHECK,ARM_MATH_ROUNDING

使用:

添加对应的头文件,然后调用对应的函数。

1.添加头文件
#include "arm_math.h"

2.调用运算函数:

/* 使用 DSP 优化的 sin, cos 函数, 输入角度,传出值*/
cosx = arm_cos_f32(angle); 
sinx = arm_sin_f32(angle);

/* FFT 算法*/

/* Deprecated */

arm_status arm_cfft_radix4_init_f32(arm_cfft_radix4_instance_f32 * S,
uint16_t fftLen, uint8_t ifftFlag, uint8_t bitReverseFlag);

/* Deprecated */

void arm_cfft_radix4_f32(const arm_cfft_radix4_instance_f32 * S,float32_t * pSrc);

/**

* @brief Floating-point complex magnitude
* @param[in] pSrc points to the complex input vector
* @param[out] pDst points to the real output vector
* @param[in] numSamples number of complex samples in the input vector
*/

void arm_cmplx_mag_f32(float32_t * pSrc, float32_t * pDst,uint32_t numSamples);



第一个函数 arm_cfft_radix4_init_f32,用于初始化 FFT 运算相关参数,其中: fftLen 用于指
定 FFT 长度(16/64/256/1024/4096),本章设置为 1024; ifftFlag 用于指定是傅里叶变换(0)还是
反傅里叶变换(1),本章设置为 0; bitReverseFlag 用于设置是否按位取反,本章设置为 1;最后,
所有这些参数存储在一个 arm_cfft_radix4_instance_f32 结构体指针 S 里面。
第二个函数 arm_cfft_radix4_f32 就是执行基 4 浮点 FFT 运算的, pSrc 传入采集到的输入信
号数据(实部+虚部形式),同时 FFT 变换后的数据,也按顺序存放在 pSrc 里面, pSrc 必须大
于等于 2 倍 fftLen 长度。另外, S 结构体指针参数是先由 arm_cfft_radix4_init_f32 函数设置好,
然后传入该函数的。
第三个函数 arm_cmplx_mag_f32 用于计算复数模值,可以对 FFT 变换后的结果数据,执行
取模操作。 pSrc 为复数输入数组(大小为 2*numSamples)指针,指向 FFT 变换后的结果; pDst
为输出数组(大小为 numSamples)指针,存储取模后的值; numSamples 就是总共有多少个数
据需要取模。
通过这三个函数,我们便可以完成 FFT 计算,并取模值。
 

除此之外:还能计算PID等,填入参数就行。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32 H7是一款由STMicroelectronics推出的微控制器系列,它采用了Cortex-M7内核。Cortex-M7内核在DSP性能方面表现最强,相比于其他Cortex-M系列内核(如M3、M4和M33),它具有更高的性能。而Cortex-M0、M0+和M23则在性能方面相对较弱。\[1\] 关于STM32 H7DSP功能,它与专业的DSP芯片有一些区别。首先,STM32 H7系列与Cortex-M4系列具有相同的DSP指令集,这意味着它们可以执行相似的数字信号处理任务。而Cortex-M7相比于Cortex-M4系列,还增加了一些浮点指令集,这些指令以字符"V"开头。通过检查反汇编代码中是否存在这些浮点指令,可以验证是否正确开启了FPU(浮点运算单元)。\[2\] 需要注意的是,DSP在这里有两层含义。一层是指DSP芯片,即数字信号处理器,另一层是指数字信号处理技术。在本教程中,我们主要讲解的是后者,即数字信号处理技术。\[3\] 综上所述,STM32 H7具备较强的DSP性能,可以执行数字信号处理任务,并且相比于其他Cortex-M系列内核,它在性能上更为出色。同时,它与专业的DSP芯片在指令集和功能上有一些区别。 #### 引用[.reference_title] - *1* *2* *3* [【STM32H7DSP教程】第1章 初学数字信号处理准备工作](https://blog.csdn.net/Simon223/article/details/105196935)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值