title: STM32 IAP Application Jump Condition Not Satisfied
body: <p>I have a boot code at 0x08000000 and an application code at 0x08060000. I can jump to application from boot code if I comment out the condition check shown below:</p>
  
  <pre><code>//if (( (*(__IO uint32_t*)0x08060000) &amp; 0x2FFE0000 ) == 0x20000000)
  {
      JumpAddress = *(__IO uint32_t*)( 0x08060000 + 4 );
      Jump_To_Application = (pFunction)JumpAddress;
      __set_MSP( *(__IO uint32_t*)0x08060000 );
      Jump_To_Application();
  }
  </code></pre>
  
  <p>The condition is not satisfied as the left side is equal to 0x20020000. I don't understand why it is 0x20020000 instead of being 0x20000000.</p>
  
  <p>Why do we check the content of the start address with 0x20000000. What is stored in this memory address and what should it be normally?</p>