1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
FPU 简介
FPU 即浮点运算单元(Float Point Unit)。浮点运算,对于定点 CPU(没有 FPU 的 CPU)来说必须要按照IEEE-754 标准的算法来完成运算,是相当耗费时间的。而对于有 FPU 的 CPU来说,浮点运算则只是几条指令的事情,速度相当快。 STM32F4 属于 Cortex M4F 架构,带有 32 位单精度硬件 FPU,支持浮点指令集,相对于 Cortex M0 和Cortex M3 等,高出数十倍甚至上百倍的运算性能。 STM32F4 硬件上要开启 FPU是很简单的,通过一个叫:协处理器控制寄存器(CPACR)的寄存器设置即可开启 STM32F4 的硬件 FPU。 简单来说,FPU是集成在STM32F4系列以上的一个专用浮点运算处理器,相当于我们电脑中专门用于处理图像计算的GPU,在处理浮点运算时,速度比CPU处理要快几十倍,是一种专用型的处理单元。在STM32 F4系列中,带有该单元,我们只需要设置 CPACR 寄存器即可。 DSP 简介 STM32F429 采用 Cortex-M4 内核,相比 Cortex-M3 系列除了内置硬件 FPU 单元,在数字信号处理方面还增加了DSP 指令集,支持诸如单周期乘加指令(MAC),优化的单指令多数据指令(SIMD),饱和算数等多种数字信号处理指令集。相比Cortex-M3,Cortex-M4 在数字信号处理能力方面得到了大大的提升。Cortex-M4 执行所有的 DSP指令集都可以在单周期内完成,而 Cortex-M3 需要多个指令和多个周期才能完成同样的功能。 DSP (数字信号处理),FPU是硬件,ST提供了FPU的库叫做DSP库,用于FPU的使用。DSP库之于FPU就如同 HAL库 之于 STM32 一样,是ST公司为硬件所开发的软件库。 工程中开启FPU和DSP库移植 1. CUBEMX生成包含DSP库的代码 在生成工程的 Project Manager 选项卡中,一定要选择 Copy all used libraries into the project folder 这样 CUBEMX才会复制DSP库到工程文件夹中。 2. 在KEIL中开启FPU 在HAL库中 FPU的开启与否在 Drivers/CMSIS system_stm32f4xx.c 中的 SystemInit 函数 /* FPU settings ------------------------------------------------------------*/ #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) SCB-》CPACR |= ((3UL 《《 10*2)|(3UL 《《 11*2)); /* set CP10 and CP11 Full Access */ #endif 2. 1 KEIL中开启FPU Target 选项中 Floating Point Hardware 选项选择 Single Precision 开启浮点运算单元。 2. 2 KEIL中添加定义 根据该定义我们在KEIL的全局定义中加上宏定义即可 __FPU_PRESENT // FPU状态 __FPU_USED // FPU使用标志 另外还需要添加几个必须宏 ARM_MATH_CM4 //在Cortex-M4目标上构建库 __CC_ARM //ARM 可选宏 ARM_MATH_ROUNDING //用于舍入支持功能 ARM_MATH_MATRIX_CHECK //检查矩阵的输入和输出大小 因此总计需要添加如下宏 ,__FPU_PRESENT=1,__FPU_USED=1,ARM_MATH_CM4,__CC_ARM 3. 添加DSP库 CUBEMX生成之后,DSP库位于 工程目录/Driver/CMSIS/DSP DSP文件夹 中包含了所有 DSP库 的源文件。 进入Source文件夹,是所有 DSP 库的源码。 所有这些 DSP 库代码合在一起是比较多的,因此,ST 为我们提了.lib 格式的文件,方便使用。这些.lib 文件就是由 Source 文件夹下的源码编译生成的,如果想看某个函数的源码,大家可以在 Source 文件夹下面查找。.lib 格式文件 HAL 库位于:工程目录/Driver/CMSIS/LIB/ARM, 总共有 4 个.lib 文件,如下: ① arm_cortexM4b_math.lib (Cortex-M4 大端模式) ② arm_cortexM4l_math.lib (Cortex-M4 小端模式) ③ arm_cortexM4bf_math.lib (浮点 Cortex-M4 大端模式) ④ arm_cortexM4lf_math.lib (浮点 Cortex-M4 小端模式) 我们得根据所用 MCU 内核类型以及端模式来选择符合要求的.lib 文件,本章我们所用的 STM32F4 属于 CortexM4F 内核,小端模式,应选择:arm_cortexM4lf_math.lib(浮点 Cortex-M4 小端模式)。 因此在KEIL中我们添加 arm_cortexM4lf_math.lib就可以了。 测试 FPU DSP库至此移植完毕 但现在编译会出现警告 warning: #47-D: incompatible redefinition of macro “__FPU_PRESENT” 嗯不影响使用但是作为一个强迫症肯定是忍不了的 暂时先将 warning 改为 no warning 解决问题 待日后有时间了再详细分析分析。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 21:18 , Processed in 0.845710 second(s), Total 75, Slave 59 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号