STM32H743 开启FPU下 常用数学运算所需的机器周期,图文详解,含源码

本文档详细介绍了如何在STM32H743上启用FPU并移植DSP库进行浮点运算性能测试。通过编写定时器驱动,测试了加减乘除、正弦、余弦等数学运算的机器周期,并对比了库函数与C标准库的执行效率。实验结果显示,开启FPU后,基础运算在10个机器周期左右,而arm_sin_f32和arm_cos_f32比C库的sin和cos更快。
摘要由CSDN通过智能技术生成

一、建立工程

这里不做详细解释,网上有很多教程。

 

二、移植DSP库

1、打开FPU,需要在编译器的Options中配置相关参数。因为STM32H7系列是双精度的FPU,所以这里选择Double Precision。

2、配置预处理符号:

为了方便各位大侠拷贝,这里贴出来具体的配置语句:ARM_MATH_CM7,__CC_ARM,ARM_MATH_MATRIX_CHECK,ARM_MATH_ROUNDING

 

3、移植DSP库进入代码中,我这里使用封装成lib库的dsp库,各位也可以选择源码xx.c

加入工程后的样子

注:DSP库 各位可以在st官网下载!

 

4、加入头文件的链接

到这里为止,所有的配置都弄好了,接下来准备撸代码!

 

关于加入固件库更基础知识这里不做介绍,各位大侠可以在网上找到很多教程。

 

三、编写定时器驱动

void TIM5_Int_Init(uint32 arr,uint16 psc)

{

volatile TIM_HandleTypeDef TIM5_Handler; //定时器句柄

__HAL_RCC_TIM5_CLK_ENABLE(); //使能TIM5时钟

 

TIM5_Handler.Instance = TIM5; //通用定时器5

TIM5_Handler.Init.Prescaler = psc; //分频

TIM5_Handler.Init.Period = arr; //自动装载值

TIM5_Handler.Init.CounterMode = TIM_COUNTERMODE_UP; //向上计数器

TIM5_Handler.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; //时钟分频因子

TIM5_Handler.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; //使能自动预装载

 

HAL_TIM_Base_DeInit((TIM_HandleTypeDef*)&TIM5_Handler);

HAL_TIM_Base_Init((TIM_HandleTypeDef*)&TIM5_Handler);

 

HAL_TIM_Base_Start((TIM_HandleTypeDef *)&TIM5_Handler);

}

 

四、编写测试程序

1、测试的功能函数

#define APB1_TIME5_CLK_MHZ (uint8)(200)

#define TIME5_ARR_VALUE (uint32) (60000)

#define TIME_BUFF_NUM (uint8)(10)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值