【经验】MCU在keil和IAR中开启FPU 硬件浮点运算单元

本文是总结归纳了两篇笔记:
关于华大/小华 HC32F460 在IAR环境中,无法启用FPU 硬件浮点运算单元的解决方案
【经验】雅特力MCU在Keil和IAR中开启和关闭浮点运算单元(FPU)的配置方法及注意事项

第一步

  • 先查看所使用的MCU的手册,是否内置了FPU单元;
  • 直接数据手册或应用手册全文搜索字样就行;比如:

在这里插入图片描述

第二步

  • 查看所使用的MCU库是否包含FPU宏定义内容;
  • 也是打开一个库例程,然后全文搜索即可;比如:

在这里插入图片描述

第三步

  • keilIAR中打开对应选项;
  • 偷个懒,下面是从别人帖子那借来的图.

在这里插入图片描述
在这里插入图片描述

  • 如果选项是灰色的,代表所选芯片不支持FPU.如果确定是手册写支持的话,那可能是没有安装.

在这里插入图片描述

  • 以小华的为例,可以打卡它的官网,打开对应单片机的页面,下载资源;

在这里插入图片描述

总结

  • 然后FPU就会生效了,代码中计算浮点数的部分甚至可能比计算整数还快(?)
在STM32CubeMX中启用FPU浮点运算单元)功能,尤其是针对STM32F4系列MCU,可以通过以下步骤进行配置,确保生成的代码保留FPU支持,且不会因后续CubeMX重新生成代码而丢失配置。 ### 配置步骤 1. **选择正确的MCU型号** 在STM32CubeMX中选择目标MCU时,确保选择的是支持FPU的型号,例如STM32F4系列。FPU是该系列芯片的硬件特性之一[^1]。 2. **进入“System Core” -> “SYS”配置项** 在“SYS”配置中,找到“Debug”选项。默认情况下,调试接口是启用的。确保“Trace”选项未启用,否则可能影响FPU配置。 3. **启用FPU支持** 在“System Core” -> “NVIC”或“System Core” -> “FPU”选项中(不同版本的CubeMX可能略有不同),找到FPU配置部分。将FPU设置为“Enabled”或“Full Access”,这样可以让FPU在用户模式特权模式下都能使用[^4]。 4. **生成代码** 完成上述配置后,点击“Project” -> “Generate Code”生成代码。CubeMX会在`main.c`文件中自动添加FPU初始化代码,例如: ```c HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_FPU_Init(); // FPU初始化代码 ``` 5. **检查生成的`stm32f4xx_hal_msp.c`文件** 在MSP(MCU Support Package)初始化函数中,确保FPU被正确启用。例如,在`HAL_MspInit()`函数中,应包含以下代码: ```c void HAL_MspInit(void) { /* Enable FPU */ SCB->CPACR |= (3UL << 10 * 2) | (3UL << 11 * 2); // Enable CP10 and CP11 for Full Access } ``` 6. **确保编译器支持FPU** 在生成的项目中,确保编译器选项启用FPU支持。例如,在Keil MDK中,进入“Options for Target” -> “C/C++” -> “Misc Controls”,添加`--fpu=vfpv4-sp-d16`等选项。在GCC编译器中,确保添加了`-mfpu=vfpv4-sp-d16``-mfloat-abi=hard`参数[^2]。 7. **测试FPU功能** 编写简单的浮点运算代码,例如: ```c float a = 3.1415926535f; float b = 2.0f; float result = a * b; ``` 并通过串口打印结果,确保FPU正常工作。 ### 注意事项 - **保持CubeMX生成代码的完整性**:不要手动修改CubeMX生成的初始化代码,避免在重新生成代码时覆盖FPU配置[^1]。 - **使用HAL库或DSP库**:可以结合STM32 HAL库CMSIS DSP库进行高效的浮点运算。 - **调试FPU状态**:如果遇到FPU未生效的情况,可以通过调试器检查`SCB->CPACR`寄存器的值是否正确设置了CP10CP11位。 ### 示例代码片段 以下是一个简单的FPU初始化代码片段: ```c void MX_FPU_Init(void) { /* Enable FPU */ SCB->CPACR |= (3UL << 10 * 2) | (3UL << 11 * 2); // Enable CP10 and CP11 for Full Access } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值