[其它] 如何在工程中正确开启硬件FPU单元

[复制链接]
1266|3
 楼主| ArterySW 发表于 2021-4-27 22:27 | 显示全部楼层 |阅读模式
如何在工程中正确开启硬件FPU单元

在使用带硬件FPU单元的CM4内核MCU时,往往会出现开启硬件FPU方法不对,导致系统异常。

正确开启FPU单元的操作步骤如下:

1.在keil环境下需如下配置:

3.png


2.经过第一步还不够,还需要软件使能配置FPU模块,具体代码如下:

SCB->CPACR|= ((3U << 10U * 2U) |         /*set CP10 Full Access */
                 (3U<< 11U * 2U)  );       /* set CP11 Full Access */
通过以上操作即可使用硬件FPU对浮点运算进行处理了!


戊戌变法 发表于 2021-4-28 13:45 | 显示全部楼层
想问一下 这两步 分别是 开启了编译器的生成代码时加入浮动运算指令,一个是使能芯片浮点运算功能 可以这样理解吗

评论

是的  发表于 2021-4-28 14:51
muyichuan2012 发表于 2021-5-7 10:00 | 显示全部楼层

简而言之,除了keil等编译器要配置FPU外,代码中也要有下面黑体加粗部分代码。
/**
  * @brief  Setup the microcontroller system
  *         Initialize the Embedded Flash Interface, the PLL and update the
  *         SystemCoreClock variable.
  * @NOTE   This function should be used only after reset.
  * @param  None
  * @retval None
  */
void SystemInit (void)
{
#if defined (AT32F415xx)
  /* Enable low power mode, 0x40007050[bit2] */
  RCC_APB1PeriphClockCmd(RCC_APB1PERIPH_PWR, ENABLE);
  *(volatile uint8_t *)(0x40007050) |= (uint8_t)(0x1 << 2);
  RCC_APB1PeriphClockCmd(RCC_APB1PERIPH_PWR, DISABLE);
#endif

#if defined (__FPU_USED) && (__FPU_USED == 1U)
  SCB->CPACR |= ((3U << 10U * 2U) |         /* set CP10 Full Access */
                 (3U << 11U * 2U)  );       /* set CP11 Full Access */
#endif


.....
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

198

主题

304

帖子

17

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