ArterySW 发表于 2021-4-27 22:27

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

如何在工程中正确开启硬件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-5-7 10:00


简而言之,除了keil等编译器要配置FPU外,代码中也要有下面黑体加粗部分代码。
/**
* @briefSetup the microcontroller system
*         Initialize the Embedded Flash Interface, the PLL and update the
*         SystemCoreClock variable.
* @NOTE   This function should be used only after reset.
* @paramNone
* @retval None
*/
void SystemInit (void)
{
#if defined (AT32F415xx)
/* Enable low power mode, 0x40007050 */
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

.....
}
页: [1]
查看完整版本: 如何在工程中正确开启硬件FPU单元