[应用相关] 如何在AT32 MCU上使用FPU功能。

[复制链接]
247|4
MCU学习帮 发表于 2026-1-28 09:37 | 显示全部楼层 |阅读模式
前言:
这篇应用笔记描述了如何在AT32 MCU上使用FPU功能。
支持型号列表:具备FPU的型号

1                 必要的代码准备1.1           程序中开启FPU
打开system_at32f4xx.c文件,找到函数void SystemInit(void),确保内核有开启FPU功能,如图1黑斜体字部分。
注意:程序中开启FPU是必要条件。若仅开启KeilIAR上的FPU,程序中未开启,则程序运行时会进入hardfault.
图1. 程序中开启FPU
  
void SystemInit (void)
  
{
  
#if defined (__FPU_USED) && (__FPU_USED ==  1U)
  
   SCB->CPACR |= ((3U << 10U * 2U) |         /* set cp10 full access */
  
                  (3U << 11U * 2U)  );       /* set cp11 full access */
  
#endif
  
  
  /* reset the crm clock  configuration to the default reset state(for debug purpose) */
  
  /* set hicken bit */
  
  CRM->ctrl_bit.hicken =  TRUE;
  
  
  /* wait hick stable */
  
  while(CRM->ctrl_bit.hickstbl  != SET);
  
  
  /* hick used as system clock  */
  
  CRM->cfg_bit.sclksel =  CRM_SCLK_HICK;
  
  
  /* wait sclk switch status */
  
  while(CRM->cfg_bit.sclksts  != CRM_SCLK_HICK);
  
  
……………………………………………………………
  
……………………………………………………………
  
}
  

2                 Keil中配置FPU2.1           开启FPU
Options for Target->Target->Floating Point Hardware,选择Use Single Precision
2.2            关闭FPU
Options for Target->Target->Floating Point Hardware,选择Not Used
3                 IAR中配置FPU3.1           开启FPU
Options ->General Options->FPU,选择VFPv4 singleprecision
3.2            关闭FPU
Options ->General Options->FPU,选择None


桃花落满山前 发表于 2026-2-26 21:32 | 显示全部楼层
AT32 MCU 启用 FPU 需先在编译器开启 FPU 编译选项,再配置 SCB_CPACR 寄存器解锁 FPU 访问,初始化时使能 FPU 硬件,最后调用浮点运算函数即可。
花开了相爱吧 发表于 2026-2-11 11:57 | 显示全部楼层
AT32 MCU 启用 FPU 需先在编译器开启 - mfloat-abi=hard 编译选项,配置 SCB_CPACR 寄存器解锁 FPU,初始化使能 FPU 硬件,即可执行浮点运算。
旧年胶片 发表于 2026-2-26 20:19 | 显示全部楼层
在启动文件中开启 FPU(使能 CP10/CP11),编译器开启硬件浮点编译选项,代码中直接调用浮点运算函数即可。
xuanhuanzi 发表于 2026-3-2 10:20 | 显示全部楼层
在程序初始化阶段通过配置系统控制块 (SCB) 的 CPACR 寄存器来解锁 FPU,使其能参与浮点运算。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

52

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0