//----- functions ----- void sampleMemory_init() { FLASH_If_Init(); //disable write protection if enabled if(FLASH_If_GetWriteProtectionStatus()) { FLASH_If_DisableWriteProtection(); } #if USE_SD_CARD sdManager_init(); #endif }
/** * @brief Display the Main Menu on HyperTerminal * @param None * @retval None */ void Main_Menu(void) { uint8_t key = 0; SerialPutString("\r\n======================================================================"); SerialPutString("\r\n= (C) COPYRIGHT 2011 STMicroelectronics ="); SerialPutString("\r\n= ="); SerialPutString("\r\n= STM32F4xx In-Application Programming Application (Version 1.0.0) ="); SerialPutString("\r\n= ="); SerialPutString("\r\n= By MCD Application Team ="); SerialPutString("\r\n======================================================================"); SerialPutString("\r\n\r\n"); /* Test if any sector of Flash memory where user application will be loaded is write protected */ if (FLASH_If_GetWriteProtectionStatus() == 0) { FlashProtection = 1; } else { FlashProtection = 0; } while (1) { SerialPutString("\r\n================== Main Menu ============================\r\n\n"); SerialPutString(" Download Image To the STM32F4xx Internal Flash ------- 1\r\n\n"); SerialPutString(" Upload Image From the STM32F4xx Internal Flash ------- 2\r\n\n"); SerialPutString(" Execute The New Program ------------------------------ 3\r\n\n"); if(FlashProtection != 0) { SerialPutString(" Disable the write protection ------------------------- 4\r\n\n"); } SerialPutString("==========================================================\r\n\n"); /* Receive key */ key = GetKey(); if (key == 0x31) { /* Download user application in the Flash */ SerialDownload(); } else if (key == 0x32) { /* Upload user application from the Flash */ SerialUpload(); } else if (key == 0x33) /* execute the new program */ { JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4); /* Jump to user application */ Jump_To_Application = (pFunction) JumpAddress; /* Initialize user application's Stack Pointer */ __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS); Jump_To_Application(); } else if ((key == 0x34) && (FlashProtection == 1)) { /* Disable the write protection */ switch (FLASH_If_DisableWriteProtection()) { case 1: { SerialPutString("Write Protection disabled...\r\n"); FlashProtection = 0; break; } case 2: { SerialPutString("Error: Flash write unprotection failed...\r\n"); break; } default: { } } } else { if (FlashProtection == 0) { SerialPutString("Invalid Number ! ==> The number should be either 1, 2 or 3\r"); } else { SerialPutString("Invalid Number ! ==> The number should be either 1, 2, 3 or 4\r"); } } } }