stm32cubemx stm32f4之 使能 硬件fpu 和使用dsp库 测试结果(详细)

stm32cubemx配置

复制全部的库,里面含有dsp库 等
在这里插入图片描述

keil配置

开启硬件浮点单元

stm32cubemx新建完成的stm32f4系列的工程,在keil配置这里应该是自动默认开启的
在这里插入图片描述

然后可见 这里为灰色 使能硬件fpu 未开启,
在这里插入图片描述
查看定义可见
在这里插入图片描述
可以发现这两个 没有进行定义
在这里插入图片描述
于是加入宏定义

__CC_ARM,__TARGET_FPU_VFP

在这里插入图片描述
点ok ,重新编译

再看 变亮了 可见开启了 硬件fpu
在这里插入图片描述

加入头文件

为了方便 在需要使用的文件里面
我直接加在main.h 里
在这里插入图片描述
再加入一个宏定义

ARM_MATH_CM4

在这里插入图片描述
加入他的路径
在这里插入图片描述

最后加入优化库

drive–>cmsis–>lib–>arm
在这里插入图片描述

2021.8.30

tim2配置10ms


  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  TIM_MasterConfigTypeDef sMasterConfig = {0};

  /* USER CODE BEGIN TIM2_Init 1 */

  /* USER CODE END TIM2_Init 1 */
  htim2.Instance = TIM2;
  htim2.Init.Prescaler = 8399;
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim2.Init.Period = 99;
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;

测试代码部分

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
  * All rights reserved.</center></h2>
  *
  * This software component is licensed by ST under BSD 3-Clause license,
  * the "License"; You may not use this file except in compliance with the
  * License. You may obtain a copy of the License at:
  *                        opensource.org/licenses/BSD-3-Clause
  *
  ******************************************************************************
  */
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "adc.h"
#include "fatfs.h"
#include "tim.h"
#include "usart.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
uint64_t sum=0;
uint64_t end=0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  if(htim->Instance==TIM2)
	{   end=0;
		   end=sum;
		  sum=0;
	    //printf("次数为%lld",sum);
	     
		
	}
}
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */
float  a=5.4698f;
float  b=3.246f;
float  c =2.35469f;

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ADC1_Init();
  MX_TIM1_Init();
  MX_TIM2_Init();
  MX_USART1_UART_Init();
  MX_FATFS_Init();
  /* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim2);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		a=arm_sin_f32(a);
		b=arm_sin_f32(b);
		c=arm_sin_f32(c);
	/*	a=sin(a);
		b=sin(b);
		c=sin(c);*/  
		sum++;
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}



/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

未用fpu的sin()函数

在这里插入图片描述
用了fpu的 arm_sin_f32()函数
在这里插入图片描述

2021.9.1

经测试 使用arm_sqrt_f32() 等较为复杂的 数学方法 比未优化的 sqrt() 能快上接近100倍。
但 简单的加减乘除 , 用优化库 arm_add_f32 , arm_sub_f32等, 反而会变得更慢。

  • 9
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
STM32F4 DSP是一种用于在STM32F4系列微控制器上进行数字信号处理的。它提供了一系列的函数和算法,用于实现基本的数学运算、滤波、FFT、向量操作等。\[1\] 要在STM32F4使用DSP,需要进行一些环境配置。首先,在CUBEMX中生成工程时,需要勾选生成工程时添加所有。然后,在Keil中进行宏定义,包括__FPU_PRESENT=1、__TARGET_FPU_VFP、ARM_MATH_CM4和__CC_ARM。接下来,在Keil中添加DSP的位置,即../Drivers/CMSIS/DSP/Include。然后,将lib文件的lf后缀添加到工程的core文件夹下。最后,在使用函数时,需要包含头文件arm_math.h,并编译工程。\[2\] 通过以上配置和使用,您可以在STM32F4使用DSP来实现各种数字信号处理的功能。 #### 引用[.reference_title] - *1* [stm32F407-------DSP学习](https://blog.csdn.net/qq_53889131/article/details/125983021)[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] - *2* [STM32F4DSP](https://blog.csdn.net/weixin_44229819/article/details/124160520)[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 ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值