详细内容参考Cortex-M4内核编程手册
stm32f4xx及更高配置stm32单片机才有fpu支持
stm32f4带有32位单精度硬件FPU,支持浮点指令集,整个FPU单元能被使能和关闭
使用协处理器控制寄存器(SCB->CPACR)中的CP11和CP10启用/关闭FPU
芯片复位后,CP10、CP11四个位默认为0,FPU关闭
==将CP10、CP11同时置位即可开启FPU==
system_stm32f4xx.c截取
void SystemInit(void)
{
/* FPU settings ------------------------------------------------------------*///这里是FPU设置
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
#endif
/* Reset the RCC clock configuration to the default reset state ------------*/
/* Set HSION bit */
RCC->CR |= (uint32_t)0x00000001;
/* Reset CFGR register */
RCC->CFGR = 0x00000000;
/* Reset HSEON, CSSON and PLLON bits */
RCC->CR &= (uint32_t)0xFEF6FFFF;
/* Reset PLLCFGR register */
RCC->PLLCFGR = 0x24003010;
/* Reset HSEBYP bit */
RCC->CR &= (uint32_t)0xFFFBFFFF;
/* Disable all interrupts */
RCC->CIR = 0x00000000;
#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
SystemInit_ExtMemCtl();
#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */
/* Configure the System clock source, PLL Multiplier and Divider factors,
AHB/APBx prescalers and Flash settings ----------------------------------*/
SetSysClock();
/* Configure the Vector Table location add offset address ------------------*/
#ifdef VECT_TAB_SRAM
SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
#else
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
#endif
}
本质方法:设置CPACR寄存器
将**__FPU_PRESENT** 和 __FPU_USED 置1即可开启FPU
- 直接设置SCB->CPACR寄存器的CP10和CP11为1
- 在代码中配置:
#define __FPU_USED 1
- 在MDK,Target选项卡中,将Float Point Hardware选项设置为Use Single Precision
stm32f4xx及更高配置stm32单片机才有DSP支持
stm32f4带有32位单精度硬件DSP,支持DSP指令集,支持单周期乘加指令(MAC)、优化的单指令多数据指令(SIMD)、饱和算数等数字信号处理指令集。M4执行所有DSP指令集都能在单周期完成
整个DSP单元能被使能和关闭
支持有符号/无符号乘法、有符号/无符号乘加、有符号/无符号长数据(64位)乘加
可同时有多个数据参与运算
存放在STM32F4xx_DSP_StdPeriph_Lib/Libraries/CMSIS/DSP_Lib/Source下
基本数学函数,提供浮点数各种基本运算,包括向量运算
提供位反转或相关参数表
复杂数学功能,包括向量处理、求模运算等
控制功能函数,包括正余弦、PID电机控制、矢量Clarke变换、矢量Clarke逆变换等
快速数学功能函数,提供快速近似正余弦、平方根等算法
滤波函数功能,主要为FIR、LMS(最小均方根)等滤波函数
矩阵处理函数,包括、矩阵初始化、矩阵转置、矩阵反、矩阵加法、矩阵乘法、矩阵规模、矩阵减法等函数
统计功能函数,包括求平均值、最值、计算均方根RMS、计算方差/标准差等
支持功能函数,如数据拷贝、Q格式和浮点格式转换、Q任意格式相互转换
变换功能,包括复数FFT(CFFT)/复数FFT逆运算(CIFFT)、实数FFT(RFFT)/实数FFT逆运算(RIFFT)、DCT(离散余弦变换)和配套初始化函数
DSP源码库较大,ST提供了.lib格式的文件,在代码中引入lib文件即可
- 添加文件
拷贝STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/CMSIS/Include到DSP_LIB
- 包含DSP_LIB文件与路径
- 添加全局宏定义
#define __FPU_USED 1 //在MDK中开启即可不填
#define __FPU_PRESENT 1 //在stm32f4xx.h中默认开启,可不填
//将下面四个部分用逗号隔开添加到MDK的define选项中
ARM_MATH_CM4
__CC_ARM
ARM_MATH_MATRIX_CHECK
ARM_MATH_ROUNDING
- 需要哪些函数就将对应lib和配置添加到MDK