打印
[其它]

如何在工程中正确开启硬件FPU单元

[复制链接]
821|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
如何在工程中正确开启硬件FPU单元

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

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

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



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

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


使用特权

评论回复
沙发
戊戌变法| | 2021-4-28 13:45 | 只看该作者
想问一下 这两步 分别是 开启了编译器的生成代码时加入浮动运算指令,一个是使能芯片浮点运算功能 可以这样理解吗

使用特权

评论回复
评论
muyichuan2012 2021-4-28 14:51 回复TA
是的 
板凳
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


.....
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

179

主题

274

帖子

10

粉丝