关闭

STM32F4 FPU简单设置

标签: stm32DSP浮点运算FPUstm32算法
396人阅读 评论(0) 收藏 举报
分类:

第一步:
在stm32f4xx.h中定义宏__FPU_PRESENT ; __FPU_USED

#define __CM4_REV                 0x0001  /*!< Core revision r0p1                            */
#define __MPU_PRESENT             1       /*!< STM32F4XX provides an MPU                     */
#define __NVIC_PRIO_BITS          4       /*!< STM32F4XX uses 4 Bits for the Priority Levels */
#define __Vendor_SysTickConfig    0       /*!< Set to 1 if different SysTick Config is used  */
#define __FPU_PRESENT             1       /*!< FPU present                                   */
#define __FPU_USED                1

第二步:
在stm32f4xx.h中增加头文件arm_math.h

#include "core_cm4.h"             /* Cortex-M4 processor and core peripherals */
#include "system_stm32f4xx.h"
#include <stdint.h>
#include "arm_math.h"

第三步:
在system_stm32f4xx.c的SystemInit()中添加如下代码:

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

第四步:
在配置的c++界面添加宏定义ARM_MATH_CM4, __CC_ARM

这里写图片描述
第五步 :
编译写个测试程序测试下代码

static void TaskProcess(void)
{
    static uint8_t flag = 0;
    static uint8_t eeprom_cmd = 1;
    static uint16_t i = 0;
    static float num_f = 0;
    static float a = 3.1415926;
    static float b = 87.6;
    static float c = 76.987;

    sd_card_test();
    TIM_SetCounter(RUNTIMER_TIM, 0);
    num_f = a * b / c;

        printf("t %dus \r\n",TIM_GetCounter(RUNTIMER_TIM)); 

  while(1); 
    while (1)
    {   
    printf("Hello STM32");
    }
}

定时器时钟为84M,不分频。
开启FPU运算时长为22×1/84 us;
不开启FPU运算时长为192×1/84 us;
可见开启FPU浮点运算乘除法快了8.7倍!!!
这里写图片描述

0
0
查看评论

stm32 C语言的数据类型说明

该文章参考和转载:http://www.cnblogs.com/wangh0802PositiveANDupward/archive/2013/01/01/2841697.html。 stm32编程过程经常定义变量类型,经常担心数据运算过程中 超过变量类型范围。因为在编程过程中,不同的CPU,其数据...
  • hailin0716
  • hailin0716
  • 2015-10-17 11:07
  • 3093

STM32F4xx FPU/DSP使用注意事项

1. ------对于Keil MDK Version 5 版本, 编译器已经完全支持STM32F4xx 的FPU(浮点运算单元),可以直接 使用芯片内部的浮点运算单元。 2. ------对于Keil MDK Version 4 版本, 高版本v4,比如当前keil 官网可下载的v4.74.0...
  • xingqingly
  • xingqingly
  • 2016-11-12 22:07
  • 1677

使用STM32F4XX自带数学库"arm_math.h"

转自搜狐博客Enjoy Yourself~ 使用STM32F4XX自带数学库"arm_math.h"         STM32-F4属于Cortex-M4F构架,这与M0、M3的最大不同就是具有FPU...
  • wl111143
  • wl111143
  • 2015-08-18 16:35
  • 4640

STM32系列的浮点运算能力

从文档en.brstm32-STM32 32-bit MCU family - Leading supplier of ARM® Cortex®-M microcontrollers来看 STM32F7/4/3, STM32L4 都带有DSP和浮点运算单元 系列 频率 特...
  • danteLiujie
  • danteLiujie
  • 2016-07-08 10:40
  • 6538

STM32的FPU体验

STM32-F4属于Cortex-M4构架,与M0、M3的最大不同就是有硬件浮点运算FPU,数学计算速度相比普通cpu运算快上几十倍。想要使用FPU首先包含#include “arm_math.h”,还有在keil的target选项中勾选use single preci...
  • oXiaRiDeBing
  • oXiaRiDeBing
  • 2016-03-16 19:36
  • 7743

STM32F4xx FPU和DSP库的使用

详细介绍了STM32F407 FPU和DSP库的使用
  • electrocrazy
  • electrocrazy
  • 2017-06-19 08:56
  • 2007

STM32F407IG开启FPU,做开方运算

STM32F4xx自带DSP处理器,FPU单元,做开方效率很高。但是有些设置要注意: 如图: 首先,Use FPU要选上; 然后,这些要包含进去: 检查一下你的项目里有没有这个文件,如果有,如果编译通过,恭喜你,可以用开方指令了。如图: 做了个勾股定理运算,求斜边。。。
  • wuxinke_blog
  • wuxinke_blog
  • 2015-10-09 00:50
  • 2634

STM32F4之FPU性能的充分发挥-设置要点

浮点运算一直是定点CPU的难题,比如一个简单的1.1+1.1,定点CPU必须要按照IEEE-754标准的算法来完成运算,对于8位单片机来说已经完全是噩梦,对32为单片机来说也不会有多大改善。虽然将浮点数进行Q化处理能充分发挥32位单片机的运算性能,但是精度受到限制而不会太高。对于有FPU(浮点运算单...
  • xiaofeng1234
  • xiaofeng1234
  • 2014-08-27 11:13
  • 1251

STM32F4之FPU设置

http://hi.baidu.com/atf144x     浮点运算一直是定点CPU的难题,比如一个简单的1.1+1.1,定点CPU必须要按照IEEE-754标准的算法来完成运算,对于8位单片机来说已经完全是噩梦,对32为单片机来说也不会有多大改善。...
  • anbaixiu
  • anbaixiu
  • 2017-08-02 16:31
  • 203

STM32F4 DMA双缓冲的正确打开方式

  • 2016-08-03 15:33
  • 46KB
  • 下载
    个人资料
    • 访问:5456次
    • 积分:182
    • 等级:
    • 排名:千里之外
    • 原创:12篇
    • 转载:5篇
    • 译文:0篇
    • 评论:0条
    文章分类