How can I save a floating point value to a Microcontroller data Flash
Your problem probably arises from an implicit type conversion from a float to an int at this line: 

FMC-&gt;ISPDAT = 22.5;                 /* Set Data to Program */

If it were me working on this, I would bundle a float and an int into a union like this:

union {
   uint32_t intVal;
   float floatVal;
} myUnion;


And then simply write the number into the float field:

myUnion.floatVal = 22.5f;

and then read the value as an int like so: 

FMC-&gt;ISPDAT = myUnion.intVal;

This example assumes that sizeof(float) == sizeof(uint32_t) on your system. Alternatively you can do some compile time gymnastics to make a byte array the same size as your float size like so:

union {
   uint8_t[sizeof(float)] byteArray;
   float floatVal;
} myUnion;


Which works because sizeof is a compile time operator. One additonal note, you'll notice I added an 'f' after the 22.5. This informs the compiler to treat the number literal as a float and not as an int, which evidently is the type it would prefer. This is why your number is being truncated to 22.0, since there is an implicit int conversion taking place, most likely because the ISPDAT member of the FMC struct is an integral type of some kind.