/* FPU settings 303*/
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
#endif
Советы из инета.
Нужно стараться, чтобы все переменные были float а не double. По умолчанию компилятор делает double, и в этом случае сопроцессор особо не помогает.
В прерываниях плавучку не использовать (либо озаботиться сохранением плавучего контекста).
после инициализации переменной нужно букву f ставить.
Либо указать ключ -fsingle-precision-constant (это для gcc). Тогда все константы по умолчанию будут float, а не double.
По умолчанию константы с плавающей точкой считаются double. А если в выражении хоть один операнд является double, то все другие операнды преобразуются в double, и вычисления производятся в double. Так работает си.


