为什么转换为浮点数会在 STM32F429ZI 上遇到硬错误 (App_Fault_ISR)

Why does casting to a float hits a hard error on STM32F429ZI (App_Fault_ISR)

为什么转换为浮点数会在 STM32F429ZI (App_Fault_ISR) 上遇到硬错误?

我不太确定这里发生了什么。 我在 Atollic TrueSTUDIO

上使用 Nucleo 开发板 STM32F429ZI

代码

CPU_FP32 speed;
CPU_INT32U val = (CPU_INT32U)(0x20u >> 4u);
speed = (CPU_FP32)val;

上次崩溃的程序集

080026f2:   bl      0x8001dc8 <BSP_Tick_Init>
51            CPU_INT32U val = (CPU_INT32U)(0x20u >> 4u);
080026f6:   movs    r3, #2
080026f8:   str     r3, [r7, #4]
52            speed = (CPU_FP32)val;
080026fa:   ldr     r3, [r7, #4]
080026fc:   vmov    s15, r3            <----  

看起来像是一个移动问题

检测到硬故障Window shos

总线、内存管理或使用错误(强制) 额外的细节 尝试执行协处理器指令 (NOCP)

这落在 App_Fault_ISR 上,这似乎是一个硬故障

就配置而言 汇编器、编译器和 C 链接器在设置中启用了 FPU (FPv4-SP-D16) 已选择硬件实现

您似乎没有启用 FPU,这需要在尝试任何浮点指令之前完成。您必须在 CPACR 寄存器中设置位 20-23。

这个link显示了所需的步骤,我通常在启动代码中这样做。